如何使用Mercurial Queues重命名文件



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处理文件重命名呢Mercurialcommit处理文件重命名是有原因的(如果没有,它将丢失重命名后文件编辑的全部历史记录)。

更新

刚刚注意到hg histedit折叠变更集和hg collapse也丢失了文件重命名的信息,文件显示为新的,而不是重命名的,我想这也是出于同样的原因。似乎在Mercurial中,如果不丢失这些信息,就不可能崩溃私有变更集?

更新2

发现使用hg rebase及其--collapse选项(例如hg rebase -s 5 -d 4 --collapse)可以在不丢失重命名信息的情况下折叠私有变更集。其他命令应该保持重命名信息的问题仍然是空白的,但使用hg rebase命令至少有一种方法可以实现所需的结果。

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

否。

或者重命名文件时出错了吗?

否。

是的,如果链中的修补程序是为foo文件准备的,那么它们将有问题,但稍后的修补程序将是bar,但由于不同的原因:修补程序是独立的,每个修补程序都不知道其他修补程序的更改-它们使用上下文,而不是单独修补程序中的操作序列。您已正确重命名,但此变更集会使在旧内容上准备的后续变更集无效

相关内容

  • 没有找到相关文章

最新更新