參考 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