And*_*rew 3 mercurial shared-libraries
我有一个名为MySharedLib的仓库,另一个名为MyProject的仓库.MySharedLib通过强制拉动(如Jedi)包含在许多不同的回购中,而不是使用子版本.
如果克隆MyProject,则会留下以下结构:
/MyProject
MySharedLib
OtherStuff
Files...
Run Code Online (Sandbox Code Playgroud)
MySharedLib不是subrepo.从MySharedLib中提取更改就像运行一样简单:
hg pull -f path/to/MySharedLib.
Run Code Online (Sandbox Code Playgroud)
但是如果对/ MyProject/MySharedLib进行了更改,那么将这些更改仅推送到MySharedLib存储库的最简单/标准方法是什么?
MQ?hg出口?hg diff?hg移植?我的理解是,几乎所有这些选项都有效(有些在一起,有些在一起),但我想要一些方向.
然后,如果开发者提交包含MySharedLib中的其他文件的提交,会发生什么?显然这是要避免的,但我只是好奇.
以下是管理您可以推送的内容的约束:
所以,一旦你提交了这样的线性历史:
[0]---[1]----[2]-----[3]
Run Code Online (Sandbox Code Playgroud)
你可以在不推动两个和三个的情况下推动变更集零和一个,但如果你想推两个你也必须推零和一个.
如果变更集包含对/ MyProject/OtherStuff和/ MyProject/MySharedLib /的更改,则必须将它们组合在一起.
在您可以控制的地方提交之前,您唯一的灵活性是:
因此,如果您的历史记录目前如下:
[0]---[1]
Run Code Online (Sandbox Code Playgroud)
并hg status显示如下:
M MyProject/OtherStuff/file1
M MyProject/OtherStuff/file2
M MyProject/MySharedLib/file3
M MyProject/MySharedLib/file4
Run Code Online (Sandbox Code Playgroud)
然后,您希望创建一个仅包含要推送的MySharedLib更改的新变更集:
hg commit --include MyProject/MySharedLib
Run Code Online (Sandbox Code Playgroud)
让你的历史看起来像:
[0]----[1]-----[2]
Run Code Online (Sandbox Code Playgroud)
然后,在提交OtherStuff中的更改之前,您不希望推动您执行hg update更改当前parent修订,以便新的更改集将具有父项1而不是2:
hg update 1
Run Code Online (Sandbox Code Playgroud)
现在你做的时候:
hg commit
Run Code Online (Sandbox Code Playgroud)
你的新变更集三只将只有非MySharedLib更改而且父级为1,所以历史记录将如下所示:
[0]-----[1]--------[2]
\
--------[3]
Run Code Online (Sandbox Code Playgroud)
由于两个和三个不是彼此的祖先,你可以推动任何一个而不推动另一个.
也就是说,无所谓是正确的:你的用法不仅仅是奇怪的,而是出错了.你应该看一下subrepo设置.它几乎肯定比你或我刚刚描述的更好地实现了你的目标.