Git submodule子模块的使用

常用命令

在项目中的.gitmodules文件中查看当前submodule设置

git clone <repository> --recursive #递归的方式克隆整个项目
git submodule add <repository> <path> #添加子模块
#示例:git submodule add git://xxxxx.git findername
git submodule init #初始化子模块
git submodule update --init --recursive	#初始化并更新子模块
git submodule foreach git pull		#拉取所有子模块
git pull --recurse-submodules  #拉取所有子模块中的依赖项
git submodule sync	#将新的URL更新到文件,该步骤适用于git submodule add之后,随后update
git submodule status third_party/ModuleA	#查看子模块状态,即该子模块切入的提交节点位置,即某HASH值

git rm --cached ModuleA		#删除子模块,然后删除对应文件
rm -rf moduleA

git submodule set-url third_party/ModuleA https://XXX.git #,更新子模块URL,该功能在1.8.3.1以上版本
git submodule set-branch --branch dev third_party/ModuleA	#设置子模块项目采用的分支,该功能在1.8.3.1以上版本

若希望每次clone拉取新的submodule到指定分支指定节点,需要在提交时将子模块checkout到指定指针位置,然后提交该子模块所在目录git add third_party/ModuleA;git commit xxx;(其实是提交子模块中的.git所在commit指针中位置HASH值e6fd72ad).

问题解决

1.引用不是一个树

fatal: 引用不是一个树:a27a43eafa8f4dd514e89984f5394260a36ea4f6
无法在子模组路径 ‘src/lib/ecl’ 中检出 ‘a27a43eafa8f4dd514e89984f5394260a36ea4f6’

#解决方法为git添加子模块的位置:
git add src/lib/ecl
#下载子模块命令为:
git submodule update --init --recursive

2.Needed a single revision

fatal: Needed a single revision
将出错的文件夹删除后,重新执行git submodule update命令

3.未在.gitmodules中发现路径’boringssl’的子模组映射

#虽然优化,但是没有优化删除缓存中库
git rm --cached boringssl

参考文章 GIT Submodule的使用
参考文章 Git Submodule管理项目子模块

你可能感兴趣的:(GIT)