Mercurial有
hg copy file file2
命令和更改可以在第一次合并时传播更改。 O'Reilly Mercurial书中说,Mercurial是唯一能够做到这一点的源控制系统。
这有什么实际用途?该书提到制作文件的副本并进行错误修复,因此错误修复可以传播回原始文件,但是通过版本控制,我们通常不直接编辑文件,如果错误修复有效,那么直接提交那个文件?或者即使由于某种原因我们需要制作副本,我们可以cp file file2
,测试修复,然后mv file2 file
将该文件移回原始文件,然后提交文件。使用hg copy
功能的好例子是什么?
答案 0 :(得分:2)
这是我个人使用过的一个例子。具有复杂配置文件的软件包有时会提供名称为universe-wsgi.ini.sample
(hi,galaxy)的示例,作为安装的一部分,您应该将.ini.sample
文件复制为.ini
文件。如果你这样做:
hg copy universe-wsgi.ini.sample universe-wsgi.ini
然后,每当您使用hg pull ; hg update
更新软件时,示例中的新设置都会添加其默认值为您的自定义版本。
答案 1 :(得分:0)
假设您在文件中有基类。您希望创建派生类,以便执行hg copy
并通过删除某些方法并对其他方法进行更改来自定义派生类。现在,您在另一个分支的同事修复了基类中的错误。当您进行合并时,该错误修复将合并到您的派生类和基类中。
答案 2 :(得分:0)
我已经看到很多关于这个话题的混淆,不可否认的是我起初太过分了。根据我的理解,这个用例如下。
如果您正在制作文件的副本,而其他人可能同时处理同一文件,或者在与更改集重叠的时间点以轻量级或实际分支方式分叉/分支,则此文件为被复制并可能被修改,这是hg拷贝的候选者。
它解决了从未来的变化中对该文件进行回归的问题,直到知道该分支的其他“头”存在为止。
它似乎没有使用的是:
问题变得复杂,特别是一旦你进入重新分解。将更改应用于很久以前复制的文件是不可取的。看起来如果你将复制文件的开发保存在一个完全独立的分支中,它只会这样工作,但是一旦两个分支再次合并在一起,hg copy将不再符合你的预期。
我的参考:http://hgbook.red-bean.com/read/mercurial-in-daily-use.html