Version control hg copy做什么?
我们最近在我们的存储库中复制了一个目录。我们认为是这样的 像Version control hg copy做什么?,version-control,mercurial,merge,Version Control,Mercurial,Merge,我们最近在我们的存储库中复制了一个目录。我们认为是这样的 像cp-a和hg这样的东西是否添加了,也许会以某种方式标记出来 此文件是从repo内部的另一个文件复制的(因此hg 注释显示原始提交人)。但现在看来,hg 复制所做的工作比这多或不同。我真的找不到 关于复制究竟是如何工作的。因此: hg copy到底做了什么?这需要什么特殊处理 未来的事业 如果结果证明它对我们的案例做了“错误的事情(tm)”,我该怎么办 是否将该文件作为另一个文件的副本取消绑定 (这个问题是在Mercurial邮件列
cp-a
和hg这样的东西是否添加了
,也许会以某种方式标记出来
此文件是从repo内部的另一个文件复制的(因此hg
注释
显示原始提交人)。但现在看来,hg
复制
所做的工作比这多或不同。我真的找不到
关于复制究竟是如何工作的。因此:
到底做了什么?这需要什么特殊处理 未来的事业hg copy
- 如果结果证明它对我们的案例做了“错误的事情(tm)”,我该怎么办 是否将该文件作为另一个文件的副本取消绑定
- hg copy到底做了什么?这需要什么特殊处理 未来的事业
(init) --- (edit a.txt) ---- (a.txt edit is copied to b.txt)
\ /
(hg copy a.txt b.txt)
- 如果结果证明它对我们的案例做了“错误的事情(tm)”,我该怎么做 是否将该文件作为另一个文件的副本取消绑定
b.txt
不存在于
公共祖先版本(上图中的init),然后Mercurial将
向后搜索以查看是否从其他地方复制了b.txt
让我们以缩写形式继续上面的图表:
(i) -- (edit a) -- (a edit copied to b) -- (edit a) -- (merge)
\ / /
(copy a b) --/------- (edit b) ------------------/
问题是如何完成最终合并。共同祖先点
现在是copy a b
节点,这里同时存在a
和b
。这意味着
不会有任何副本搜索!因此,对a
的第二次编辑不会
合并到b
为了再次检查,我尝试了一下:
$ hg init
$ echo a > a
$ hg add a
$ hg commit -m init
$ hg copy a b
$ hg commit -m "copy a b"
这是副本,b
现在只包含a
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo aa >> a
$ hg commit -m "edit a"
created a new head
$ hg merge
merging a and b to b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m "a edit copied to b"
这是第一次合并,对a
的编辑已复制到b
:
$ cat b
a
aa
我们现在同时进行更改:
$ echo aaa >> a
$ hg commit -m "edit a again"
$ hg update 3
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo bbb >> b
$ hg commit -m "edit b"
created new head
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
没有进一步的复制操作:
$ cat a
a
aa
aaa
$ cat b
a
aa
bbb
至于禁用这个。。。您不能真正明确地禁用该副本
侦查但正如我希望上面所说明的,它不会“打扰”你
在第一次合并之后
如果第一次合并有问题,那么可以使用hg resolve--tool
内部:本地
,将文件重置回您之前的状态
开始合并。所以
$ hg resolve --tool internal:local b
我们本可以将b
恢复为只包含一行a
如何将该文件作为另一个文件的副本取消绑定
如果还原hg副本,则复制到的文件随后将保留在工作目录中,未进行跟踪。你只需要正常地添加它。
从文件复制的文件完全不受影响
% hg copy file new-file
% hg status -C
A new-file
__file
% hg revert new-file
% hg add new-file
% hg status -C
A new-file
参考:抱歉,无法在我的测试中确认合并头上的复制更改<代码>>hg版本Mercurial分布式SCM(2.0.1版)是否也不在第一次合并中?请写信mercurial@selenic.com因此,我们可以在那里全面讨论它,这比这些小评论框要好得多:)“也不在第一次合并中?”-是的。电子邮件注意到,消息将被发送(带有日志)如果您不能用我的步骤复制它,这很奇怪。。。感谢您将日志发送到列表中,这将使讨论更容易。您解决问题了吗?我在邮件列表上没有看到任何日志。你也可以在书中阅读。