2012-03-23 57 views
2

我有一個汞庫,其中changeset 0代表「添加.hgignore」。從變更集1開始,我通過腳本從大量的Subversion修訂中逐步添加了變更集。然後我用Hg工作了一段時間。在更改集0(零)之前添加其他更改集?

現在我決定需要更多的Svn修訂版,它們位於歷史早於修訂版(Hg中的變更集1)的位置。

是否可以在0和1之間插入新的變更集?如果是的話:如何?

回答

5

可以使用水銀含汞轉換爲此。您需要爲此啓用convert extension。作爲轉換的一部分,該擴展程序將允許您將拼接歷史合併在一起。這僅僅意味着您可以爲現有變更集指定新父項。

所以如果你開始

$ hg glog 
@ changeset: 1:aaee9686dedf 
| tag:   tip 
| user:  Martin Geisler <[email protected]> 
| date:  Fri Mar 23 15:08:11 2012 +0100 
| summary:  bar 
| 
o changeset: 0:17474bd28fe5 
    user:  Martin Geisler <[email protected]> 
    date:  Fri Mar 23 15:08:05 2012 +0100 
    summary:  foo 

您可以首先從SVN導入需要進行修正:

$ hg update null 
$ run-your-script.sh 

這將創建一個第二根變更 - 你現在實際上有兩個不相交的歷史在你的庫。我做了一個單一的變更,我加了baz文件:

$ hg glog 
@ changeset: 2:515e1292862b 
    tag:   tip 
    parent:  -1:000000000000 
    user:  Martin Geisler <[email protected]> 
    date:  Fri Mar 23 15:09:19 2012 +0100 
    summary:  baz 

o changeset: 1:aaee9686dedf 
| user:  Martin Geisler <[email protected]> 
| date:  Fri Mar 23 15:08:11 2012 +0100 
| summary:  bar 
| 
o changeset: 0:17474bd28fe5 
    user:  Martin Geisler <[email protected]> 
    date:  Fri Mar 23 15:08:05 2012 +0100 
    summary:  foo 

的最後一步是將歷史聯繫在一起:我們要17474bd28fe5有515e1292862b作爲其第一個父。使用hg log --debug看到完整的變更哈希值,並進行切片的地圖文件,

17474bd28fe535c15c7dad3659994ab048146e99 515e1292862ba2d6776294ffb00c533dc6850c66 

然後運行

$ hg convert --splicemap map.txt your-repo your-spliced-repo 

你會發現修改後的歷史your-spliced-repo

+0

感謝您的詳細解答,馬丁!這工作相當不錯,但最後一步不起作用。汞轉換告訴我,它找不到一個特定的文件(它被添加爲一個大文件;大文件擴展名在用戶級別啓用)。 – 2012-03-27 09:06:59

+0

@ChristophJüngling:啊,這是一個大文件?這有很大的不同 - 大文件的擴展是非常有創意的擴展。恐怕'hg convert'不知道大文件。當你想重命名/包含/排除'foo/bar'時,嘗試重命名'.hglf/foo/bar'。也就是說,在站點文件上而不是在工作副本中看到的文件上運行。 – 2012-03-27 12:03:09

+0

再次感謝。我在'hg convert --splicamap ...'之前試過'hg lfconvert --to-normal',然後它就起作用了! – 2012-03-27 13:10:39

1

如問:是的,你可以

我發現至少有3種方法可以做到這一點。全部 - 與擴展

導入集的版本到尖的,進口後使用任何

  • 底墊(rebase -s tip -d X每個可移動的修訂,對於N個版本N操作)
  • Histedit(編輯從啓動修訂,在編輯窗口中重新排序修訂版本,修改N版本1次)
  • MQ(選擇所有版本,導入到MQ,重新排序修補程序堆棧中的內容,編輯內容(如果需要),完成所有修訂,N修訂N + 2操作)

我喜歡MQ作爲最有力的選擇(MQ內我就可以打磨前的變更,以消除衝突和|更好的方式或分割的變化)

+0

很好!你能向我解釋三種方法嗎? :-) – 2012-03-23 13:10:40

+0

@ChristophJüngling - 加入回答評論 – 2012-03-24 03:54:57