145M = .git/objects/pack /
我编写了一个脚本来添加每个提交和提交的差异大小,然后再从每个分支的尖端向后移动.我得到129MB,没有压缩,没有分支机构的相同文件和分支机构之间的共同历史记录.
Git考虑了所有这些因素,所以我期望更小的存储库.那么为什么.git这么大?
我弄完了:
git fsck --full
git gc --prune=today --aggressive
git repack
Run Code Online (Sandbox Code Playgroud)
要回答有多少文件/提交,我有19个分支,每个文件大约有40个文件.287次提交,发现使用:
git log --oneline --all|wc -l
Run Code Online (Sandbox Code Playgroud)
它不应该使用10兆字节来存储有关此信息.
我有一个GitHub仓库,有两个分支 - 主和发布.
发布分支包含二进制分发文件,这些文件导致了非常大的repo大小(> 250MB),所以我决定清理一下.
首先,我删除了远程发布分支 git push origin :release
然后我删除了本地发布分支.首先我试过git branch -d release,但是git说"错误:分支'释放'不是你当前HEAD的祖先." 这是真的,所以我git branch -D release强迫它被删除.
但是我在本地和GitHub上的存储库大小仍然很大.所以然后我浏览了通常的git命令列表,比如git gc --prune=today --aggressive没有运气.
按照Charles Bailey在SO 1029969的指示,我得到了最大blob的SHA1列表.然后我使用来自SO 460331的脚本 来找到blob ......并且五个最大的不存在,虽然找到了较小的blob,所以我知道脚本正在工作.
我认为这些博客是发布分支中的二进制文件,它们在删除该分支后不知何故.什么是摆脱它们的正确方法?
我有一个代码库(到现在为止)使用git来存储它的依赖项.存储库本身在这里可用(警告:它是巨大的).不用说,我需要从存储库历史记录中删除依赖项,以便将其减少到合理的大小.
我首先使用David Underhill的说明lib从历史记录中删除目录.然而,即使在这样做之后,存储库仍然超过300M.发布git prune和git repack帮助,但它仍然超过180M.
为了找到任何臃肿的斑点,我发出了
git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head
Run Code Online (Sandbox Code Playgroud)
结果如下:
105526b5d3d398b9989d88c2f9fc2d1dc96a85b8斑点35685609 33600527 31978828 d296935e6ac5f3f58b50c789394c9769116e9c34团块35658016 33593241 112485744 50636f931180a32764edadd854968a971a083f8a团块28360290 25897864 233390 b9e4dd37428e879a258f297b7f5bcfb9ba869695团块13108002 11640713 66661788 08d2720b2414aa07ce419b17d5f80c333c7313b7团块12551621 11124009 89231035 6197a478a461275a0396f20c28487e9ae619a5f9团块11975135 11058259 148211988 1 50636f931180a32764edadd854968a971a083f8a 549eb0c73776fd0ede27a2fcb03366f76f45a13c团块9136086 8166649 166451273 5bc0a0f04a7004bc16cfab1c091c6b369fb74049团块9072616 8270262 80951514 741480238a6a6ce612cf089245dd46d6890fba9f团块8858569 8080252 101294029 744226651c55b14c1aa8affb78fba4fdf02b577c团块7412220 6766404 186825167
这就是我被困住的地方.我可以git show看到这些blob并看到它们看起来非常像jar文件,但我无法弄清楚为什么它们仍然在回购中.
查找文件名的各种尝试都失败了.
git repack -a,git repack -ad和git repack -Ad一切似乎都没有影响.
不幸的是,我们不久前意外地检查了一个大的二进制文件,直到今天没有人注意到.现在我想删除该提交并保留剩余的历史记录.我知道改变推进历史的警告,但在这种情况下,我无法避免它.
我一直试图达到这个~1h但却未能得到它.我找到的最好的命令是
git rebase --interactive --preserve-merges $(EVIL_COMMIT)^
Run Code Online (Sandbox Code Playgroud)
并在编辑器中评论出第一次提交是邪恶的.
不幸的是,git rebase在合并时停止并提示手动解决合并冲突.邪恶的提交只添加了我们的软件为测试目的计算的一些示例文件.因此,它们不应该与刚刚丢失的示例文件发生任何冲突.
我在Google和SO搜索上花了很多时间.一些线程涵盖了类似的主题,但是使用的语法在今天的Git版本中不再可用,或者它对我不起作用(我之前仅描述了一种方法,因为它是最简单的方法).
假设我有一个文件可能已经在 git 存储库中,并且它可能驻留在多个路径名下,甚至在同一个提交中。
如何查找包含带有与该文件对应的哈希值的 blob 的所有提交,并列出这些提交以及每个文件所在的路径名?
是否有一种按哈希查找文件的技术也可以搜索索引和工作目录?