git拆分仓库

1.git filter-branch拆分当前分支

  • 修改仓库目录,改为拆分后的结构
  • 建立一个当前分支的拷贝分支
  • git filter-branch -f --tag-name-filter cat --prune-empty --subdirectory-filter publish HEAD 运行命令,把publish目录下的内容和历史记录拆分到当前目录,删除全部其余的文件和历史记录,HEAD是当前分支
  • 建立新的远程仓库
  • 设置当前的remote为新建立的仓库 git remote set-url origin git@192.168.1.1:test.git
  • 把当前分支推送到远程的master git push -u origin test:master
  • 切换到原来的分支
  • 设置回来原来的远程仓库
  • 删除测试分支

 

2.git filter-branch拆分仓库全部分支

参考 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 该参数必须跟在 -- 后面,表示对全部分支进行操做。若是你只想保存当前分支,也能够不添加此参数测试

 

3.git subtree拆分当前分支

拆分仓库也能够使用subtree更方便

git subtree split -P <name-of-folder> -b <name-of-new-branch>

subtree是把一个分支拆分到另外一个分支,这样的话操做起来更方便,不会改写原来分支的内容url

 

总结

git filter-branch操做的时候会修改当前分支,也就是在当前分支的基础上作了一个切分,而后提交建立了一个修改。因此为了不污染原来的分支,建议一个分支一个分支的操做,而且操做前,最好是切一个临时分支。spa

相关文章
相关标签/搜索