版本控制 – 什么是hg copy?

前端之家收集整理的这篇文章主要介绍了版本控制 – 什么是hg copy?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们最近在我们的存储库中创建了一个目录的hg副本.我们以为是
做一些像cp -a和hg这样的添加,也许标志不定
这个文件已经从repo中的另一个文件复制了(所以hg
注释显示原始提交者).但现在似乎是hg
复制品比这更多或不同的东西.我找不到
很多关于复制的工作原理.所以:

>什么是hg副本做什么和什么特殊待遇这样做
在未来的原因?
>如果事实证明对我们的情况做“错误的事情(tm)”,我该怎么办?
文件取消标记为另一个文件的副本?

(这个问题在Mercurial邮件列表中被询问,你可能也想要follow the original thread)

解决方法

  • What exactly does hg copy do and what special treatment does this
    cause in the future?

添加文件并将其标记为旧文件的副本.因为它们是副本,原始文件中的更改将被合并到副本中.时间从左到右:

(init) --- (edit a.txt) ---- (a.txt edit is copied to b.txt)
      \                     /
       (hg copy a.txt b.txt)
  • If it turns out to do ‘the wrong thing(tm)’ for our case,how do I
    unflag the file as beeing a copy of another file?

这种机制只有在合并时才会开始.如果b.txt不存在
共同的祖先修订版(上图中的init),然后Mercurial将会
进行向后搜索以查看b.txt是否从其他地方复制.

让我们以缩写形式继续上述图表:

(i) -- (edit a) -- (a edit copied to b) -- (edit a) -- (merge)
   \              /                                   /
    (copy a b) --/------- (edit b) ------------------/

问题是最终合并是如何完成的.共同的祖先点
现在是复制一个b节点,这里a和b都存在.意即
那没有任何搜索副本!所以第二个编辑一个wont
合并成b.

要仔细检查,我试过了:

$hg init
$echo a > a
$hg add a
$hg commit -m init
$hg copy a b
$hg commit -m "copy a b"

这是副本,b现在包含一个.

$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 unresolved
$echo bbb >> b
$hg commit -m "edit b"
created new head
$hg merge
1 files updated,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带回来只包含一行.

猜你在找的Python相关文章