gpt4 book ai didi

version-control - hg copy 有什么作用?

转载 作者:行者123 更新时间:2023-12-03 22:17:29 25 4
gpt4 key购买 nike

我们最近做了一个 hg copy我们存储库中的一个目录。我们以为
做类似 cp -a 的事情和 hg add也许以某种方式标记
此文件已从 repo 中的另一个文件复制(因此 hg
annotate
显示原始提交者)。但现在看来hg
copy
做更多或不同的事情。我真的找不到
关于复制究竟是如何工作的。所以:

  • 究竟是做什么的hg copy做什么,这有什么特殊待遇
    future 的原因?
  • 如果结果证明对我们的案例做了“错误的事情(tm)”,我该怎么办
    将文件取消标记为另一个文件的副本?

  • (这个问题是在 Mercurial 邮件列表上提出的,你可能也想 follow the original thread。)

    最佳答案

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


    它添加新文件并将它们标记为旧文件的副本。因为它们是副本,所以在原始文件中所做的更改将 merge 到副本中。时间从左向右流动:
    (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?


    此机制仅在您 merge 时生效。如 b.txt不存在于
    共同祖先修订(上图中的 init),然后 Mercurial 将
    向后搜索以查看是否 b.txt是从别处复制过来的。

    让我们以缩写形式继续上图:
    (i) -- (edit a) -- (a edit copied to b) -- (edit a) -- (merge)
    \ / /
    (copy a b) --/------- (edit b) ------------------/

    问题是如何完成最终 merge 。共同祖先点
    现在是 copy a b节点和这里都是 ab存在。这意味着
    不会有任何副本搜索!所以第二次编辑到 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"

    这是第一次 merge 和编辑 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

    至于禁用这个......你不能真正明确地禁用副本
    检测。但正如我希望在上面说明的那样,它不会“打扰”你
    第一次 merge 后再次。

    如果第一次 merge 有问题,那么你可以使用 hg resolve --tool
    internal:local
    将文件重置回您之前的状态
    开始 merge 。所以与
    $ hg resolve --tool internal:local b

    我们本可以带来 b回到只包含一行 a .

    关于version-control - hg copy 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531915/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com