git submodule使用

在工程中加入依赖,有很多的依赖管理工具可用,比如前端工程的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这个目录下,执行命令

git add .
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
git rm 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

此时输出的信息为空。

你可能感兴趣的:(开发环境和工具,git,github,submodule)