5

我对 Git 很陌生:我来自 SVN,在那里我发现 :external 功能非常强大。在 Git 中我没有找到类似的东西:

  • 子模块非常适合添加并不总是需要的项目模块。它们必须在 repo 克隆后初始化,并且不能只包含原始项目的子目录。
  • 子树非常适合添加库(它们也允许包含子目录),但推动它们是一件非常痛苦的事情。

所以场景是这样的:我有一个项目,我想在其中包含一些库。我希望有可能更改所有这些库并将它们推送到自己的存储库中。此外,其中一些库是较大项目的子目录(例如,如果一个项目还包含演示或自述文件,我不会在我的项目中包含这些目录)。

我怎样才能做到这一点?

我试过了:

好吧,如果您已经达到了这一点,感谢您的耐心等待,现在我想尝试其他方法,因为现在我的结论是:“Git 中不允许子树推送”ç_ç

4

2 回答 2

3

评论中的几点评论:

所以我推荐:

  • 加载(git checkout)父仓库及其所有子模块
  • 在其他地方创建正确的结构,并带有指向子模块(或子模块的子目录)的符号链接,以实现您所需要的。
  • 定期返回 git ain 父 repo 以检测任何更改(从在 Git 之外创建的其他目录结构完成)以提交和推送所有子模块 modif,然后提交并推送父 repo。

git结帐

parent repo
  +
  +--> main project
    +
    +-> mainDir1
    +-> mainDir2
  +--> lib1
    +
    +-> lib1Dir1
    +-> lib1Dir2
  +--> lib2
    +
    +-> lib2Dir1
    +-> lib2Dir2

以及你自己的项目目录结构(例如)

  +--> main project (symlink to ../parent/main project)
    +
    +-> mainDir1
    +-> mainDir2
    +-> lib1Dir1    (symlink to ../parent/lib1/lib1Dir1)
    +-> lib1Dir2    (symlink to ../parent/lib1/lib1Dir2)
    +-> lib2Dir2    (symlink to ../parent/lib1/lib2Dir2)

(注意没有lib2Dir1(例如),因为在您的实际项目中您不需要它)

于 2012-02-23T09:47:49.557 回答
1

VonC 的解决方案很简洁,但它有一个缺点:没有好的方法可以在某个时间点捕获项目+库的配置。

如果您需要再次设置您的项目,您需要检查您的项目 + 库,但它们可能都位于不同的分支上并提交给您之前的内容。

因此,如果您遵循 VonC 的建议,则可能在发布项目时在每个存储库中创建标签,以便您至少可以在同一时间再次检查它们。

否则,请始终前进,永远不要签出旧版本。

于 2012-06-05T12:13:48.473 回答