参考 https://printempw.github.io/splitting-a-subfolder-out-into-a-new-git-repository/git
git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter <name-of-folder> -- --allgithub
这条命令一样会过滤全部历史提交,只保留全部对指定子目录有影响的提交,并将该子目录设为该仓库的根目录。
这里说明各下个参数的做用:
--tag-name-filter 该参数控制咱们要如何处理旧的 tag,cat 即表示原样输出;
--prune-empty 删除空的(对子目录没有影响的)提交;
--subdirectory-filter 指定子目录路径;
-- --all 该参数必须跟在 -- 后面,表示对全部分支进行操做。若是你只想保存当前分支,也能够不添加此参数测试
拆分仓库也能够使用subtree更方便
git subtree split -P <name-of-folder> -b <name-of-new-branch>
subtree是把一个分支拆分到另外一个分支,这样的话操做起来更方便,不会改写原来分支的内容url
git filter-branch操做的时候会修改当前分支,也就是在当前分支的基础上作了一个切分,而后提交建立了一个修改。因此为了不污染原来的分支,建议一个分支一个分支的操做,而且操做前,最好是切一个临时分支。spa