我有一个相当长的历史背后的大型项目,我正在尝试将某些文件放入他们自己的存储库,同时保留他们的整个变更历史。
在此之前,我将我需要保留的所有文件移动到他们自己的project/subdirectory
中,因此我可以克隆我的存储库,使用git filter-branch --subdirectory-filter
但是这会抛弃文件的整个历史记录,因为subdirectory
非常新。
我正在寻找的是一种说“保留所有提交这些文件的提交”的方法,所以我会把所有文件放在该子目录中,然后向后提交说“这个提交中的文件是什么?是的将提交和文件保留在该提交中“。
有没有办法相对无痛地做到这一点?
答案 0 :(得分: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
。