添加公共的库到当前项目中
添加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
网友评论