当前位置:   article > 正文

Git -- 子模块_git 的子模块

git 的子模块

子模块

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

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

适用场景

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

定义

广泛的子模块:以A 为一个整体,B 为一个整体。将B 作为 A 中的一部分,即称B 为A 的子模块。

文件结构如下:

A
|-- README.md
|-- B
    |-- README.md
  • 1
  • 2
  • 3
  • 4

父仓库: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 #提交更新
    
    • 1
    • 2
  • 如果baba 仓库中有同名didi 文件夹

    • 就是想将didi 转化成子模块

      #把文件拷贝,并更新到didi仓库
      
      • 1
    •   git rm -r subDirectory #在父仓库先删除原先的didi index
        rm -r #然后常规删除didi 文件
        
        git submodule add didi #在父仓库【添加子模块】
        git commit -sa #提交更新
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • didi 只是冲突

      • 修改父仓库didi 文件

        mv ./didi ./didiInBaba #给父仓库的didi 换个文件名
        git rm -r subDirectory #删除原先的didi在父仓库的记录
        
        git submodule add didi #在父仓库【添加子模块】
        git commit -sa #提交更新
        
        • 1
        • 2
        • 3
        • 4
        • 5
      • 修改didi 在父仓库的名字

        git submodule add didi didiIn #在父仓库【添加子模块】
        git commit -sa #提交更新
        
        • 1
        • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/705057
推荐阅读
相关标签
  

闽ICP备14008679号