git 倉庫分家
作者:gugod 發佈於:如果想要把現有倉庫中的某個目錄拆出來成為一個獨立的倉庫,概念上
是進行「重新做所有的 commit,但這次只做跟目錄有關的部份」。像這類的概念,都可以
利用 filter-branch 這個指令來完成。
假設在 foo.git 中有個 bar/ 目錄要獨立,這部份是進行以下步驟:
git clone foo.git bar
cd bar/
git filter-branch --subdirectory-filter bar -- --all
這樣做完就行了。新建的 bar 目錄就會只有原 foo/bar 的檔案及歷史。
原 foo/bar 如果要移除,簡單的方式是 git rm bar,但這樣歷史記錄還是在。如果
有需要篡改歷史,概念上則是「重新做所有的 commit,但這次略過跟 bar 目錄有關的部份」。
一樣也是用 filter-branch 指令。
git clone foo.git
cd foo/
git filter-branch --tree-filter 'rm -rf bar/' -- --all
git push --force
最後的 git push 一定需要 --force,因為歷史被改變的關係。這表示其他人最好重新
做 git clone。