| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> Git中submodule的使用 -> 正文阅读 |
|
[开发工具]Git中submodule的使用 |
背景面对比较复杂的项目,我们有可能会将代码根据功能拆解成不同的子模块。主项目对子模块有依赖关系,却又并不关心子模块的内部开发流程细节。 这种情况下,通常不会把所有源码都放在同一个 Git 仓库中。 有一种比较简单的方式,是在当前工作目录下,将子模块文件夹加入到? 还有另外一种方式可供借鉴,可以使用 Git 的? 实际上 Git 工具的? 使用流程假定我们有两个项目: 其中? 接下来,我们希望在? 1.创建 submodule 使用? 进入项目? ? project-main git:(master) git submodule add? https://github.com/username/project-sub-1.git 此时项目仓库中会多出两个文件: 前者的内容是这样的,事实上就是子模块的相关信息;而后者那个文件,实际上保存的是子模块当前版本的版本号信息。 [submodule "project-sub-1"] 如果此前项目中已经存在? 事实上,此时在? 通常此时可以使用? 2.获取 submodule 上述步骤在创建子模块的过程中,会自动将相关代码克隆到对应路径,但对于后续使用者而言,对于主项目使用普通的? 使用以下命令进行克隆,完成后? cd /path/to/temp 如果希望子模块代码也获取到,一种方式是在克隆主项目的时候带上参数? cd /path/to/temp2 此时? 另外一种可行的方式是,在当前主项目中执行: git submodule init 则会根据主项目的配置信息,拉取更新子模块中的代码。 3.子模块内容的更新 对于子模块而言,并不需要知道引用自己的主项目的存在。对于自身来讲,子模块就是一个完整的 Git 仓库,按照正常的 Git 代码管理规范操作即可。 对于主项目而言,子模块的内容发生变动时,通常有三种情况: 1)当前项目下子模块文件夹内的内容发生了未跟踪的内容变动; 2)当前项目下子模块文件夹内的内容发生了版本变化; 3)当前项目下子模块文件夹内的内容没变,远程有更新; > 情况1:子模块有未跟踪的内容变动 对于第1种情况,通常是在开发环境中,直接修改子模块文件夹中的代码导致的。 此时在主项目中使用? ? project-main git:(master) git status 在此情景下,通常需要进入子模块文件夹,按照子模块内部的版本控制体系提交代码。 当提交完成后,主项目的状态则进入了情况2,即当前项目下子模块文件夹内的内容发生了版本变化。 > 情况2:子模块有版本变化 当子模块版本变化时,在主项目中使用? ? project-main git:(master) ? git status 在这种情况下,可以使用? git diff HEAD HEAD^ 通常当子项目更新后,主项目修改其所依赖的版本时,会产生类似这种情景的 commit 提交信息。 > 情况3:子模块远程有更新 通常来讲,主项目与子模块的开发不会恰好是同时进行的。通常是子模块负责维护自己的版本升级后,推送到远程仓库,并告知主项目可以更新对子模块的版本依赖。 在这种情况下,主项目是比较茫然的。 之前曾经提到,主项目可以使用? 但如今这种情况下,后者? 此时,需要让主项目主动进入子模块拉取新版代码,进行升级操作。 通常流程是: cd project-sub-1 子模块目录下的代码版本会发生变化,转到情况2的流程进行主项目的提交。 当主项目的子项目特别多时,可能会不太方便,此时可以使用? git submodule foreach 'git pull origin master' > 情况汇总 终上所述,可知在不同场景下子模块的更新方式如下:
4.删除子模块 网上流传了一些偏法,主要步骤是直接移除模块,并手动修改? 实际上这是一种比较野的做法,不建议使用。 根据官方文档的说明,应该使用? git submodule deinit project-sub-1 执行? [submodule "project-sub-1"] 执行? [submodule "project-sub-1"] 此时,主项目中关于子模块的信息基本已经删除(虽然貌似? ? project-main git:(master) ? gs 可以提交代码: git commit -m "delete submodule project-sub-1" 至此完成对子模块的删除。 总结当项目比较复杂,部分代码希望独立为子模块进行版本控制时,可以使用? 使用? 本篇文章简单介绍了? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:33:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |