是否有使用其ID
从git中删除blob的方法或命令我使用了命令
$ git rev-list --objects --all | git cat-file --batch-check='%(objectname) %(objecttype) %(rest)' | grep '^[^ ]* blob' | cut -d" " -f1,3-
获得所有版本的blob列表,如
62f7e0df0b80bce8d0a4cb388be8988df1bec5ef NodeApplication/NodeApplication/public/javascripts/homescript.js
b1d69387fbd4d4e84bbe9eb2c7f59053c0355e11 NodeApplication/NodeApplication/iisnode/index.html
624642d6f2a86844dc145803260537be0fe40090 NodeApplication/NodeApplication/.ntvs_analysis.dat
现在我要删除blob
NodeApplication/NodeApplication/.ntvs_analysis.dat.
我该怎么做?
答案 0 :(得分:1)
我用bfg清洁剂清理不需要的大文件,然后
system.conf
答案 1 :(得分:0)
"适当"这样做的方法是使用git的垃圾收集器。
首先找到引用blob的所有树。然后找到引用其中一棵树的所有提交。
完全删除这些提交(来自所有头部历史记录,所有标记和reflog),垃圾收集器将清理blob。
删除blob而不先删除引用它的对象会破坏您的存储库。
自动化整个过程的一种简单方法是使用git filter-branch
,它使您能够生成从未签入该特定文件的备用历史记录。
答案 2 :(得分:0)
如果您已经拥有blob ID,则可以使用git verify-pack
找到文件名(或反之亦然)
git verify-pack -v .git/objects/pack/*.idx | grep <reference_id or filename>
获得文件名后,您应该
git filter-branch
重写历史记录,以从分支中的每个提交中删除blob。这样,git垃圾收集器git gc
将清理它并释放空间。
查看脚本git forget-blob
,一步完成所有这些操作
git forget-blob file-to-forget
基本上这会删除所有标签,远程引用,如此
git tag | xargs git tag -d
git filter-branch --index-filter "git rm --cached --ignore-unmatch $FILE"
rm -rf .git/refs/original/ .git/refs/remotes/ .git/*_HEAD .git/logs/
git for-each-ref --format="%(refname)" refs/original/ | \
xargs -n1 --no-run-if-empty git update-ref -d
git reflog expire --expire-unreachable=now --all
git repack -A -d
git prune