Submodule 子模块
https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97#_git_submodules
新增
- 添加子模块
|
|
- 查看
|
|
- 提交
|
|
克隆
如果是克隆已经添加了子模块的项目
|
|
更新
情况1: 远程仓库的子模块更新了, 本地主项目记录的还是旧的子模块版本
1 2 3 4 5 6 7 8
# 子模块是一个独立的git项目,它并不需要知道自己被谁用 cd <子模块目录> git pull # 和第一次添加一样, 并不会在status里显示模块里面的文件更新 # submodule的版本控制在于submodule git 的 commit id, 所以要提交这些更新记录 cd ../../ git add static/platform git commit -m 'submodule update'
当项目的子模块很多的时候,可以一个命令更新所有的模块
1
git submodule foreach 'git pull origin master'
情况2: 远程仓库主项目的子模块信息更新了, 本地的子模块还是旧的
1 2 3 4 5
# 先更新主项目 git pull origin master # 再根据主项目里的记录更新本地子模块 git submodule init git submodule update
- 情况3: 对本地的子模块作了个人的修改: 不能提交到子模块的仓库, 就完全没用
修改模块
如果有子模块的修改权,那么把子模块当成单独的项目修改提交
删除模块
|
|
拆分已有文件为子模块
|
|
存在问题点:如果要回到拆分前没有子模块的分支,结果发现提示报错
1 2 3 4 5 6 7 8 9
error: The following untracked working tree files would be overwritten by checkout: sub/a.txt Please move or remove them before you switch branches. # 可以强制切换, 注意强制切换前保存修改 git checkout -f master # 再回到test分支,发现子模块文件夹空了 cd <sub-module> # 找回 git checkout .