赞
踩
如果想直接上手操作,可以只看 “适用场景”、“定义”、“快速使用” 小节
否则看这篇文章或者 原文 都可以
多个项目依赖一个库,每个项目可以修改库,并且保持库的同步。
广泛的子模块:以A 为一个整体,B 为一个整体。将B 作为 A 中的一部分,即称B 为A 的子模块。
文件结构如下:
A
|-- README.md
|-- B
|-- README.md
父仓库:git 的整体即仓库,故而本文称A 为父仓库。
子模块:同理,B 为子仓库,因为概念为submodule,故而本文称B 为子模块
因为仓库本身是工具型。所以子模块的添加不应该增加或应该较少增加工具使用的负担。因此git 子模块有专门的命令将子模块和父仓库关联,以达到直接在父仓库执行命令操作子模块的便捷性。
但是由于一定的原因,在克隆、同步父仓库的时候,父仓库默认不会操作子模块,即需要使用者额外增加参数或者步骤
同步:因为子模块有个update
的操作,所以仓库的fetch
,pull
,push
操作在这里统一叫做同步
更新:专指 update
本文中【】括起来的文本表示命令,可以在“相关命令” 小节里查看对应的命令语法
如【添加子模块】,直接全文搜索 输入“添加子模块”, 就可以在 “相关命令” 小节看到,且会比使用的地方有更详细的说明
父仓库和子模块,各自单独进行自身维护的时候,和常规流程没什么区别。这里不多做说明
主要在于父仓库添加了直接操作子模块的步骤,使得使用更加复杂。
但是关于操作复杂化这一点,熟悉命令之后,可以参考【配置】和【常用别名】进行一波命令优化。
环境 git 2.20.1 (Apple Git-117)
假设当前有两个独立仓库baba,didi,didiUrl 表示didi 的远程地址
希望baba 作为父仓库,didi 作为baba 的子模块
(可能需要 “常见问题” – “忽略文件无效” 小节)
如果baba 仓库中没有didi 文件夹
git submodule add didiUrl #在父仓库【添加子模块】
git commit -sa #提交更新
如果baba 仓库中有同名didi 文件夹
就是想将didi 转化成子模块
#把文件拷贝,并更新到didi仓库
git rm -r subDirectory #在父仓库先删除原先的didi index
rm -r #然后常规删除didi 文件
git submodule add didi #在父仓库【添加子模块】
git commit -sa #提交更新
didi 只是冲突
修改父仓库didi 文件
mv ./didi ./didiInBaba #给父仓库的didi 换个文件名
git rm -r subDirectory #删除原先的didi在父仓库的记录
git submodule add didi #在父仓库【添加子模块】
git commit -sa #提交更新
修改didi 在父仓库的名字
git submodule add didi didiIn #在父仓库【添加子模块】
git commit -sa #提交更新
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。