Git Submodule 子模块
Git submodule 子模块 是将 别人的仓库 放到 自己的主仓库 中,
相当于 借用 别人的仓库(一般是依赖仓库), 而且任何人 clone 你的仓库, 可以一起 clone 子仓库, 这样就不会导致依赖减少,
Git submodule 就是如何操作并管理这些 子仓库(依赖仓库)
添加
在你的 主仓库 目录下:
- 添加子模块进来到你的仓库
git submodule add https://Username/repo path/repo
# 子模块添加进来就已经固定了 commit, 你推送的时候就是这个 commit
- 之后你添加相关信息推送即可
删除
- 删除 子仓库 所有文件及文件夹, 例如上面的 path/repo
- 编辑 主仓库 的 .gitmodules 文件, 将相关信息去除
- 将 主仓库 的 .git/modules 下相关的 子仓库 的删除
- 编辑 主仓库 的 .git/config 文件, 删除相关信息
- git add . 如果此时不添加进去, 等下再使用 gitmodule 功能会有错误, 个人建议先 git add 保存下你删除了 某个 submodule
恢复
- clone 你的主仓库
- 进入你仓库
git submodule init
git submodule update
# update 只是将子模块仓库拉取下来, 拉取下来的子模块仓库 commit 是你之前添加进来的 commit, 不会是远程最新的 commit
更新
全部更新
git submodule update --remote # 这将会拉取所有子模块远程最新的 commit
单独更新某个
git submodule update --remote path/repo # path/repo 为你想拉取更新的子仓库路径
撤销
如果某个子模块仓库的 commit (版本)不好, 你可以更改
查看所有 log(commit) 去到 子仓库 目录下:
git log # git 会列出所有 commit, 查看你想要 commit 哈希值(一大串数字)
恢复
git checkout 哈希值
之后像往常一样推送你的 主仓库 即可, 子仓库模块信息自然更新, 最好是使用
git add . # 将 主仓库(包含 子仓库) 更改的信息全部添加