Git -- 子模块

子模块

如果想直接上手操作,可以只看 “适用场景”、“定义”、“快速使用” 小节

否则看这篇文章或者 原文 都可以

适用场景

多个项目依赖一个库,每个项目可以修改库,并且保持库的同步。

定义

广泛的子模块:以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 #提交更新
        
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值