簡體   English   中英

將git項目細分為子模塊

[英]Segment git project into submodules

我有一個正在進行中的git項目,並且有幾個部分已經開始成為自己的項目。

因此,我想為其創建子模塊,但保留文件的歷史記錄。 在不同的文件夾之間有移動(例如,從partThatIsNotItsOwnProjectpartThatIsItsOwnProject ,我也想知道該移動的歷史記錄。)

之前:

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

我想擁有:

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

因此,我猜想git subtree可以做到這一點,但是它似乎保留了原始的git存儲庫,只顯示了其中的一部分。 git submodule似乎是此設置的目標,但是我該如何過渡?

為此,您需要重寫整個存儲庫的歷史記錄,以排除與您要放入單獨存儲庫中的目錄無關的所有內容。 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

分叉您的主要git,然后將分叉重命名為“ partThatIsItsOwnProject”,然后刪除不屬於該“ subdir”的所有內容。 然后將分叉的git作為子模塊添加到您的主git中,所有歷史記錄都將保留。

對您要從主git突破的所有子目錄重復上述操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM