删除数百兆字节的意外生成的垃圾后,我的rails项目目录中的.git /对象仍然庞大.
我已经尝试过git add -A,以及其他命令来更新索引并删除不存在的文件.我收集,也许是错误的,目录中有两个字符名称的文件是blob.我曾尝试回滚以前的提交,但没有运气.
我该怎么做才能清理这个目录?
Jos*_*Lee 117
如果您添加了文件然后将其删除,则blob仍然存在但是悬空.git fsck将列出无法访问的blob,git prune并将删除它们.
如果您添加了文件,提交了它们,然后再回滚git reset --hard HEAD^,那么它们会更加深入.git fsck不会列出任何悬空提交或blob,因为你的分支的reflog持有它们.这是确保只保留历史记录中的对象的一种方法:
git reflog expire --expire=now --all
git repack -ad # Remove dangling objects from packfiles
git prune # Remove dangling loose objects
Run Code Online (Sandbox Code Playgroud)另一种方法是克隆存储库,因为它只携带可访问的对象.但是,如果悬空对象被打包(如果你执行了很多操作,git可能已经自动打包),那么本地克隆将携带整个packfile:
git clone foo bar # bad
git clone --no-hardlinks foo bar # also bad
Run Code Online (Sandbox Code Playgroud)
您必须指定一个协议来强制git计算新包:
git clone file://foo bar # good
Run Code Online (Sandbox Code Playgroud)cat*_*cat 11
Sparkleshare在我的git中创建了13GB的tmp_pack_文件,因为它无法多次进行大量图像检查.唯一有帮助的是......
rm -f .git/objects/*/tmp_*
Run Code Online (Sandbox Code Playgroud)
'git gc'没有删除这些文件.
如果你在修剪和重新包装后仍然有一个大的回购(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
Run Code Online (Sandbox Code Playgroud)
这将为您提供按升序大小排序的对象列表.您可以使用git-filter-branch从您的仓库中删除罪魁祸首.
有关指导,请参阅http://progit.org/book/ch9-7.html中的 "删除对象"
| 归档时间: |
|
| 查看次数: |
44375 次 |
| 最近记录: |