Git子模塊(submodule)簡(jiǎn)介
經(jīng)常有這樣的事情,當(dāng)你在一個(gè)項(xiàng)目上工作時(shí),你需要在其中使用另外一個(gè)項(xiàng)目。也許它是一個(gè)第三方開(kāi)發(fā)的庫(kù)或者是你獨(dú)立開(kāi)發(fā)和并在多個(gè)父項(xiàng)目中使用的。這個(gè)場(chǎng)景下一個(gè)常見(jiàn)的問(wèn)題產(chǎn)生了:你想將兩個(gè)項(xiàng)目單獨(dú)處理但是又需要在其中一個(gè)中使用另外一個(gè)。
子模塊允許你將一個(gè) Git 倉(cāng)庫(kù)當(dāng)作另外一個(gè)Git倉(cāng)庫(kù)的子目錄。這允許你克隆另外一個(gè)倉(cāng)庫(kù)到你的項(xiàng)目中并且保持你的提交相對(duì)獨(dú)立。
Git子模塊用法
添加一個(gè)子模塊
首先你要把外部的倉(cāng)庫(kù)克隆到你的子目錄中。
假設(shè)你想把 pacman項(xiàng)目加入到你的blog項(xiàng)目中,你通過(guò)git submodule add
將外部項(xiàng)目加為子模塊:
cd blog
git submodule add https://gitcafe.com/aceking/pacman.git themes/pacman
現(xiàn)在你就在項(xiàng)目里的themes/pacman子目錄下有了一個(gè) pacan項(xiàng)目。你可以進(jìn)入那個(gè)子目錄,進(jìn)行變更,加入你自己的遠(yuǎn)程可寫(xiě)倉(cāng)庫(kù)來(lái)推送你的變更,從原始倉(cāng)庫(kù)拉取和歸并等等。
.gitmodules文件: 這是一個(gè)配置文件,保存了項(xiàng)目 URL 和你拉取到的本地子目錄。

克隆一個(gè)帶子模塊的項(xiàng)目
克隆你剛才創(chuàng)建子模塊的項(xiàng)目。你將得到了包含子項(xiàng)目的目錄,但里面沒(méi)有文件:pacman目錄存在了,但是是空的。
你必須運(yùn)行兩個(gè)命令:git submodule init
來(lái)初始化你的本地配置文件,git submodule update
來(lái)從那個(gè)項(xiàng)目拉取所有數(shù)據(jù)并檢出你上層項(xiàng)目里所列的合適的提交。
cd blog
git submodule init themes/pacaman
git submodule update
現(xiàn)在你的pacman子目錄就處于你先前提交的確切狀態(tài)了。
參考:
Git-子模塊