在使用git管理项目的时候,有时候可能依赖别的项目,通常情况下并不是将其项目文件直接拷贝过来,而是以子模块的形式引入,以实现同步的更新与更改。
常用命令以及解释
添加子模块
添加带branch的子模块到具体文件夹路径,git需要2.13以上
git submodule add -b <branch_name> <repo_url> <path>
修改子模块分支:
git config -f .gitmodules submodule.<path>.branch <new_branch>git submodule update --remote <path>
删除子模块
git删除子模块首先需要取消关联,然后再删除本地仓库引用,最后提交
git submodule deinit -f <path>git rm -f <path>rm -rf .git/modules/<path>git commit -m 'Remove submodule'
子模块clone
首次克隆带有子模块的github项目时候,应该添加参数进行clone,否则只有父目录,没有子模块项目
git clone --recurse-submodules <repo_url>
对于已经克隆了主仓库,但是子模块没有拉取,可以使用命令
git submodule update --init --rescursive--init: 初始化子模块(首次拉取)--recursive: 递归拉取子模块内的子模块(如果有嵌套子模块)
子模块更新
拉取最新子模块更新(如果主仓库已更新子模块)
git submodule update --remote --merge--remote: 拉取子模块远程仓库最新内容--merge: 合并到当前子模块HEAD--recursive: 对多层子模块生效
子模块本质是指向特定commit的独立git仓库,所以默认不会跟随主仓库更新
如果想每次git pull主仓库的时候也自动更新子模块,可以使用:
git config --global submodule.recurse true
查看子模块状态
使用
git submodule status查看当前子模块的commit和路径,如果拉取的不完整,会显示-或者+符号