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
Version control hg copy做什么?_Version Control_Mercurial_Merge - Fatal编程技术网

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)”,我该怎么办 是否将该文件作为另一个文件的副本取消绑定
(这个问题是在Mercurial邮件列表中提出的,您也可以这样做。)

  • 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因此,我们可以在那里全面讨论它,这比这些小评论框要好得多:)“也不在第一次合并中?”-是的。电子邮件注意到,消息将被发送(带有日志)如果您不能用我的步骤复制它,这很奇怪。。。感谢您将日志发送到列表中,这将使讨论更容易。您解决问题了吗?我在邮件列表上没有看到任何日志。你也可以在书中阅读。