2016-12-15 174 views
0

我有一個當前正在增長的git項目,並且有幾個部分開始成爲自己的項目。將git項目細分爲子模塊

所以,我想爲它們創建子模塊,但保留文件的歷史。有不同的文件夾之間移動(例如,從partThatIsNotItsOwnProjectpartThatIsItsOwnProject,我想對這一舉動的歷史了。)

前:我想有

/.git 
/someFiles 
/partThatIsItsOwnProject 
--/subdirectory 
/partThatIsNotItsOwnProject 
--/subdirectory 

/.git 
/someFiles 
/partThatIsItsOwnProject 
--/.git 
--/subdirectory 
/partThatIsNotItsOwnProject 
--/subdirectory 

所以,我猜想git subtree會這樣做,但它似乎保留原始的git存儲庫,只顯示它的一部分。 git submodule似乎是此設置的目標,但我如何進行轉換?

回答

1

爲此,您需要重寫整個存儲庫的歷史記錄,以排除與要放入單獨存儲庫的目錄無關的所有內容。 git filter-branch命令對此很有用。你可以在[0]找到一個腳本的例子。請注意,您可能需要根據需要進行調整。

通常,git filter-branch [1]允許您通過將過濾器順序應用於回購庫中的每個提交來重寫git歷史記錄。請注意,雖然使用--tree-filter是實現所需內容的最簡單方法,但它非常緩慢,因爲它可以正確檢出每次提交,因此直接使用--index-filter編輯索引效果更好。

[0] https://github.com/openstack/oslo.tools/blob/master/filter_git_history.sh

[1] https://git-scm.com/docs/git-filter-branch

1

叉你主GIT中,然後重命名分叉到 「partThatIsItsOwnProject」,然後除去一切不在於 「子目錄」 的一部分。 然後將分叉的git作爲子模塊添加到主Git中,所有歷史記錄都會保留。

對於想要從master git中突破的所有子區域重複此操作。