2013-04-07 94 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