
git 之 submodule
发布日期:2021-05-10 05:24:34
浏览次数:29
分类:精选文章
本文共 1684 字,大约阅读时间需要 5 分钟。
Git 子模块使用说明
作为一个开发人员,你可能需要处理项目中的多个子模块。以下是一些实用的技巧,帮助你更好地管理Git子模块。
1. 创建子模块
前提条件
你已经有一个主项目,但还没有子模块。
添加子模块
推荐使用以下命令添加子模块:
git submodule add https://github.com/xxx/project-sub.git project-sub
请确保使用HTTPS链接,而不是git://开头的链接。
验证添加结果
在执行上述命令后,运行git status可以看到新增的文件:
.gitmodules
:存储子模块信息。project-sub
:子模块目录。
提交代码
在添加子模块后,建议先提交代码:
git commit -m "添加了子模块project-sub"
2. 查看子模块
查看子模块的信息:
git submodule e33f854d3f51f5ebd771a68da05ad0371a3c0570 project-sub
3. 克隆带有子模块的项目
如果主项目需要从仓库中克隆,运行以下命令:
git clone https://github.com/xxx/project-main.git
克隆完成后,进入项目目录,执行以下命令初始化和更新子模块:
git submodule initgit submodule update --init
或者,推荐使用:
git clone --recurse-submodules https://github.com/xxx/project-main.git
4. 更新子模块
子模块有改动但未提交
在开发环境中修改代码后,进入子模块目录,运行:
git add .git commit -m "提交子模块更新"git push origin master
如果忘记推送子模块,可以校验:
git push --recurse-submodules=check
子模块远程有更新
方式一:进入子模块目录,同步远程仓库:
cd project-subgit fetch origin mastergit merge origin/master
或者使用:
git pull --rebase
方式二:在主项目中更新,默认使用master
分支:
git submodule update --remotegit config -f .gitmodules submodule.project-sub.branch master
子模块 URL 变更
如果子模块托管平台发生了变化:
git submodule sync --recursivegit submodule update --init --recursive
同时更新多个子模块
如果需要对多个子模块执行相同操作,可以使用:
git submodule foreach 'git pull origin master'
5. 删除子模块
方式一:自动删除
git submodule deinit project-subgit submodule deinit project-sub --force
方式二:手动删除
删除子模块文件夹:
git rm --cached project-subrm -rf project-sub
删除.gitmodules
文件中的子模块信息:
[submodule "project-sub"] path = assets url = https://github.com/xxx/project-sub.git
删除.git/config
中的子模块信息:
[submodule "project-sub"] url = https://github.com/xxx/project-sub.git
删除Git模块文件:
rm -rf .git/modules/project-sub
6. 参考资料
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月07日 11时11分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[Linux] 进程间通信
2019-03-15
[PHP] error_reporting(0)可以屏蔽Fatal error错误
2019-03-15
[PHP] 解决php中上传大文件的错误
2019-03-15
[Linux] 使用awk比较两个文件的内容
2019-03-15
[Git] 彻底删除github上的某个文件以及他的提交历史
2019-03-15
[Go] gin框架渲染html字符串
2019-03-15
[js] js中的闭包以及特点
2019-03-15
[操作系统]内存连续分配管理方式
2019-03-15
[Go] json.Unmarshal()解析后存储的结构体定义
2019-03-15
[PHP]PHP不支持方法重载和只支持方法覆盖
2019-03-15
[Go] 获取Go二进制文件的真正执行路径os.Args
2019-03-15
java Map
2019-03-15
scala Tuple入门到熟悉
2019-03-15
RDD partitioner入门详解
2019-03-15
presto查询报错
2019-03-15
superset报错
2019-03-15
Hive 分组取Top N
2019-03-15
yarn开启Label Scheduler
2019-03-15
Spark sample入门到精通
2019-03-15
C++ Primer Plus【复习笔记】-【复合类型】
2019-03-15