2012-12-10 24 views
4

水银队列是关于补丁,补丁对文件重命名一无所知。这是Mercurial队列不支持文件重命名的原因,还是我在重命名文件时做了错误的操作?我曾在修补程序队列中修改过一个名为foo的文件。现在我回去通过hg mv修补4和重命名文件:如何使用Mercurial队列重命名文件?

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 提交句柄文件重命名的原因(因为没有,它将失去重命名后的文件编辑的整个历史)。

更新

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

更新2

实测出塌陷私人的变更而不会丢失信息重命名是可能的hg rebase及其--collapse选项,例如hg rebase -s 5 -d 4 --collapse。其他命令应该重新获得重命名信息的问题仍然存在,但使用hg rebase命令至少有一种方法可以实现所需的结果。

+0

它看起来有点怪,因为'汞帮助mq'拥有究竟你的情况注:_“在默认情况下,MQ会自动必要时使用git补丁,以避免丢失文件模式更改,复制记录,二进制文件或空文件创建或删除。“_ – develop7

回答

0

Is this the reason why Mercurial Queues don't support file renames,

没有。

or am I doing something wrong renaming the file?

没有。

是的,在链补丁将有的麻烦,如果他们是为foo文件准备,但后来将bar,但由于不同的原因:补丁是独立的,每一个和每个补丁一无所知的变化其他人 - 他们使用上下文,而不是单独补丁中的操作顺序。你做了正确的重命名,但这变更无效后变更,在旧的内容准备

+1

因此,我应该如何处理使用Mercurial队列的文件重命名? – Iodnas

+1

也许(只是猜测,无法验证它atm)你可以手动创建一个git样式差异(支持重命名),把它放在.hg/patches/somename和回显somename >> .hg/patches/series看看它是否适用? –

+0

我会确认创建一个git风格的.patch文件保留至少一次导入重命名信息 – Thymine