把一个大的代码库的其中一部分拆分出来产生新的代码库,保留提交历史。参考BitBucket官方说明和部分网文。
1. 创建新的空代码库newrepo。
2. 在本地把旧代码库clone下来并放进文件夹newrepo。
git clone git@bitbucket.org:user/oldrepo.git newrepo
3. 进入文件夹解除到远程库的链接。
git remote rm origin
4. 删除不需要的文件及其记录,可以是曾经存在但现在已删除的历史文件。其中git rm部分如果报错说匹配不到文件,就加入–ignore-unmatch选项。
git filter-branch -f –index-filter ‘git rm –cached -r dir1 dir2’ — –all
5. 删除变空的提交。这里会遗留一些合并时产生的提交。
git filter-branch -f –commit-filter ‘git_commit_non_empty_tree “$@”‘ — –all
6. 回收垃圾
git gc –aggressive –prune=now
7. 重设远程库并推送代码。
git remote add origin git@bitbucket.org/user/newrepo.git
git push origin master