在開發大型專案的過程中,一定會套用一些第三方的子專案,但又希望子專案更新時,主要專案又同時更新
當然這種狀況用git可以解決,但是主要專案及子專案都有.git,會有大大的問題
好險git有提供Git Submodule來解決這樣的問題
簡單說就是將某個有做git的專案放進另一個有做git的專案裡
引入Submodule
比如說,我有個專案
project .git index.php
而我需要引用到一個jQuery plugin,就可以利用git submodule來引入
#使用方法:git submodule add origin dir_name #注意:原本的專案中不可以先建立dir_name(資料夾名稱),不然會無法add git submodule add git@github.com:johnson4932/jQuery-plugin.git jQuery_plugin
這時候就可以發現project目錄下多出一個.gitmodules檔案,parent git與submodule git的關連性記錄在.gitmodules中,而版本控制則是靠parent git記住submodule git的commit id
所以這時候做git status會看到
#parent git只認submodule git的commit id new file: .gitmodules new file: jQuery_plugin
接著要讓parent git知道你有掛入modules(讓.git/config有submodule的資訊,其實跟git add file的意思相同)
git submodule init
接下來只要像一般專案一樣,先add完後commit再push上去即可
git add .gitmodules jQuery_plugin git commit -m "add submodule" git push git@github.com:johnson4932/project.git master
更新Submodule
如果Submodule有更新,只要移動到Submodule目錄,做pull就可以了
cd jQuery-plugin git pull git@github.com:johnson4932/jQuery-plugin.git #回到parent git commit git add jQuery-plugin git commit -m "submodule update"
clone parent git
當我們clone有submodule主專案下來時,會發現只有parent git的程式,而submodule竟然是空的,只剩.gitmodules還在。
這時要先更新.git/config後再去拉submodule(簡單說單純clone下來的話,parent git是不認submodule的)
#在.git/config 中加入 submodule 設定 git submodule init #把整個submodule clone 下來 git submodule update