如何使用Mercurial Queues重命名文件?

时间:2012-12-10 16:06:14

标签: mercurial mq mercurial-queue

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命令至少有一种方法可以实现所需的结果。

1 个答案:

答案 0 :(得分:0)

  

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

没有

  

或者我在重命名文件时做错了什么?

没有

是的,链中的补丁如果准备好foo文件会有麻烦,但稍后会bar,但由于不同的原因:补丁是独立的,每个补丁都不知道其他补丁的变化 - 它们与上下文一起工作,而不是单独补丁中的操作顺序。您已正确重命名,但此更改集使以后的更改集无效,在旧内容上准备