我的rails项目目录中的 *.git/objects * 在删除了数百MB意外生成的垃圾后仍然很大。我尝试了git add -A,以及其他命令来更新索引和删除不存在的文件。我推测,也许是错误的,目录中有两个字符名称的文件是blob。我尝试回滚到以前的提交,但没有运气。我可以做些什么来清理这个目录?
git add -A
yeotifhr1#
git fsck
git prune
git reset --hard HEAD^
git reflog expire --expire=now --all git repack -ad # Remove dangling objects from packfiles git prune # Remove dangling loose objects
字符串
git clone foo bar # bad git clone --no-hardlinks foo bar # also bad
型你必须指定一个协议来强制git计算一个新的包:
git clone file://foo bar # good
型
ctehm74n2#
你试过git gc命令吗?
git gc
pobjuy323#
Sparkleshare在我的git中创建了13 GB的tmp_pack_ files,因为无法拉取多次巨大的二进制文件。'git gc'没有删除这些文件。唯一有帮助的是.
rm -f .git/objects/*/tmp_*
字符串rm -f很危险!有备份。你可以在以下情况下测试:
find .git -name "tmp_*" -print
型不知道这么多年过去了这是否仍然是一个问题,但是如果你不知道你在做什么,不确定操作系统或git版本(这告诉你不知道这是unix shell的globbing),就不要使用这个。https://en.wikipedia.org/wiki/Glob_(programming)
ycl3bljg4#
如果你在修剪和重新打包后仍然有一个大的repo(gc --aggressive --prune=tomorrow...),那么你可以简单地去寻找一个奇怪的:
gc --aggressive --prune=tomorrow
git rev-list --objects --all | while read sha1 fname do echo -e "$(git cat-file -s $sha1)\t$\t$fname" done | sort -n
字符串这会给你一个给予一个按升序排列的对象列表。你可以使用git-filter-分支从你的仓库中删除罪魁祸首。有关指导,请参见http://progit.org/book/ch9-7.html中的“删除对象
qq24tv8q5#
递归:
find ./ -iname '*.!*' -size 0 -delete for i in */.git; do ( echo $i; cd $i/..; git gc --aggressive --prune=now --force; ); done
5条答案
按热度按时间yeotifhr1#
git fsck
将列出无法访问的blob,git prune
将删除它们。git reset --hard HEAD^
回滚,它们会卡得更深一些。git fsck
不会列出任何悬空的提交或blob,因为你的分支的reflog会保留它们。这里有一种方法可以确保只有在你的历史记录中的对象会保留下来:字符串
型
你必须指定一个协议来强制git计算一个新的包:
型
ctehm74n2#
你试过
git gc
命令吗?pobjuy323#
Sparkleshare在我的git中创建了13 GB的tmp_pack_ files,因为无法拉取多次巨大的二进制文件。'git gc'没有删除这些文件。唯一有帮助的是.
字符串
rm -f很危险!有备份。你可以在以下情况下测试:
型
不知道这么多年过去了这是否仍然是一个问题,但是如果你不知道你在做什么,不确定操作系统或git版本(这告诉你不知道这是unix shell的globbing),就不要使用这个。https://en.wikipedia.org/wiki/Glob_(programming)
ycl3bljg4#
如果你在修剪和重新打包后仍然有一个大的repo(
gc --aggressive --prune=tomorrow
...),那么你可以简单地去寻找一个奇怪的:字符串
这会给你一个给予一个按升序排列的对象列表。你可以使用git-filter-分支从你的仓库中删除罪魁祸首。
有关指导,请参见http://progit.org/book/ch9-7.html中的“删除对象
qq24tv8q5#
递归:
字符串