需求描述
我有一个仓库AAA,目录结构如下:
| 12
 3
 4
 5
 6
 7
 8
 
 | $ tree├── .git
 ├── common-api
 ├── commons-pojo
 ├── commons-utils
 ├── account
 └── payment
 └── product
 
 | 
现在我需要把common-api、commons-pojo、commons-utils独立为一个新仓库xxx-common
从网上找到可以用”git filter-branch”和”git subtree split”两种方式独立目录为仓库,但是”git subtree split”只能独立一个目录为仓库,如果需要独立多个目录为仓库需要使用”git filter-branch”。
实施步骤
1. Clone原有仓库到本地
| 1
 | git clone git@192.168.0.xxx:test/AAA.git
 | 
2. 在本地创建需要保留的分支
下面示例中保留了dev和feature_20230513_xxx_aaa_bbb
| 12
 
 | git checkout -b dev origin/devgit checkout -b feature_20230513_xxx_aaa_bbb origin/feature_20230513_xxx_aaa_bbb
 
 | 
3. 取消远程库的关联
4. 删除所有tag
需要删除所有的tag,否则会出错
| 1
 | git tag -l | xargs git tag -d
 | 
5. 保留需要的目录和git历史
把”GIT_COMMIT –”后面的目录改为自己需要保留的
| 12
 
 | git filter-branch -f --prune-empty --index-filter \'git rm --cached -r -q -- . ; git reset -q $GIT_COMMIT -- commons-api  commons-pojo  commons-utils' -- --all
 
 | 
6. 清理仓库并减小体积
| 12
 3
 4
 
 | git reset --hardgit 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
 
 | 
7. 关联到新的远程库(空仓库),并推送代码到远端
| 12
 3
 4
 
 | git remote add origin git@192.168.0.xxx:test/xxx-common.gitgit push -u origin master
 git push -u origin dev
 git push -u origin feature_20230513_xxx_aaa_bbb
 
 |