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
。