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

相關文章
相關標籤/搜索