我有一个 33 MB 的大文件,我想永久删除该文件的最旧修订版,因此我只保留最新的 X 修订版。怎么做?
我的裸仓库因此变得庞大。
我试过以下..但它完全删除了文件
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_manual.txt' HEAD
为了识别我存储库中的大文件,我使用 git-large-blob by Aristotle Pagaltzis .
最佳答案
我认为您尝试使用 git filter-branch
命令是正确的。问题是您没有告诉它在任何提交中保留该文件,因此它已从所有提交中删除。现在,我认为没有办法直接告诉 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))'
这将在最后 10 次提交中保留 big_manual.txt
。
话虽这么说,就像 Charles 提到的那样,我不确定这是最好的方法,因为您实际上通过删除旧版本来撤消 VCS 的全部 Gist 。
您是否尝试过使用 git-gc
和/或 git-repack
优化 git 存储库?如果没有,这些可能值得一试。
关于git 删除文件的最旧版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930612/