Git Submodule 子模块

Git submodule 子模块 是将 别人的仓库 放到 自己的主仓库 中,

相当于 借用 别人的仓库(一般是依赖仓库), 而且任何人 clone 你的仓库, 可以一起 clone 子仓库, 这样就不会导致依赖减少,

Git submodule 就是如何操作并管理这些 子仓库(依赖仓库)

添加

在你的 主仓库 目录下:

  1. 添加子模块进来到你的仓库
git submodule add https://Username/repo path/repo
# 子模块添加进来就已经固定了 commit, 你推送的时候就是这个 commit
  1. 之后你添加相关信息推送即可

删除

  1. 删除 子仓库 所有文件及文件夹, 例如上面的 path/repo
  2. 编辑 主仓库 的 .gitmodules 文件, 将相关信息去除
  3. 主仓库 的 .git/modules 下相关的 子仓库 的删除
  4. 编辑 主仓库 的 .git/config 文件, 删除相关信息
  5. git add . 如果此时不添加进去, 等下再使用 gitmodule 功能会有错误, 个人建议先 git add 保存下你删除了 某个 submodule

恢复

  1. clone 你的主仓库
  2. 进入你仓库
git submodule init
git submodule update
# update 只是将子模块仓库拉取下来, 拉取下来的子模块仓库 commit 是你之前添加进来的 commit, 不会是远程最新的 commit

更新

  1. 全部更新

    git submodule update --remote
    # 这将会拉取所有子模块远程最新的 commit
    
  2. 单独更新某个

    git submodule update --remote path/repo
    # path/repo 为你想拉取更新的子仓库路径
    

撤销

如果某个子模块仓库的 commit (版本)不好, 你可以更改

  1. 查看所有 log(commit) 去到 子仓库 目录下:

    git log
    # git 会列出所有 commit, 查看你想要 commit 哈希值(一大串数字)
    
  2. 恢复

    git checkout 哈希值
    
  3. 之后像往常一样推送你的 主仓库 即可, 子仓库模块信息自然更新, 最好是使用

    git add .
    # 将 主仓库(包含 子仓库) 更改的信息全部添加