Git 子模块

Git 高级

Amanda Crawford-Adamo

Software and Data Engineer

什么是 Git 子模块?

Git 子模块

git submodule
  • 嵌套在另一个仓库中的仓库
  • 独立的版本控制与历史
  • 子模块的变更不影响主仓库
  • 主仓库可引用子模块的特定版本

一个仓库中包含多个内部仓库的示意图。

Git 高级

添加子模块

通过链接或路径下的目录添加子模块。

git submodule add <repository link|dir> <path>

$$

示例

将数据校验库添加到 ETL 项目中,路径为 ETL 仓库的 libs/validator

git submodule add https://github.com/example/data-validator.git libs/validator
Git 高级

列出子模块

列出项目中的所有子模块

git submodule status

示例

$ git submodule status
e1f2...7w8x9 data_cleaning_lib
a1b2...q7r8 api_connector
d9e8...t3u2 visualization_toolkit
Git 高级

更新子模块

用最新变更更新子模块

有以下选项:

  1. 更新源码在本地的所有子模块。
    git submodule update --init 
    
  2. 更新源码在远程仓库的所有子模块。
    git submodule update --init --remote 
    
  3. 更新指定子模块。
    git submodule update --init <path_to_submodule>
    
Git 高级

移除子模块

移除子模块流程

  1. 反初始化子模块。
    git submodule deinit <submodule_name>
    
  2. 从 Git 仓库索引中移除子模块。
    git rm <path>
    
Git 高级

从大型仓库中提取子模块

  1. 将需要放入新子模块仓库的文件复制到仓库外的另一个文件夹。

  2. 在新文件夹内为子模块创建新仓库:

    git init <new-submodule>
    
  3. 使用 git filter-repo 从主项目中提取相关文件和历史:

    git filter-repo --path <extract_path> --invert-paths
    
  4. 将提取出的仓库作为子模块添加到主项目:

    git submodule add <new-submodule_path> <path_to_store_submodule>
    
Git 高级

何时使用子模块与最佳实践

适用场景:

  1. 管理外部库
  2. 在项目间共享代码
  3. 维护依赖的特定版本

最佳实践:

  1. 保持子模块更新
  2. 使用相对路径
  3. 与团队沟通变更
Git 高级

Passons à la pratique !

Git 高级

Preparing Video For Download...