git 子模块 submodule
导读 |
git 子模块操作是 git 工具提供的关联和管理其它项目作为子模块的方式。在没有诸如 Visual Studio 提供的 Nuget 包管理工具时,可以方便不同项目代码分离和同步。 本文梳理记录了个人使用 git 子模块 submodule 的常用指令,方便参考使用 |
假设现在需要 把项目 B 作为子模块,添加到项目 A 中的子目录 folder 中,使用如下指令
git submodule add
项目 B 的 git 项目地址为 b, 则添加子模块如下
添加一个子模块
首先你要把外部的仓库克隆到你的子目录中。
假设你想把 pacman项目加入到你的blog项目中,你通过git submodule add
将外部项目加为子模块:
cd blog git submodule add https://gitcafe.com/aceking/pacman.git themes/pacman
.gitmodules文件: 这是一个配置文件,保存了项目 URL 和你拉取到的本地子目录。现在你就在项目里的themes/pacman子目录下有了一个 pacan项目。你可以进入那个子目录,进行变更,加入你自己的远程可写仓库来推送你的变更,从原始仓库拉取和归并等等。
参考:http://www.linuxidc.com/Linux/2014-12/110771.htm
克隆你刚才创建子模块的项目。你将得到了包含子项目的目录,但里面没有文件:pacman目录存在了,但是是空的。
你必须运行两个命令:git submodule init
来初始化你的本地配置文件,git submodule update
来从那个项目拉取所有数据并检出你上层项目里所列的合适的提交。
cd blog
git submodule init themes/pacaman
git submodule update
现在你的pacman子目录就处于你先前提交的确切状态了。
1、修改'.gitmodules'文件中对应模块的”url“属性;
2、使用git submodule sync命令,将新的URL更新到文件.git/config;
# 运行后可观察到'.git/config'中对应模块的url属性被更新
git submodule sync Synchronizing submodule url for 'gitmods/thinker_g/Helpers'
# 提交变更
git commit -am "Update submodule url."
运行后可观察到'.git/config'中对应模块的url属性被更新 thinker-g@localhost: ~/app$ git commit -am "Update submodule url." # 提交变更
PS: 本实验使用git 2.7.4 完成,较低版本git可能不能自动更新.git/config文件,需要修修改完".gitmodule"文件后手动修改.git/config.
参考:https://www.jianshu.com/p/ed0cb6c75e25
# 逆初始化模块,其中{MOD_NAME}为模块目录,执行后可发现模块目录被清空
git submodule deinit {MOD_NAME}
# 删除.gitmodules中记录的模块信息(--cached选项清除.git/modules中的缓存)
git rm --cached {MOD_NAME}
# 在 .gitmodules 中删除 {MOD_NAME} 对应的项
# 提交更改到代码库
git commit -am "Remove a submodule."
版权声明 本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者 BensonLaur 和本文原始地址: https://www.cnblogs.com/BensonLaur/p/13933175.html |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端