我有一个 33 MB 的大文件,我想永久删除该文件的最旧版本,因此我只保留最新的 X 版本。怎么做?
我的裸存储库因此变得巨大。
我已尝试以下操作..但它完全删除了该文件
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_manual.txt' HEAD
为了识别我的存储库中的大文件,我使用亚里士多德·帕加尔齐斯 (Aristotle Pagaltzis) 的 git-large-blob https://stackoverflow.com/questions/298314/find-files-in-git-repo-over-x-megabytes-that-dont-exist-in-head.
我认为你走在正确的轨道上git filter-branch
你尝试过的命令。问题是您没有告诉它将文件保留在任何提交中,因此它被从所有提交中删除。现在,我认为没有办法directly tell git-filter-branch
跳过任何提交。但是,由于命令在 shell 上下文中运行,因此使用 shell 删除除最后 X 个修订之外的所有修订应该不会太困难。像这样的事情:
KEEP=10 I=0 NUM_COMMITS=$(git rev-list master | wc -l) \
git filter-branch --index-filter \
'if [[ ${I} -lt $((NUM_COMMITS - KEEP)) ]]; then
git rm --cached --ignore-unmatch big_manual.txt;
fi;
I=$((I + 1))'
那会保留big_manual.txt
在最近 10 次提交中。
话虽这么说,就像 Charles 提到的那样,我不确定这是否是最好的方法,因为您实际上通过删除旧版本来消除 VCS 的全部意义。
您是否已经尝试过优化 git 存储库git-gc
and/or git-repack
?如果没有,这些可能值得一试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)