操作

  1. 使用 git subtree 为子项目创建一个 branch,该 branch 包含子项目相关的所有历史记录
  2. git clone 上述 branch,然后推送到目标仓库
  3. 根据需要,可清理上述 branch

执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## MAIN_PROJ_PATH: 需要被拆分的主工程路径
## SUB_PROJ_RELATIVE_PATH: 需要拆分出来的子工程相对于主工程的路径
## SOME_NAME: 任意取的某个分支名
## SUB_PROJ_NAME: 子工程项目名
## GIT_REMOTE_URL: 子工程指向的仓库地址

cd MAIN_PROJ_PATH
git subtree split -P SUB_PROJ_RELATIVE_PATH -b SOME_NAME

cd ..
git clone -b SOME_NAME MAIN_PROJ_PATH SUB_PROJ_NAME

cd SUB_PROJ_NAME
git branch -m master
git remote remove origin
git remote add origin GIT_REMOTE_URL
git push -u origin master

cd MAIN_PROJ_PATH
git branch -D SOME_NAME