2012-11-27 109 views
1

我正在研究一個有大量回購的大項目,這些回收項目位於不同的文件夾中。Git分支依賴關係

1 - 共享庫
2 - 的API(使用該庫)
3 - 移動應用(使用該API)
4 - 與CMS一個網站(使用該API和庫)
5 - 客戶信息系統(使用該API和庫)

該庫符號鏈接,以防止重複和API是基於REST的,可從外部被稱作......

我一直在與其他開發人員通過我們工作o的幾個問題在回購中需要一個新的功能,需要在庫中有一個新的分支,然後說網站。當另一個開發人員開始使用此功能時,分支對另一個分支有依賴關係並不明顯。有沒有辦法讓分支機構依賴關係鏈接到回購協議?因此,如果我在網站上籤出feature-1分支,git還會檢查相關庫和api庫上相應的功能分支?

+1

我將設置回購結構的方式是將1個回購項目作爲您的回購庫中的文件夾,這樣當您需要切換分支時爲你所有的項目做... – zbrunson

+0

乾杯zshooter,我認爲,但我會遇到另一種選擇; git子模塊,它允許我保持當前的結構 – Opentuned

回答

1

編輯從http://git-scm.com/book/en/Git-Tools-Submodules

一個常見的問題產生了這種情況:你希望能夠將每個項目作爲單獨的項目仍然能夠使用從另一個內。包括圖書館的問題是,以任何方式定製圖書館都很困難,而且通常難以部署圖書館,因爲您需要確保每個客戶都有該圖書館。將代碼出售到您自己的項目中的問題是,當上遊更改可用時,您所做的任何自定義更改都很難合併。 Git使用子模塊解決了這個問題。子模塊允許您將Git存儲庫作爲另一個Git存儲庫的子目錄。這可以讓您將另一個存儲庫克隆到您的項目中,並保持您的提交單獨。

您應該做的第一件事是將外部存儲庫克隆到您的子目錄中。您添加外部項目作爲子模塊使用以下命令:

git submodule add 

你可以進入該子目錄,修改,添加自己的遠程可寫倉庫來推送你的變更,提取和合並從原來的倉庫,等等。如果你運行git狀態添加子模塊之後,你看到的兩件事情:

$ git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  new file: .gitmodules 
#  new file: <name_of_cloned_repo> 
# 

首先你注意到.gitmodules文件。這是存儲項目的URL,你已經把它納入當地子目錄之間的映射配置文件:

$ cat .gitmodules 
[submodule "rack"] 
     path = rack 
     url = git://github.com/chneukirchen/rack.git 

雖然是在你的工作目錄的子目錄,Git把它視作一個子模塊,並且不跟蹤其不在該目錄中的內容。相反,Git將它記錄爲來自該存儲庫的特定提交。當您在該子目錄中進行更改並提交時,超級項目會注意到HEAD已更改並記錄您當前正在執行的確切提交;這樣,當其他人克隆這個項目時,他們可以精確地重新創建環境。

這是子模塊的一個重點:您將它們記錄爲它們的確切提交。您無法在主設備上記錄子模塊或其他符號參考。

您可以將目錄視爲單獨的項目,然後不時更新您的超級項目,並指向該子項目中的最新提交。所有Git命令在兩個目錄中獨立工作...