Git submodule子模块的使用

  • Git, Others
  • 2,873 clicked

1. Git submodule

1.1. submodule常用命令

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

若希望每次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'

2.2. Needed a single revision

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

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

2.4. 在项目中子模块总是提示新提交

  • 报错如下

  • 解决方法

这个问题是因为子模块中引用的HASH节点与子模块中实际的子节点HASH不一致导致,需要更正实际目录中的子节点HASH;

2.5. 子模块改为无git管理的代码添加到项目中

因网络限制问题有些代码可能无法快速下载,需要将子模块改为已下载好的代码。首先clone好子模块代码;


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

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注