2009-03-03 60 views
9

我剛剛繼承了一個使用Git維護的項目。有一次,代碼被部署到3個獨立的系統上,每個系統都維護着自己的分散的Git倉庫。整理一個Git混亂

3個系統的每一個都在3個不同的方向上擴展了原始基礎系統。這三個系統中沒有一個是相互同步的。主分支上有一些更改,其他分支在新分支上。

我怎樣才能把3個不同來源在一起,這樣我可以:

  1. 找到一個共同的基地工作;
  2. 找出哪些更改是應該應用於所有3個系統的錯誤修復;和
  3. 保持3個系統的健全方式,以便只有一個共同的分支並分離出3個不同系統所需的定製?

回答

13

我可能會先推送所有的存儲庫,以便在中央存儲庫中分離分支,從而可以輕鬆地在分支之間進行分配,合併等操作。

一個很好的可視化工具,如git-agegitnubgitxgiggle能創造奇蹟,但你的任務可能會相當繁瑣的,除非你能找到的分支點。如果在所有分支上應用了類似的修補程序,則可以使用(交互式)rebase對提交進行重新排序,以使它們的順序相同。然後你可以開始「拉緊」你的分支,通過將提交提交給主分支向上移動分支點。關於如何使用rebase重新排列提交的一個很好的描述可以找到here

您可能需要採取的措施在Git Howto Index提供的鏈接中進行了描述。一個好的cheat sheet總是很好,有觸手可及的。另外,我懷疑Eric Sinks的帖子「DVCS and DAGs, Part 1」的後續內容將包含一些有用的東西(它沒有,但是是一個有趣的閱讀nontheless)。

其他好到有鏈接:Git MagicGit ReadySourceMage Git Guide

我希望所有的回購已經好承諾,告訴你每個補丁的目的的消息,那就是或代碼審查:)

至於如何保持定製,我們運氣如下:

我們從定製代碼與通用代碼分離(或保持分離)開始。然後我們嘗試了兩種方法;這兩個工作正常:

  1. 所有部署都有自己的存儲庫,其中定製保存。
  2. 所有部署都在「定製」存儲庫中擁有自己的分支。

首次部署後,看到的是,第二個是我們花了一些時間,試圖預見未來的定製/切割點,以減少重複整個定製回購(ALT 1,這是我們目前使用的方法)事實並在基地/核心回購。

是的,我們會盡力,每當我們看到核心/定製拆分打滑:)

+1

感謝您的幫助

git reflog

。我是git的新手,對於我來說可能比其他習慣於它的人更具挑戰性。 – 2009-03-03 10:48:04

4

確定無情地重構。經過一番大肆抨擊之後,我設法做到了。對於任何人在類似的任務還着手,它會涉及到很多:

git rebase

命令和當事情變得一團糟:其次

git reset --hard [email protected]{ref}