什么是Git 子模塊
開(kāi)發(fā)中我們可能會(huì)遇到:某個(gè)工作中的項(xiàng)目需要包含并使用另一個(gè)項(xiàng)目。 可能是第三方庫(kù),也可能是獨(dú)立的,復(fù)用于多個(gè)父項(xiàng)目的庫(kù)。 那么問(wèn)題來(lái)了:你想在一個(gè)項(xiàng)目中使用另一個(gè),同時(shí)又想保持兩個(gè)項(xiàng)目的相互獨(dú)立。使用Git 自帶的子模塊功能就可以解決這個(gè)問(wèn)題。
子模塊的使用命令
創(chuàng)建子倉(cāng)庫(kù)
先進(jìn)入父?jìng)}庫(kù)目錄下,然后執(zhí)行命令:
git submodule add <倉(cāng)庫(kù)地址> <本地路徑>
<本地路徑>是可選項(xiàng),默認(rèn)情況下,子模塊會(huì)在當(dāng)前目錄下面,將子項(xiàng)目放到一個(gè)與倉(cāng)庫(kù)同名的目錄中。如果指定了本地路徑,則會(huì)把子項(xiàng)目放在指定的本地路徑下。
執(zhí)行上面命令后,在父?jìng)}庫(kù)根目錄增加了.gitmodule文件。
[submodule 倉(cāng)庫(kù)名稱(chēng)]
path = 倉(cāng)庫(kù)名稱(chēng)(或指定的本地路徑)
url = 倉(cāng)庫(kù)地址
clone 帶有子倉(cāng)庫(kù)的git項(xiàng)目
git clone 帶有子倉(cāng)庫(kù)的git倉(cāng)庫(kù)地址
這個(gè)命令并不會(huì)clone下子倉(cāng)庫(kù)的文件,只是會(huì)克隆下.gitmodule描述文件,需要執(zhí)行下面的命令拉取子倉(cāng)庫(kù)文件。
// 初始化本地子項(xiàng)目配置
$ git submodule init
// 拉取子倉(cāng)庫(kù)文件
$ git submodule update
或者使用組合指令:
git submodule update --init --recursive
子倉(cāng)庫(kù)代碼的修改和更新
如果在本地修改子倉(cāng)庫(kù),在主倉(cāng)庫(kù)執(zhí)行g(shù)it status,會(huì)顯示子倉(cāng)庫(kù)有修改。需要先在子倉(cāng)庫(kù)提交,然后再到主倉(cāng)庫(kù)提交代碼。
由于父?jìng)}庫(kù)和子倉(cāng)庫(kù)是兩個(gè)獨(dú)立的git倉(cāng)庫(kù),所以最好在子倉(cāng)庫(kù)的開(kāi)發(fā)中單獨(dú)進(jìn)行g(shù)it相關(guān)操作,在父?jìng)}庫(kù)不對(duì)子倉(cāng)庫(kù)文件做修改,只進(jìn)行子倉(cāng)庫(kù)代碼的拉取,并把修改提交上去。