0

好的,所以我在 bitbucket 上有这个远程存储库,并且在过去的 6 个月里我没有使用本地文件。现在,今天,经过大量工作,我尝试提交并推送我错过的代码,该操作花费了 30 多分钟,我取消了,因为它根本没有进展(卡在 99%)。我很惊讶,因为以前并非如此,而且几乎是立即发生的。

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

我认为我的本地仓库不知何故被太多的大文件破坏了,决定运行 bfg,但它没有找到高于 1MB 的 blob。

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

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

我不知道还能做什么。有什么建议么 ?

4

1 回答 1

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

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

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


--aggressive

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

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

--prune=<date>

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

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

于 2016-01-26T06:59:45.753 回答