背景
对某库提交历史进行清理,之前做过类似的处理。这次碰到2个新的小问题,记录一下。
基本步骤
参考使用git filter-branch删除没有使用的大文件 (彻底删除git中没用的大文件,git filter-branch 命令修改删除提示记录)
所碰到的2个小问题
问题1:执行以下命令报错。报错信息中含有:fatal: Cannot open existing pack file '.git/objects/pack/pack-*.idx'
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -n | tail -3
报错信息如下两行:
Input file specified two times.
fatal: Cannot open existing pack file '.git/objects/pack/pack-*.idx'
开始以为是没有pack-*.idx文件不存在,但查看后的确是有的。摸索了一下,解决办法是:
在cmd 或者windows-terminal窗口运行以下命令后,再执行上述命令即可。
C:\Program Files\Git\bin\bash.exe
注意:
如果有安装wsl2,直接执行bash.exe,启动的bash是wsl2,而在wsl2下的bash中执行这个命令也有问题,但是在git下的bash.exe中执行(实际为mingw)则没有问题。
问题2:执行 filter-branch 时报错,报错信息:Cannot rewrite branches: You have unstaged changes.
git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch <file>/' --tag-name-filter cat -- --all
报错信息如下:
Cannot rewrite branches: You have unstaged changes.
以为是路径中有空格,实际不是。解决办法如下,或者采用tortoisegit提交即可。
git checkout -- <file>
或
git add <file>