2011-09-26 51 views
0

我有一個存儲庫的hg克隆,我已經在本地做了幾個月的許多更改,並將它們推到我的克隆在谷歌代碼。不幸的是,作爲noob,我在默認分支上做了一大堆更改。Mercurial克隆清理,以匹配上游

現在我想確保我的當前默認是完全一樣的上游,然後我可以做適當的妖異默認,只有工作的分支..

但是我怎麼做到這一點的清理,但?

僅供參考我的克隆是http://code.google.com/r/mosabua-roboguice/source/browse

PS:我得到了我的自我與混帳同樣的問題,得到了清理:Cleanup git master branch and move some commit to new branch?

回答

1

做到這一點的最好方法是使用兩個克隆。在使用遠程回購協議時,我無法控制我總是保留一個名爲'virgin'的本地克隆,但我沒有做任何更改。例如:

hg clone -U https://code.google.com/r/mosabua-roboguice-clean/ mosabua-roboguice-clean-virgin 
hg clone mosabua-roboguice-clean-virgin mosabua-roboguice-clean-working 

注意,因爲水銀使用本地克隆和硬鏈接,因爲第一個克隆是克隆與-U(沒有工作目錄(在git的術語裸回購))這個佔用沒有額外的磁盤空間。

在robo-guice中工作,並拉入robo-guice virgin,看看上游發生了什麼,然後再用roboguice工作來獲取上游變化。

事實上,您可以通過創建遠程回購的新克隆,並且如果diskspace很珍貴,可以使用relink擴展來關聯它們。

+0

謝謝。這就是我基於新的克隆所做的。清理舊的似乎很費力。我更新了我在答案中使用的命令。 –

2

首先,有沒有錯犯有默認分支。您通常不希望爲Mercurial中的每個任務創建單獨的命名分支,因爲命名分支是永久的。您可能希望查看更接近git分支(「hg幫助書籤」)的書籤功能。所以如果你現有的變更集唯一的錯誤是他們在默認的分支上,那麼他們真的沒有錯。不要擔心。但是,如果你真的想重新開始,那麼明顯,直接的事情就是從上游回頭。您可以通過移動現有的回購和重新制作來保留您的混亂變化集。然後將舊repo中的變更集移植到您選擇的分支中的新變更集。

如果您不想爲新克隆花費時間/帶寬,則可以使用(高級,危險,不適合初學者)strip命令。首先,你必須啓用mq擴展(谷歌或看手冊 - 我故意不在這裏解釋它,因爲它是危險)。然後運行

hg strip 'outgoing("http://upstream/path/to/repo")' 

請注意,我在此處使用Mercurial 1.7中添加的revsets功能。如果您使用的是舊版本,則無法輕鬆完成此操作。

+0

好的...所以我如何維護一個分支或我的克隆中的其他東西,就好像上游那樣,因此我可以將它用作我的開發基礎,並保持它的清潔並保持僅從上游引入。還是有其他方式我應該這樣做?因爲目前我由於大量衝突而難以從上游拉入.. –

+0

+1給Greg,指出默認情況下的更改是可以的。命名分支是永遠的,你的上游可能不想要它們。 –

1

前言 - 所有的歷史變化只對非公佈的回購有意義。你必須編輯本地歷史推後到googlecode上的回購從頭(GC上刪除回購,創建空,推) - 否則你會陣風默認分支獲得一個更HEAD

曼弗雷德

易(但不是短)的方式 - 默認情況下只+ MQ

  1. 作爲格雷格提到,在上游代碼頂部安裝MQ
  2. 把你所有的提交到MQ-補丁
  3. 離開你的變化pathes永遠
  4. 檢查,編輯每一個上游拉後,如果nesessary和重新整合的補丁(這種方式不MQ-補丁你自己的CG-回購將成爲等同於上游)

更復雜 - MQ中間+單獨的分支

  1. 上述
  2. 上述
  3. 創建命名分支,開關將其
  4. 「完成」 補丁
  5. 拉動上游,合併有分支的修改( defaut yourbranch)
  6. 提交更改只進yourbranch

衍合

  1. 啓用底墊擴展
  2. 創建一個名爲分支(其中有changeset? TBT)
  3. 衍合變更爲新的祖先,測試結果
  4. 請參閱第5-6從「更復雜」一章
+0

感謝您的回答。在這個階段,看起來工作太多了,我只是向上遊方向發展,並遵循Ry4an的方法。 –

0

也許你可以試試Convert extension。它可以使存儲庫以更好的形式存在,同時保留歷史記錄。當然,修改完成後,您將不得不刪除舊的回購並上傳轉換後的回購。