Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial Hg次级回购依赖性_Mercurial_Dvcs - Fatal编程技术网

Mercurial Hg次级回购依赖性

Mercurial Hg次级回购依赖性,mercurial,dvcs,Mercurial,Dvcs,我目前正在从CVSNT迁移到Mercurial,但在使用CVS模块时遇到了一些问题。我有两个项目,比如A和B,它们都依赖于目录C中的公共代码。如果我对目录C中的代码进行更改,我希望这些更改反映在项目A和B中。(这似乎与问题完全相反) 我认为这可以通过使用Subrepo实现,但是项目A和B中的.hgsubstate会记录我列出的Subrepo中的变更集。也就是说,我在项目a的C中提交了一个变更,我必须手动打开B来更新和提交。(事实上,还有更多的项目只有A和B,是的,我知道公共代码应该在共享库中,但

我目前正在从CVSNT迁移到Mercurial,但在使用CVS模块时遇到了一些问题。我有两个项目,比如A和B,它们都依赖于目录C中的公共代码。如果我对目录C中的代码进行更改,我希望这些更改反映在项目A和B中。(这似乎与问题完全相反)

我认为这可以通过使用Subrepo实现,但是项目A和B中的.hgsubstate会记录我列出的Subrepo中的变更集。也就是说,我在项目a的C中提交了一个变更,我必须手动打开B来更新和提交。(事实上,还有更多的项目只有A和B,是的,我知道公共代码应该在共享库中,但PHB坚持!)


有没有办法做到这一点?理想情况下,我希望对用户来说,回购协议的结构是透明的,即他们可以向C提交变更,而不必意识到这是他们项目的子回购协议。(目前,tortoise Hg使用“S”表示次级回购是脏的)。我想我需要的是爸爸回购和部分退房,但肯定有更好的办法吗?我在Windows上,所以符号链接不存在。

您必须手动更新(并提交)子存储库的事实是非常有意的。在CVS和SVN中发现的这一错误特征被故意忽略

如果它会自动将子存储库更新为最新提交,则无法保证代码仍能正常工作。例如,如果您要更改C的API,则在您相应地更改它们之前,A和B都不会起作用。而且,由于您永远不能同时以原子方式推送多个存储库,因此不可避免地会有一个窗口,在此期间a和B不起作用。在实践中,这个窗口可能会变得相当大,特别是当其中一个依赖项目受到较少的开发关注时。如果项目B被搁置一段时间,项目a对C的更改将很快打破它

更糟糕的是,更新到早期版本将无法将子存储库恢复到它当时的状态。因此,只要您对子存储库进行向后不兼容的更改,旧版本就不再有效了!这大大降低了版本控制的实用性。这将导致分支问题,例如,二分法将无法工作

这就是为什么您需要手动更新到C的最新版本,测试是否一切都正常,并签入子存储库更新。从而将存储库版本紧密锁定到子存储库版本。您牺牲了一点便利性,但您获得了代码稳定性,我希望我能够清楚地说明为什么这会更好:)

至于从父存储库中透明地提交到子存储库,据我所知,计划这样做,但到目前为止还没有人真正实现它