添加公共的庫到當前項目中
添加submodule
git submodule add 子模塊項目地址
子模塊添加成功后當前項目會多一個.gitmodules隱藏文件,文件內容保存submodule的引用信息,包括路徑和repo地址
[submodule "VTAlertView"]
path = VTAlertView
url = https://github.com/xiaolidaodao/VTAlertView.git
子模塊添加完成在主項目提交所添加內容
在子項目加入到項目的時候,其實做了這樣三件事:
記錄引用的子項目倉庫,在.git/config中
記錄當前項目中子項目的目錄位置,在生成的.gitmodules中
記錄子項目的commit id
所以在當前項目push到remote repository的時候,只是更新了引用的commit id,那么在其他人clone項目的時候,就可以獲取子項目的commit id,然后在git submodule update的時候獲取子項目commit id所表示的commit
clone帶有submodule的項目
- 下載主項目
git clone 主項目地址
- 下載子模塊
git clone --recursive 或 git submodule update --init --recursive
當前子模塊為HEAD分支,切換至master分支
因為父項目不記錄子模塊的修改,只記錄commit id,所以clone的時候只獲取到對應的commit,而不在任何分支上,但是master分支的commit id和HEAD保持一致,所以只要git checkout master,而不需要新建分支
修改submodule
兩種方式修改子模塊
直接在主項目中打開子模塊修改
單獨下載子模塊項目修改
注:子項目只要更新,父項目必須更新引用子項目的commit id
更新submodule
git submodule foreach git pull 或
cd submodule
git pull