2016-02-03 48 views
0

我讀過各種混帳教程,但仍然有一些關於如何使用git存儲庫&分支機構的問題。尋求建議如何構建混帳存儲庫/分支

這裏的情況,我有:

我有一個由外部合作伙伴保持着,我也得到源代碼中的代碼庫「A」更新每隔幾個月吧。基於代碼庫「A」,我建立了另一個產品「B」,這是我的核心產品。然後,我使用產品B作爲我的客戶的基礎。每個客戶都有自己的小調整。因此,我爲每個客戶維護單獨的代碼庫。視覺上看起來是這樣的:

 A 
    | 
    B 
// \ \  
C D F G 

現在的問題:)上的代碼庫「A」發生每一次變化或「B」,我有一個艱鉅的任務全部修改合併到其他的代碼庫。我正在尋找一種如何利用Git來緩解這段代碼合併任務的方法。

通過閱讀教程,我學到了很多東西。但是,我仍然有一個關於我的存儲庫/分支結構應該如何的基本問題。這裏是我的問題:

  • 我是否需要爲每個代碼庫存儲庫?
    • 如果是的話,我可以如何在不同的存儲庫之間執行代碼合併?
  • 我應該爲每個代碼庫有多個分支的倉庫嗎?

    • 什麼應該是我的主分支? A還是B?
    • 合併應該如何進行?通過使用rebase
    • 分支存儲在單獨的文件夾?
  • 是否有解決問題的另一種(更好的)方法?

任何幫助將是偉大的! 謝謝

回答

0

這並不清楚A和B之間的切口是多麼乾淨。您可以決定將其全部放入一個存儲庫中,並將這些目錄分開,或者將它們放在單獨的存儲庫中,並可能使A成爲B的子模塊。這取決於你如何接收這些更新。

至於分支;您可以爲B的每個變體都有一個分支,然後每當您更新B時其他代碼庫也應該有,只需將git merge B合併到其他分支中即可。由於您似乎在爲每個代碼庫修改B(而不是擴展它),因此將B作爲子模塊不適用於此。

對於分支機構的單獨文件夾:不,不直接。當您查看一個分支時,其他代碼在您的工作目錄中不可用。您必須簽出另一個分支才能切換到另一個代碼庫,從而更改工作目錄的內容。但是,如果您發現自己切換很多,您可以設置multiple working trees。雖然這是一個實驗性功能,並且在使用子模塊時也有一些錯誤。您也可以考慮簡單地維護同一個存儲庫的多個實例,接受開銷。或者在需要時切換分支。

+0

A和B之間沒有乾淨的分界線。我可以在所有分支中使用不同內容的文件「foo.txt」。例如: 在** A ** foo.txt是''boo''; on ** B **''boo with B「'; on ** C ** - '「噓與B & C"'; 在** D ** - '」噓與B&D「' – Gintautas

+0

正確的,子模塊的想法不適用於此。這聽起來像6分支,併合並在一個方向上(即,當A更新時,將其合併到B中,然後將B合併到C/D/E/F中) – Joost