本文介绍:
1.把一个仓库的子目录变换为submodule,并完整记录提交记录
步骤:
- 清除与子目录提交无关的提交
- 推送至新仓库
- 克隆原仓库,以
submodule
的形式引用
效果:
1.1 清除与子目录提交无关的提交
- 创建一个新分支(此处分支名为
post
,可以自定义)
1
| git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter _posts -- --all
|
1
2
3
| git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
|
1.2 推送至新仓库
注意:新仓库与原仓库需要在同一条分支才可以同步
1
| git remote add origin https://github.com/USER/new.git
|
1
2
| git branch -d master
git branch master
|
1.3 克隆原仓库,以submodule
的形式引用
1
| git clone https://github.com/USER/old.git
|
1
| git rm -r NEED_Submodule/
|
1
2
3
| git submodule add -b master https://github.com/USER/new.git NEED_Submodule
git submodule init
git submodule update
|
注意:原仓库必须有submodule
的访问权限
2.子模块的提交与原仓库的更新
- 进入每一个子模块,commit
- 针对每一个子模块,push
1
| git submodule foreach git pull orgin master
|
注意:若要修改子模块中的代码,要切换到master分支再修改!否则在一个detach的分支修改无法提交,除非将detach的分支生成一个新的分支
3.Pull含有子模块的仓库
- 针对每一个子模块,分别进行pull
- 假设每个本地分支都是master,远程分支都是origin
1
| git submodule foreach git pull orgin master
|