Git和repo尺寸

时间:2016-01-26 01:07:52

标签: git symfony bitbucket bfg-repo-cleaner

好的,所以我在bitbucket上有这个远程存储库,并且在过去的6个月里我没有使用我的本地文件。现在,今天,经过大量的工作,我尝试提交并推送我错过的代码,操作需要超过30分钟,我取消因为它根本没有进展(卡在99%)。我感到很惊讶,因为它以前不是这样,而且几乎是即刻的。

  • 所以我检查我的应用程序大小:根据finder
  • 660MB
  • .git文件夹为600MB
  • 在远程部分,回购是178mb

我认为我的本地仓库在某种程度上被大量文件破坏了,决定运行bfg,并且它没有找到高于1MB的blob。

这是一个symphony2安装,其中排除了供应商文件夹。

这是一个持续的推动10分钟 Writing objects: 99% (532/533), 203.39 MiB | 249.00 KiB/s

我不知道该怎么做。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

本地尺寸与遥控尺寸无关 每次向git添加文件时(即使您没有提交它),也会生成SHA-1,文件存储在.git文件夹中。

所以基本上你可以在.git文件夹下拥有无限的数据存储空间。

您需要检查的是.pack文件的大小。这是存储在git中的实际数据。所有内容都存储在那里。

如果您想减小尺寸并删除所有未使用的数据:

# The "expire" subcommand prunes older reflog entries. 
# Entries older than expire time
git reflog expire --all --expire=now

# clean and re-pack the repository
git gc --aggressive --prune=now

这将删除您的回购下的所有过期内容,并将重新打包您的包文件。

在某些情况下,您有多个包文件,这也会优化它们。

--aggressive

  

通常git gc运行速度非常快,同时提供良好的磁盘空间利用率和性能。

     

此选项将导致git gc更积极地优化存储库,但代价是花费更多时间。这种优化的效果是持久的,所以这个选项只需要偶尔使用;每隔几百个变化集左右。

--prune=<date>

  

修剪早于日期的松散对象(默认为2周前,可由配置变量gc.pruneExpir覆盖)。 --prune=all修剪松散的物体,不论其年龄如何(除非你确切知道自己在做什么,否则不要使用--prune = all。

     

除非存储库处于静止状态,否则您将丢失尚未使用refs锚定的新创建的对象,最终破坏您的存储库。 --prune默认开启。