2009-06-04 42 views
49

我剛開始使用Git與Mercurial一起熟悉Git。git相當於hg mq?

我使用水銀的MQ擴展廣泛地管理本地補丁,我在尋找一個Git等同。

我應該只使用Git分支嗎?或者是否有更好的方法來管理可輕鬆應用和刪除修補程序的本地修補程序?

謝謝,

+0

事情是我們需要這樣的事情在git上非常罕見的場合。 – shabunc 2014-04-08 03:02:50

回答

28

查看Git Wiki上Interfaces, Frontends And Tools頁面的「補丁管理接口層」部分。列出了兩個補丁程序管理界面,大致相當於汞「MQ」 擴展

  • StGIT(疊放GIT),老年兩,用Python編寫的,使用兩個快照表示補丁
  • Guilt (以前稱爲'gq'),編寫爲一系列bash腳本,系列文件和補丁(每個文件一個)以純文本文件形式存儲。
  • PG(斑片狀GIT)是棄用,而不再保持。

但是,如果您不需要更高級的用法,您可以改爲使用「git rebase --interactive」來重新排序,擠壓和拆分修補程序。爲了管理你的分支與當前版本的上游,「git rebase」通常就足夠了。

+1

你能說出那些「高級用法」之一嗎?我認爲`git rebase --interactive`幾乎消除了對像Mq這樣的東西的需求。 – kizzx2 2010-08-18 15:32:16

+7

** @ kizzx2:**`git rebase --interactive`強制您按順序處理整個系列。使用補丁管理界面,您可以輕鬆地在補丁之間來回編輯。您還可以查看修補程序的歷史記錄,在系列中添加新的提交,櫻桃選擇其他提交等。 – 2010-08-19 10:13:50

7

Git並不真正提供此功能本身。根據您的使用情況,您可能可以通過「git stash」和/或分支獲得,但它會非常基本。如果人們對git有更高級的補丁管理需求,他們似乎轉向了Quilt或StGit:請參閱http://git.or.cz/gitwiki/PatchManagement

9

只需使用一個分支,並定期重訂其對你的上游分支。這比使用mq(過去我丟失了數據)更容易管理和更安全。

31

免責聲明:我不是汞的用戶,所以我看了一下汞柱,但沒有使用它的很多第一手經驗。

混帳提供了幾個非常強大和靈活的工具,在「補丁隊列」式管理分行的許多基本的(甚至一些相當複雜),使用這樣的情況下,原生Git是足夠強大的。

通常情況下,大多數項目保持一個穩定的中央主分支,只有獲得新的提交,並且永遠不會「倒帶」的主分支,從而提交是固定的。

除此之外,維護人員(或開發人員)可以維護一個或多個基於穩定分支的工作進行中補丁(即提交)的流體分支。

典型的補丁管理活動包括:

基礎重建的補丁隊列到最新的穩定分支 - 使用git rebase

複製補丁隊列到舊maintentance分支 - 使用git branchgit rebase

重新排序隊列中的修補程序 - 使用文本編輯器使用git rebase --interactive(又名git rebase -i)對隊列重新排序。

擠壓斑塊 - 使用git rebase -i與南瓜指令

改變補丁或補丁提交信息 - 使用git rebase -i(發現了一個主題?)與編輯指令。

任何以任何方式(即其內容,描述或親子關係)修改修補程序的活動都將爲該修補程序創建一個新的提交ID。舊提交可能會被拋棄並且在被提升爲穩定主分支之前經常被替換的事實是使得它們成爲「補丁隊列」而不是分支的唯一的事實,但這是項目約定而不是任何物理差異在構成提交的數據中。 git他們是相同的對象。

要將修補程序升級到「真實」提交,只需將修補程序移到隊列前面並將其合併到主分支中。將修補程序移到隊列前面後,它與基於主分支的正常提交相同,因此合併它只是將主分支指針快速轉發到指向修補程序提交。

將此提交作爲「穩定」主修補程序發佈是這樣一種行爲:現在這是一個不會更改的提交,它是項目不可變歷史記錄的一部分。