git子模块 - 尝试调试一个难以捉摸的问题

时间:2011-07-06 14:22:02

标签: git commit git-submodules

我们使用多个子模块来保持代码模块化。大多数开发人员在其中的1个或2个中工作,这使得它们很好,因为他们不必填充他们不关心的代码区域。我们在分支机构工作。子模块和超级项目在同一分支上签出。有趣的来了。他们在子模块中进行更改,添加,提交。 cd到超级项目,并重复提交以记录他们更改的子模块的新版本。然后他们运行supergit pull来更新工作区中的所有内容。这应该引入所有子模块的所有最新版本。然后他们推动交付。我们的构建系统创建一个克隆,并填充所有子模块。然后,它发现开发人员未填充的子模块之一具有尚未在超级项目中提交和推送的提交。当发生这种情况时,我们现在无法构建,但我们怎样才能避免它呢?我已经要求开发人员在推送之前填充所有子模块,以确保不会发生这种情况,但我们实际上已经看到在没有对分支进行任何更改时会出现此问题。在假日周末,当没有人做出改变时,其中一个分支机构开始失败。是否有可能git失去了对超级项目的承诺?

1 个答案:

答案 0 :(得分:0)

  

当发生这种情况时,我们现在无法构建,但我们怎样才能避免它呢?

好吧,如果有人在没有推送到子模块仓库的情况下推送到父仓库,那么构建失败是正确的行为。怎么避免呢?在开始提交和推送父项目之前,请确保首先按下子模块。

  

git可能会丢失提交吗?

简答:不。更长的答案:这是不太可能的。 Git努力维护存储库的一致性。如果您提交了A -> B -> C,那么除非您明确告诉git执行此操作,否则突然不能A -> C 。当然,git只是一个软件而且所有软件都有bug,所以从技术上讲,这种情况很可能发生,但我真的怀疑这是你的情况。