2013-04-07 87 views
2

我有一個相當大的項目,它背後有一段悠久的歷史,我試圖把某些文件放入他們自己的倉庫中,同時保留它們的整個變化歷史。
在此之前,我將所有需要保留在自己的文件project/subdirectory中,因此我可以克隆我的存儲庫,使用git filter-branch --subdirectory-filter,但由於subdirectory是非常新的文件,因此會丟失整個文件的歷史記錄。更聰明的git filter-branch --subdirectory-filter

我在尋找的是一種說「保留所有導致這些文件的提交」的方式,所以我會將該子目錄中的所有文件都提交回來,並說「在該提交中是該文件?是保留提交和該文件在提交「。

有沒有辦法做到這一點相對無痛?

+0

這些文件是否在過去移動/重命名? – Chronial 2013-04-07 18:28:12

回答

1

也許您需要首先修改您的原始回購庫,以便這些文件的歷史記錄看起來像它們始終位於該子目錄中。
然後你可以應用filter-beanch。

請參閱 「How can I rewrite history so that all files are in a subdirectory?」:

修改的提交,以便隨時隨地project/subdirectory不存在,則創建和所有文件都移動到它:

git filter-branch --prune-empty --tree-filter ' 
if [[ ! -e project/subdirectory ]]; then 
    mkdir -p project/subdirectory 
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files project/subdirectory 
fi' 

現在歷史將被記錄爲好像所有文件總是位於project/subdirectory