2011-04-20 95 views
0

我對Mercurial相當陌生,但我看到使用Mercurial的一個優點是,在編寫功能時,您可以更自由地進行實驗,檢入更改,共享它們,等等,同時仍然保持完成特徵的「乾淨」回購。將實驗記錄保存在Mercurial的共享存儲庫中

這個問題是歷史問題之一。如果我嘗試了6種不同的方式來完成某些工作,現在我堅持了所有的歷史來應對所有的錯誤。我想要做的是通過並清理我的更改並將它們「摺疊」成一個可以推入共享存儲庫的變更集。這很複雜,因爲我可能從共享存儲庫中提取新的變更集,並將這些變更集與我自己的變更集混合在一起。

我知道這樣做的最好方法是使用hg export來創建自克隆,克隆新存儲庫並將修補程序應用到新存儲庫後所做更改的修補程序。

這些步驟似乎有點麻煩,容易搞砸,特別是如果這種方法被推廣到整個開發團隊,其中一些人有點改變(不要讓我開始)。 TortoiseHg使這個過程稍微好一點,因爲您可以突出顯示要包含在導出中的變更集。

我的問題是這樣的:我是否會讓它比需要的更復雜?有更好的工作流程可以用來緩解我的煩惱嗎?期望在一個變更集中包含整個(small-ish)特性的清晰歷史是否太多了?

或者,也許我的整個問題可以這樣概括:

是否有善變這等同? Collapsing a git repository's history

+1

你有沒有理由不使用分支? http://mercurial.selenic.com/wiki/Branch – 2011-04-20 15:17:10

+0

您是否在問如何在使用Mercurial時進行安全實驗,以供將來參考,您是問如何使用現有的實驗並擺脫它們,或者您是在問採取您現有的實驗並摺疊他們的變更集並保留這些變更?我有點不確定,因爲你似乎在描述你想要做的很多事情。你能縮小它嗎? – 2011-04-20 15:18:04

+0

對不明確的含義。基本上我認爲我的實驗歷史是一條走向最終結果的曲折道路,但我希望我最後推動共享回購,以忽略所有中間步驟。基本上,我想在我的工作副本和共享存儲庫中的版本之間進行差異化,而沒有「哎呀,這不起作用」的歷史。 – JWman 2011-04-20 15:24:48

回答

3

儘管我認爲你應該重新考慮你在Mercurial中使用分支(根據我對你的帖子的評論),使用命名分支並不能真正幫助你維護無用或不必要的歷史 - 它只是組織它們一點點。

我建議這些工具的組合:

  1. mercurial queues
  2. histedit(不與汞分佈)
  3. 的MQ變更條功能

之前返工凌亂的歷史推向一個幸運的或主要的回購。最簡單的方法是使用strip永久刪除沒有孩子的變更集。完成之後,您可以使用mqhistedit來合併,重定位或修改現有的提交。Histedit甚至可以讓您重做與變更集相關的評論。

一些缺陷:

在你的開頭一段你提到的功能發育過程中共享的變更。請理解,一旦你分享了變更集,使用mq或histedit或strip去修改並不是一個好主意。使用這些擴展可能會導致修訂散列的更改,這會使其看起來像其他人的新變更集。

此外,我同意Paul Nathan的評論:mq(和histedit)是權力特徵,可以輕易破壞歷史。在使用這些擴展之前製作安全克隆是個好主意。

1

命名分支是最簡單的解決方案。每個實驗方法都有自己的分支。這保留了實驗的歷史。

下一個解決方案是爲每個實驗都有一個新的克隆。工作人員被推回主倉庫。

下一個解決方案 - 可能是您真正需要的 - 是mq擴展,它可以將一系列補丁壓縮爲單個提交。我認爲mq是「先進的」,並且「容易意外地在腳下射擊自己」。我也不在乎壓縮我的提交 - 我喜歡將我的版本歷史記錄作爲參考。