2012-12-10 50 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