git 删除文件的最旧版本

标签 git

我有一个 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/

相关文章:

python - GitPython 通过管道输出到 stdout

带有作者过滤器的 git diff

git - 是否可以完全删除 Git 分支?

ios - 如何使用 Git 进行图形和声音密集型 iOS 开发?

git - 添加git远程仓库的问题

git - 新用户尝试 pull 并收到一些令人困惑的消息

git - 我应该删除未使用的分支吗?

android - 如何获取此 git 脚本制作的补丁列表?

git - (git) diff 输出相对路径?

git - 我刚刚在哪个 git 分支?