編輯從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命令在兩個目錄中獨立工作...
我將設置回購結構的方式是將1個回購項目作爲您的回購庫中的文件夾,這樣當您需要切換分支時爲你所有的項目做... – zbrunson
乾杯zshooter,我認爲,但我會遇到另一種選擇; git子模塊,它允許我保持當前的結構 – Opentuned