为什么hg总是提交一个git子模块,即使它没有改变?

时间:2011-05-27 02:12:11

标签: git version-control mercurial git-submodules

我有一个hg存储库,带有一个hg子存储库,它有一些git子模块。 (我知道这听起来很疯狂,但它正在使用谷歌代码中的svn repos,github中的libs和bitbucket中的模块。我正在使用由一群人自由提供的代码,我是谁来抱怨他们的决定版本控制 - 我想要的是代码,我很感激。)

关于这种情况的一点“树”:

+ hg repo
  + hg subrepo
    + git submodules

当我更改hg子存储库中的文件并提交时,它会提交所有git子模块,即使它们没有被更改。我已经运行hg status,它没有显示有关git子模块的任何信息,但如果我提交:

committing subrepository SUBREPO

如果我只使用一个带有一堆git子模块的hg主回购,那就不会有问题了。当我在第一个hg存储库中进行更改时,问题依赖于:现在,当我提交时,它会在hg存储库和hg子存储库中提交,因为总是提交git子模块。所以现在,我的评论只是在第一个hg存储库中,而在hg子存储库中的注释相同。

对于我使用git子模块在hg存储库/子存储库上执行的每次提交,如何避免这种间隔committing subrepository SUBREPO?这是一个错误吗?这是一个git设计(也许git存储库总是至少改变一个“状态”文件或类似的东西,总是在拉动后改变?我对git没有太多经验...)

2 个答案:

答案 0 :(得分:2)

即使是没有任何内容的拉动也会触及git中的文件...更具体地说是.git/FETCH_HEAD文件。我不记得hg / Mercurial如何在这里做,但我怀疑同样的事情。在任何情况下,如果它是一个空拉,那么文件本身不会改变,只有时间戳。

您可以通过制作git / hg存储库的精确副本来验证这一点,然后只抽取一个。目录比较工具将显示已更改的文件。

如果我正确记住了我的hg,hg status命令将明确地不包含子存储库中的文件,因此您看到的行为是有意义的。

答案 1 :(得分:0)

不知道是否有这方面的帮助,但在Subrepository第3.1节中,他们解释了应该如何布置subrepo。

但我明白你在这个组织中没有发言权?你可以重新组织你的层次结构吗?