也許已經有一個解決方案了,但其他問題似乎解決了稍有不同的問題(或者我真的不明白它們)。從Git存儲庫拆分子目錄並保留子目錄中所有文件的歷史記錄_now_
我的意圖是分離一個Git倉庫的子目錄,並使其成爲一個獨立的存儲庫,同時保持歷史完整,但只有子目錄的歷史。 This question第一次似乎做的伎倆,但後來我注意到它的缺陷:
git filter-branch --subdirectory-filter
只保留提交涉及到給定的子目錄。但這意味着提交將被刪除,影響該子目錄現在的中的文件,但已從其他位置移動到那裏。
我注意到這一點,因爲我'清理'存儲庫的第一次提交是'將所有東西都移到子目錄X'。這意味着我的文件之前已經在另一個位置,但那時的提交併未保留。
那麼我需要的是一個命令(或命令序列):
- 刪除存儲庫中的所有承諾
- 除了包含文件的提交是
- 是在給定子目錄現在或
- 是這些文件在其他位置的先前版本。
B)
可能還有一些這些提交的還含有不符合這些條件的文件。如果可以從存儲庫中完全修剪這些文件,那將是一個不錯的附加組件。
編輯:
以上鍊接的溶液拉動新的存儲庫以回購的根目錄中的子目錄的內容。正如@Amber指出的那樣,這會對已存在於根目錄中的文件造成麻煩。所以我想實現的是:
原始目錄結構:
\Old-Repo
\.git
\ABC
|- dir content
\DEF
|- dir content
\GHI
|- dir content
分離的存儲庫的目錄結構應該是:
\New-Repo-DEF
\.git
\DEF
|- dir content
,而不是:
\New-Repo-DEF
\.git
content of old DEF subdirectory
然後,我會通過定期提交將內容從DEF子目錄移動到根目錄。
這樣做的問題是 - Git如何代表目前位於頂級目錄之外的路徑? – Amber 2013-04-07 22:57:05
真的有必要把子目錄拉上一層嗎?我很樂意把這個子目錄作爲一個子目錄留在新的存儲庫中(然後將內容提交到主目錄,然後定期提交)(請參閱我編輯的問題) – 2013-04-08 10:37:06