偶尔我会把一个DVD-rip放到一个网站项目中,然后不小心git commit -a -m ...,然后,zap,回购邮件被2.2演出臃肿.下次我做了一些编辑,删除了视频文件,并提交了所有内容,但是历史记录中的压缩文件仍然存储在存储库中.
我知道我可以从那些提交开始分支并将一个分支重新绑定到另一个分支.但是我应该怎么做才能将2个提交合并在一起,以便大文件没有在历史记录中显示并在垃圾收集过程中被清除?
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兆字节来存储有关此信息.
我的问题总结:在我将两百个字节添加到两个现有文件之后,我在Bitbucket上的一个私有存储库的大小突然增加了一倍多.回购现在超过2GB,这使得Bitbucket将其置于只读模式.因为它处于只读模式,所以我无法推送会降低repo大小的更改.(Catch 22.)
详细信息:我公司最近开始在Bitbucket上托管git存储库.我负责的其中一个存储库大小约为973MB,这令人不安地接近1GB的软限制.为了减少repo大小,我按照Bitbucket文档文章中的说明将一个存储库分成两部分,并将大约450MB的文档和在线帮助文件移动到他们自己的私人仓库中.然后,我按照Bitbucket文档文章中的说明减少存储库大小和维护一个git存储库,具体来说:
git count-objects -vH 给我看了一个大约973MB的大小包.
我跑去git filter-branch --index-filter 'git rm --cached --ignore-unmatch doc' HEAD删除doc目录(这是我移动到新repo的内容).
我运行以下命令使参考和修剪过期:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
Run Code Online (Sandbox Code Playgroud)
git count-objects -vH然后给我看了一个881.1 MiB的尺寸包,du -sh .git/objects返回882M.我感到失望的是,移动450MB以上的回购大小减少了不到90MB,但是仍然把改变推到了Bitbucket:
git push --all --force
git push --tags --force
Run Code Online (Sandbox Code Playgroud)
repo的Bitbucket副本的设置页面继续显示973MB的大小.我退出了,刷新了浏览器,重新登录,但没有帮助 - 回购大小保持在973MB.
今天早上(上述更改后三天),我对两个现有文件进行了一些小的补充,这些文件将文件大小增加了不到1KB,添加并提交给我的本地仓库,然后将更改推送到到位桶.几分钟后,我看了一下repb的Bitbucket页面,看到一条红色警告标语告诉我"这个repo超过了2 GB的限制,并且处于只读模式." 设置页面现在说repo的大小为2.3 GB.
根据Bitbucket的说法,在两个文件中添加几百个字节肯定是过去三天在远程仓库上发生的唯一活动.这种推动可能不是回购的原因,而是规模增加了一倍,但这两个事件在时间上密切相关.
git reflog show 没有回报.
将新副本克隆到备用目录,然后运行git count-objects给我一个881.29 MiB的大小包. …
以前,我在本地使用git而不使用.gitignore
Afterwards,我创建了一个.gitignore文件,并在其中写入所有不必要的文件.当我把它们推到git repo时,致命:远程端挂断意外错误出现.
我不想推送忽略文件,但是,不知何故,git试图将它们推送到repo.
请帮帮我,我的错是什么?谢谢