Git使用子树或子模块来管理外部资源

时间:2012-10-01 06:54:36

标签: git git-submodules git-subtree

我读了很多关于git子模块应该是多么可怕,但我不确定这是否只是那些觉得有限的人或者是否有严重问题(特别是关于我的用例)的呻吟。

我只想将不同的回购包含在我的回购中,就像这样

website/
 libs/
  js/
   fs-slides [external]
   fs-dialog [external]

并且必须能够轻松更新这些回购。据我所知,从回购中只包含一个文件是不容易的,对吧? (但没关系。)

我应该使用子模块吗?
或者它有什么问题吗?或者子树更容易吗?

1 个答案:

答案 0 :(得分:11)

子模块非常适合您的情况,特别是因为您不介意将这些子目录包含在它们自己的子目录中。

使用子模块可能遇到的主要严重问题是在进行更新时更新它们,如“how exactly does git submodule work”中所述:

如果您在子模块中进行提交时忘记设置分支,则表示提交将在分离的HEAD上进行,并且正在进行的更改将在下一个git submodule update丢失(您可以通过reflog,如果你的子模块仓库被激活了。)

然后,作为Michael comments,并且正如我在上面的链接中详述的那样,您需要在提交并推送父repo之前将子模块推送到其自己的上游(以避免推送取消发布子模块提交)