2017-11-17 112 views
0

我的工作流是做非常頻繁的提交和推送,然後當我準備好時,將提交結合成一個提交(帶histedit等)來清理日誌。如何在hg中有一個工作流程,哪裏有非常頻繁的提交?

用git,我會做一個rebase和push。留下的搖搖晃晃的頭不會亂丟我的日誌,最終會被垃圾收集。

隨着mercurial,我結束了多個頭。如果我關閉分支以擺脫陳舊的頭部,最終會有一百萬封閉的分支仍然出現在日誌中。這破壞了最初的目的。

如何在沒有完全搞砸日誌的情況下在mercurial中擁有這樣的工作流程?有沒有可以在mercurial下工作的替代工作流程?

請注意,頻繁的提交也被推送到回購(爲了安全起見)。這意味着我不能很好地使用像strip這樣的東西。

+0

你*可以*使用'hg strip',這只是一個很大的痛苦。考慮設置頻繁的小提交以使用祕密階段,以便它們不被推送。如果你確實需要明確地推動它們,那麼在之後強制它們回到祕密階段,並且在需要時/在需要時將它們剝離。 – torek

+0

一旦您將提交推出,Strip將不起作用。我的意思是,它適用於當地的回購協議,但是當你下次回來的時候你可以回覆它們。他們永遠在回購中。你最終會有多個頭。你可以關閉一個分支來擺脫頭部,但歷史/日誌仍然很痛苦地混亂。 下面有一個鏈接描述清除不需要的分支的3種方法。但是他們都很痛苦,所以這個工作流程非常繁瑣。 https://www.mercurial-scm.org/wiki/PruningDeadBranches – Ziffusion

+0

這就是爲什麼我建議將它們標記爲祕密。一旦推動,你必須從每個存儲庫中'hg strip',這就是「巨大的痛苦」。 Lazy Badger的建議(禁用輔助備份存儲庫中的發佈)也可行,但現在需要三個倉庫:「工作站點」,「輔助備份」和「發佈點」。然而,並非所有這些,Evolve擴展顯然是在正確的軌道上,我不知道它爲什麼還不是標準Mercurial的一部分。 – torek

回答

1

考慮進化擴展,在this post中有最好的解釋,儘管它不是特定於bitbucket的,並且在Mercurial環境中得到了廣泛的支持。你可能已經安裝了,只需要啓用它。

一旦你喜歡它,它是世界上最好的。它允許一個提交替換另一個 - 即使它已經被推送,它也會廢棄另一個提交。它可以讓你重寫提交的方式,不會中斷已經推送提交。把它想象成git --amendgit rebase,但對於已經推送過的東西來說是安全的。

當您執行一個廢棄一個或多個其他變更集的過程時,爲這些變更集推送過時的標記,隨後從該回購中抽取的任何人都會將廢棄的變更集替換爲其歷史記錄/日誌中已廢棄的變更集推。過時的變更集仍然存在,但它們不會混淆日誌。

我希望我們很快能在git中看到類似的東西 - 一些人已經開始研究類似的功能。

+1

謝謝!幾個問題。 Docs表示,進化使回購交換過時信息成爲可能。在混合環境中會發生什麼?非進化啓用回購會看到什麼?文檔還表示,進化只會讓你在兩個不同的階段之一(祕密或草稿)中重寫變更集。這是否意味着這種機制不能用於已經被推送的提交? – Ziffusion

+0

還有一個。我有很多這些懸掛的分行,我想清理。有沒有辦法使用進化來修剪一個提交及其所有後代?像條,但對於推送提交。 – Ziffusion

0

雖然@ Ry4an建議真的的最佳途徑(TM),你可以用另一種方式問心無愧唯一的「經典」發佈工具

  1. 使用[phases] publish=False推送目標(閱讀和神交phases)(見也介紹到階段)
  2. 使用After pushing to a review repository, "abort: can't rebase immutable changeset" on rebasehttp://www.logilab.org/blogentry/88203任何改寫歷史就在你身邊方法
  3. 如果推突變歷史上未發佈回購仍然會ç reate額外的頭(我懶得爲你測試) - 通過使用dummy merges消除所有不需要的匿名分支(與「髒」的歷史) - 你將有很多合併集歷史上,但只有一個真正的頭
相關問題