Git submodule子模块的使用

1. Git submodule

1.1. 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或修改.gitmodules文件之后
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.1. 删除和更新子模块

  • 删除一个submodule
    1.删除 .gitsubmodule中对应submodule的条目
    2.删除 .git/config 中对应submodule的条目
    3.执行 git rm --cached {submodule_path}。注意,路径不要加后面的“/”。例如:你的submodule保存在 supports/libs/websocket/ 目录。执行命令为:git rm --cached supports/libs/websocket

  • 更新submodule的URL
    1.更新 .gitsubmodule中对应submodule的条目URL
    2.更新 .git/config 中对应submodule的条目的URL
    3.执行 git submodule sync

2. 问题解决

2.1.引用不是一个树

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

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

2.2. Needed a single revision

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

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

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

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

Git submoduleGit 的一个功能,可以将一个 Git 仓库作为另一个 Git 仓库的目录进行管理。通过使用模块,我们可以在一个 Git 仓库中使用另一个 Git 仓库的组件。 使用 git submodule 的步骤如下: 1. 在父项目中添加模块使用命令 `git submodule add <模块仓库地址> <模块存放路径>` 将模块添加到父项目中。 2. 克隆模块使用命令 `git submodule init` 初始化模块,然后使用命令 `git submodule update` 克隆模块的内容。 3. 切换到模块分支:通过 `cd <模块路径>` 进入模块目录,然后使用 `git checkout <分支名>` 切换到模块所在的特定分支。 4. 更新模块:在父项目中使用命令 `git submodule update --remote` 可以更新模块为最新的提交。 5. 提交模块修改:在父项目中修改了模块后,需要切换到模块目录,进行提交和推送操作。 使用模块的好处是可以将项目作为独立的仓库进行开发和维护,同时在父项目中方便地使用和更新模块使用模块可以实现项目的模块化和复用,提高代码的可维护性和可重用性。 需要注意的是,使用模块时需要注意模块的分支和版本控制,因为模块可能会更新,需要及时更新父项目中的模块。同时,在多人协作开发中,也需要注意在提交父项目时确保模块的修改也已经提交。 总之,使用 Git submodule 可以方便地在父项目中使用模块的组件,提高代码管理的灵活性和可重用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值