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
,但由于不同的原因:修补程序是独立的,每个修补程序都不知道其他修补程序的更改-它们使用上下文,而不是单独修补程序中的操作序列。您已正确重命名,但此变更集会使在旧内容上准备的后续变更集无效