我有一个像这样设置的Mercurial仓库,其中一个子仓位在另一个子仓库中:
Root
.hg
.hgsub
.hgsubstate
Nested
.hg
.hgsub
.hgsubstate
foo.txt
FurtherNested
.hg
bar.txt
如果我更改foo.txt和bar.txt并从Root内部提交,那么一切都很好,并且所有嵌套的子目录都提交。但是,如果我只改变bar.txt并从Root提交,那么Hg认为没有任何改变。我必须从Nested内部提交,以便在FurtherNested中只有更改时提交FurtherNested更改。似乎为了使嵌套子实例工作,每个嵌套级别必须包含更改,以便递归起作用。
我在Merbulial文档中读到的关于subrepos的内容似乎并不意味着subrepo提交只会在有变化的情况下传播。事实上,它恰恰相反:
当我们提交时,Mercurial会尝试 以递归方式提交所有已定义的 subrepos ...
所以我的问题是,这是预期的还是已经破坏或者还没有完成(Windows上的Mercurial 1.5.4)?
答案 0 :(得分:2)
在我看来,这只是一件破碎的事情。相关的源代码(在subrepo.py中)似乎没有递归到subsubrepos,即:
def dirty(self):
r = self._state[1]
if r == '':
return True
w = self._repo[None]
if w.p1() != self._repo[r]: # version checked out change
return True
return w.dirty() # working directory changed
可能不会太难修复,尽管我还不太了解代码。可能值得在Mercurial mailing list上发布和/或提交错误。我怀疑Matt和Benoit正在阅读这篇文章,但他们肯定会阅读那里发布的所有内容。