综述
git submodule是一个代码库管理工具,使用场景为一个代码库需要去引用另外一个模块的代码,而这个模块的代码恰好位于另外一个代码库之中。
目录
- 怎么添加一个子项目
- 子项目代码怎么下载
- 子项目代码如何切换分支
怎么添加一个子项目
使用git submodule add path
命令添加, 添加完成后目标分支的代码会下载到当前目录,同时会在主项目的git根目录下生成一个.gitmodules的配置文件,和config文件,记录的是子模块的下载url。
子项目代码怎么下载
子模块的代码下载使用git submodule init
, git submodule update
,init用于初始化配置文件,update则是真正的下载代码。
子项目代码如何切换分支
闲置
项目实战
项目描述,我有一个Daily_Record的一个代码仓, 还有一个shell_tools代码仓。我的想法是把shell_tools代码仓放在Daily_Record代码仓里面,我会创建一个tools目录存放。
环境搭建
主仓库下载
创建目录D:\Normal\project\git\gitmodules用来存放代码仓文件
下下载主仓代码:git clone https://github.com/SlowClimb/Daily_Record
在主仓中创建tools目录,用来存放子模块代码
mkdir tools
添加子模块代码
git submodule add https://github.com/SlowClimb/ShellTools.git
添加完成后,会查看主仓库下.gitmodules文件,里面有submodule的path跟url
path:相对于主仓库路径, url:下载的代码仓地址
这时候本地已经有一个submodule的配置文件信息,现在可以将其推送到主仓库上,主要推送2个文件:1. .gitmodules 2. submodule path 缺一不可。
git status可以查看到变更的文件只有这2份
子模块推送到主仓
git add * 添加到本地缓存
git commit -m 'submodule'提交到推送缓存, 这里create mode 160000 的意思是将tools/ShellTools作为一个目录记录提交上去,也就是一个空文件夹, clone本地仓库的后这个文件夹也是为空的,需要使用 submodule命令拉去代码。
git push
重新下载主仓,验证submodule可行性
新增一个目录 gitmodules_new, 新文件夹下载主仓代码
下载主仓
查看tools/ShellTools文件夹,为空文件
使用子模块下载命令下载代码
初始化配置文件信息
下载子模块代码
查看子模块文件,文件已经下载到了本地
小结
submodule这个功能第一次使用,不会对子模块代码进行的场景,但是还是使用中还是遇到了一些问题,当我新增多个子模块时, 然后手动删除了.gitmodules中一部分子模块配置信息,然后再次使用git submodule update的时候,提示删除的子模块没有url, 可以我已经吧submodule, path都已经删除了(未解决)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言