我有一個汞庫,其中changeset 0代表「添加.hgignore」。從變更集1開始,我通過腳本從大量的Subversion修訂中逐步添加了變更集。然後我用Hg工作了一段時間。在更改集0(零)之前添加其他更改集?
現在我決定需要更多的Svn修訂版,它們位於歷史早於修訂版(Hg中的變更集1)的位置。
是否可以在0和1之間插入新的變更集?如果是的話:如何?
我有一個汞庫,其中changeset 0代表「添加.hgignore」。從變更集1開始,我通過腳本從大量的Subversion修訂中逐步添加了變更集。然後我用Hg工作了一段時間。在更改集0(零)之前添加其他更改集?
現在我決定需要更多的Svn修訂版,它們位於歷史早於修訂版(Hg中的變更集1)的位置。
是否可以在0和1之間插入新的變更集?如果是的話:如何?
可以使用水銀含汞轉換爲此。您需要爲此啓用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
。
如問:是的,你可以。
我發現至少有3種方法可以做到這一點。全部 - 與擴展
導入集的版本到尖的,進口後使用任何
rebase -s tip -d X
每個可移動的修訂,對於N個版本N操作)我喜歡MQ作爲最有力的選擇(MQ內我就可以打磨前的變更,以消除衝突和|更好的方式或分割的變化)
很好!你能向我解釋三種方法嗎? :-) – 2012-03-23 13:10:40
@ChristophJüngling - 加入回答評論 – 2012-03-24 03:54:57
感謝您的詳細解答,馬丁!這工作相當不錯,但最後一步不起作用。汞轉換告訴我,它找不到一個特定的文件(它被添加爲一個大文件;大文件擴展名在用戶級別啓用)。 – 2012-03-27 09:06:59
@ChristophJüngling:啊,這是一個大文件?這有很大的不同 - 大文件的擴展是非常有創意的擴展。恐怕'hg convert'不知道大文件。當你想重命名/包含/排除'foo/bar'時,嘗試重命名'.hglf/foo/bar'。也就是說,在站點文件上而不是在工作副本中看到的文件上運行。 – 2012-03-27 12:03:09
再次感謝。我在'hg convert --splicamap ...'之前試過'hg lfconvert --to-normal',然後它就起作用了! – 2012-03-27 13:10:39