在工程中加入依赖,有很多的依赖管理工具可用,比如前端工程的npm,安卓的gradle,iOS的cocoaPods等,有时我们不方便使用以上工具的时候,还可以使用git的submodule依赖三方库或者自己写的库。本文介绍git submodule的基本使用方法。
添加submodule依赖
假设我们有两个仓库名称为cpp-test和submodule-test,现在在cpp-test中依赖submodule-test,submodule-test作为子仓库使用。
添加submodule依赖可以使用命令
git submodule add<submodule-test的仓库地址>
这里submodule-test的仓库地址替换为远端的仓库地址,替换完成后,cpp-test仓库里面会新增文件.gitmodules和文件夹submodule-test。.gitmodules文件记录了依赖的仓库地址,submodule-test文件夹保存依赖的仓库代码,此时submodule-test目录还是空的。
.gitmodules文件内容
[submodule "submodule-test"]
path = submodule-test
url = xxx.git
为了使代码真正依赖进来,需要初始化submodule,使用命令
git submodule update --init --recursive
这样操作会拉取submodule-test仓库相应的代码,依赖submodule至此已经完成。
查看submodule依赖
当前的仓库有哪些submodule依赖,可以使用命令查看
git submodule status --recursive
–recursive表示递归,如果有submodule嵌套的情况,这里也会打印出来,打印的结果展示当前依赖的commit,仓库名和分支信息。
修改submodule代码
修改submodule代码稍微麻烦些,submodule-test是以子仓库的形式依赖进来的。需要切换到submodule-test这个目录下,执行命令
gitadd.git commit -m "commit message"git push origin xxx
这一步代表submodule的修改已经推动到子模块的远端仓库,这时git status查看主仓库cpp-test的工作区,多了modified: submodule-test (untracked content) 这条信息,代表子模块已经被修改了。需要在主仓库中执行git add . 和git commit -m "commit message"以及git push操作,把当前的改动推到主仓库中。此时修改submodule的操作已经完成。
在多人合作的项目中,有可能是其他人修改了子模块并且推送到远端。这个时候自己的本地项目代码不是最新的,需要使用update 命令更新主仓库和子仓库的代码。
git submodule update --remote
删除submodule
删除submodule可以执行deinit命令
git submodule deinit submodule-test
gitrm submodule-test
rm -rf .git/modules/submodule-test
git submodule deinit submodule-test这行命令修改了主仓库中.gitmodules文件,去掉了对submodule-test的依赖。git rm submodule-test这样命令删除了submodule-test目录。
需要注意的是.git目录还有个modules目录,它也保存了依赖信息,需要使用rm -rf .git/modules/submodule-test将其删除。
上述命令执行完成以后,可以使用查看submodule的命令检查下是否已经删除。
git submodule status
此时输出的信息为空。
版权归原作者 零丁若叹 所有, 如有侵权,请联系我们删除。