2010-07-28 103 views
2

我已經在分佈式環境(包括GitHub)中使用git,在這個環境中開發人員脫機工作,然後推送到中央倉庫。由於我們有多個辦事處,因此我現在需要更加結構化的存儲庫層次結構。如果我們舉一個例子,我們有位於塔林的開發人員將推送到他們的遠程存儲庫。我們在倫敦也有開發人員將他們推到他們的倉庫。然後,我們需要合併兩個遠程存儲庫之間的更改,並將它們傳回兩個站點中的開發人員。因此,層次結構如下所示:如何管理GIT存儲庫層次結構?

  
    Tallinn ------- London 
     |     | 
-------------  ------------- 
| | | |  | | | | 
Dev Dev Dev Dev Dev Dev Dev Dev 

有人可以推薦最佳方法來實現此目的嗎?

回答

3

我會挑選一個城市來承辦官方大師,並有人負責合併來自兩個城市的變化。每個城市都會有自己的回購,開發商可以承諾,並在一天結束時所有的變化將融入主回購。然後兩個城市回購將從那裏更新。

   master 
       | 
    Tallinn ------- London 
     |     | 
-------------  ------------- 
| | | |  | | | | 
Dev Dev Dev Dev Dev Dev Dev Dev 

這與Linux的工作原理並不完全相同。 1人控制主人,但不是城市,而是由子系統劃分。

2

如果塔林和倫敦之間沒有直接聯繫(意味着您不能直接從一箇中央倉庫推到另一箇中央倉庫),那意味着塔林和倫敦倉庫是essentially fork one from another

叉是更多的共享版本化數據的社交方式,由GitHub推廣。
但是GitHub上叉背後的原理仍然適用於您的情況:你會通過補丁交換數據(如「使用,例如git format-patch」)。

即使您的回購沒有fork queue(如GitHub回購),您仍需要管理給定回購庫上的各種補丁,並檢查它們是否可以快進的方式應用。
我會建議從這種更新的專用分支。

0

我認爲你需要一個託管在某個地方的「公共」資源庫,鏈接到塔林和倫敦。 所以每個團隊都可以從中推拉。

0

我建立了一個能夠訪問這兩套存儲庫的'看門人'。這臺機器可以是服務器,也可以是別人機器上的子目錄,它有兩個辦事處的遠程設備存儲庫。然後,需要雙方更新每個回購:

git pull talinn 
git pull london 
git push talinn 
git push london 

注意,無論是拉操作可能導致合併衝突,將需要手動解決。如果您有腳本執行此操作,則必須將這些案例投放給開發人員進行修復。儘管如此,讓一個人每隔一段時間完成一次這個任務是很有可能的。