【发布时间】:2013-01-23 04:27:50
【问题描述】:
在 mercurial 中,我可以hg copy 一个文件,当我更改旧分支中的原始文件并将其合并到我当前的分支时,文件的原始文件和副本都会合并更改在。
我知道 git 在合并时可以很好地处理重命名。如果我将文件originalfile 重命名为newfile,在一个分支中更改为originalfile 并将该分支合并,然后git 会将对originalfile 所做的更改应用到newfile。
我不能让它做的是处理副本。 Git 可以检测副本,但如果我将originalfile 复制 到newfile 并进行与上述相同的合并,那么只有originalfile 被更改,而不是副本。
在这方面有没有办法让 git 像 mercurial 一样工作?
【问题讨论】:
-
“更改旧分支中的文件”。在 Git 用语中,这听起来像是修改作为复制操作的祖先的提交,因此听起来您希望副本更改,因为您“及时返回”并在复制之前更改了原始文件。正确的? (我对 mercurial 不是很熟悉。)
-
所以,originalfile 在 'master' 上,我执行 'git checkout -b somebranch' 并进行复制、提交,然后执行 'git checkout master',更改 originalfile 并尝试合并 master进入某个分支。没有进行任何修改。
-
这与其说是一个文件 copy,不如说是一个文件 fork。您似乎在想,如果我将一个文件的十几个副本以不同的名称复制,那么
git会在我更改原始文件时使所有文件保持最新,尽管对副本进行了任何其他更改。在某些情况下,这可能有用,但git并非旨在以这种方式做事。 -
@twalberg,不幸的是,我开始认为你是对的。我认为 mercurial 有这种能力,也许有办法让 git 做同样的事情。特别是因为您可以使用 --find-copies-harder 和 git diff 来识别文件副本。如果这是一个答案,我会接受你的评论。
标签: git version-control merge