2

我有两个裸仓库supera一个是 - 的克隆,一个是super-的clone_super克隆。我已将 repo 添加为.aclone_aaclone_super

如果我现在在 in 中进行一些更改clone_a,推送这些并执行 a git pull origin masterin ~/clone_super/a,它将在modify statusfor中呈现,在in~/clone_super/a之后显示。git status~/clone_super

如果我这样做git submodule update~/clone_super/a将恢复到以前的提交。那么,是否意味着我每次更新它们时都需要提交和推送子模块以获取它们存在的存储库?

4

2 回答 2

4

简短的回答是肯定的,您必须在更新后提交并推送子模块。

想想如果目录不是子模块,它将如何工作,每次更改文件时都必须提交并推送它。子模块完全相同,只是super不直接跟踪文件更改。相反,子模块内的存储库跟踪文件更改,超级存储库通过跟踪子模块中的提交来跟踪这些更改。

这样做的好处是它允许以不同的粒度进行跟踪。您可以在不更改超级存储库的情况下在子模块中进行数十次跟踪更改,然后对超级存储库进行一次提交以反映子模块中的更改。成本是提交两次的要求。

于 2012-04-26T13:40:28.423 回答
1

是的,这是有意的,它可以让您在历史记录中保留哪个版本的 repoa正在使用每个版本的 reposuper

于 2012-04-26T13:41:43.307 回答