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

Som*_*DOS 9 git version-control mercurial git-submodules

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

关于这种情况的一点"树":

+ hg repo
  + hg subrepo
    + git submodules
Run Code Online (Sandbox Code Playgroud)

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

committing subrepository SUBREPO
Run Code Online (Sandbox Code Playgroud)

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

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

Jan*_*Jan 2

即使拉取什么也得不到,也会触及 git 中的文件……更具体地说是.git/FETCH_HEAD文件。我不记得 hg/Mercurial 在这里做了什么,但我怀疑同样的事情。无论如何,如果是空拉取,则文件本身不会更改,只会更改时间戳。

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

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