在BitBucket拆分git代码库操作备忘

把一个大的代码库的其中一部分拆分出来产生新的代码库,保留提交历史。参考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