4

Mercurial Queues是关于补丁的,而补丁对文件重命名一无所知。这是 Mercurial Queues 不支持文件重命名的原因,还是我在重命名文件时做错了什么?我研究了一个补丁队列,只修改了一个名为foo. 现在我回到补丁 4 并通过以下方式重命名文件hg mv

hg qpop 4     # Unapply all patches until patch 4.
hg mv foo bar # Rename file and led Mercuial know about it.
hg qrefresh   # Should apply changes to unapplied patch 4.
hg qpush -a   # Should apply all unapplied patches.

我收到以下错误:

unable to find 'foo' for patching
1 out of 1 hunks FAILED -- saving rejects to file foo.rej
patch failed, unable to continue (try -v)
patch failed, rejects left in working dir
errors during apply, please fix and refresh 5.diff

那么我应该如何使用 Mercurial Queues 处理文件重命名呢?Mercurial提交处理文件重命名是有原因的(如果没有,它会丢失有关重命名后文件编辑的整个历史记录)。

更新

刚刚注意到hg histedit折叠变更集并且hg collapse也丢失了文件重命名的信息,文件显示为新文件而不是重命名的文件,我想这是出于同样的原因。似乎在不丢失该信息的情况下,在 Mercurial 中无法折叠私有变更集?

更新 2

发现在不丢失重命名信息的情况下折叠私有变更集是可能的hg rebase,它的--collapse选项,例如hg rebase -s 5 -d 4 --collapse. 其他命令应该保留重命名信息的问题仍然悬而未决,但是使用该hg rebase命令至少有一种方法可以达到预期的结果。

4

1 回答 1

0

这就是 Mercurial Queues 不支持文件重命名的原因吗?

不。

还是我在重命名文件时做错了什么?

不。

是的,链中的补丁遇到麻烦,如果它们是为foo文件准备的,但稍后会有问题bar,但由于不同的原因:补丁是独立的,每个补丁都不知道其他补丁的变化 - 它们与上下文一起工作,而不是在单独的补丁中执行一系列操作。您正确地完成了重命名,但是这个变更集使以后的变更集无效,这些变更集是在旧内容上准备的

于 2012-12-10T16:24:52.353 回答