问题标签 [git-gc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
376 浏览

git - 错误:尝试重写历史时,pack-objects 死于信号 9517

我正在与之交互的 git 存储库有一个巨大的包文件(1.7Gb!),所以我尝试关注这篇文章。我能够使用git filter-branch,但是当我运行时,git gc --aggressive --prune=now我得到:

我试图将线程降低到已经使用的 2 和 1,git config --global pack.threads "2"但它没有帮助。

谢谢!

0 投票
1 回答
220 浏览

git - 如何避免“git gc”生成垃圾松散对象?

在我跑之前git gc,我有几千个松散的物体:

(注意松散的物体countsize)。在git gc我吃了更多之后:

我知道发生这种情况是因为git gc当它们变得无法访问时从包中逐出对象;作为松散的物体,它给了他们新的“生命租约”。

我怎样才能避免这种单一的行为git gc发生?我希望它的所有其他行为保持不变,即所有超时、各种垃圾清除、除此之外的所有行为。

git gc最多每月跑一次。出于某种我不知道的原因,git gc --auto几乎没有运行过(我不想改变它)。

0 投票
2 回答
750 浏览

git - 删除分支后测试 Git 存储库大小减少

有什么方法可以测试删除多个分支将如何影响该 git repo 的大小。我有一个 git repo,它有 10 个活跃的分支和数百个功能(短期分支)。

回购非常大,克隆速度很慢。GitLab 显示总大小为 1.4 GB,git-sizer显示 blob 总大小为 8.4 GB。

我已经尝试过使用BFG Repo Cleaner等工具来删除不需要的历史记录,但我只设法减少了 1.4 到 1 GB,这还不够。

我的策略将我的回购分成 2 份,并使用多个分叉来分隔工作流。我还将在 GitLab 中添加推送扩展和大小限制以停止推送垃圾。我们遇到了.rar.zip.jar文件、错误推送的个人备份等问题。但是我也想知道我是否可以保留我长期存在的分支的历史。所以我的问题:

  1. 如果我删除所有短暂的分支,是否可以看到大小会减少多少?
  2. 这可以在本地实现吗?
  3. 还是我只需将所有内容复制到 GitLab 上的测试存储库并删除此测试存储库上的分支?
0 投票
1 回答
54 浏览

git - 从svn导入后重新打包

我已经用svn2git导入了一个 SVN Repo。现在我选择了如何重新打包/垃圾收集 repo 以减小大小,但我不想牺牲以后 git 操作的性能。我怎么做?

该工具的主页建议:

或者我应该使用一个非常长的深度和窗口:

后期 git 操作的性能是否会受到这些gc决定的影响?

0 投票
1 回答
312 浏览

git - 管理远程 git 存储库的存储库大小

我遇到了这个问题,我的存储库达到了 Bitbucket 中的 2GB 大小限制。在给定的时间,我在 repo 中有几个分支,每个大约 260MB(由于我在 repo 中保留了一些图像,以便更容易与团队共享)。鉴于这个文件大小,对于 8 个分支以下的任何内容,我应该远低于 2GB 限制。但是,我经常收到警告,有时由于达到限制而被锁定,不得不删除一些分支。

我注意到.git根目录或项目中的隐藏目录非常大(~3GB)。这个目录在远程是如何处理的?显然,它没有上传。它是在遥控器中重新创建的吗?这可能是遥控器中的 repo 大小如此之大的原因吗?

我尝试运行git gc将目录的大小减小.git到大约 2.3GB,但这并没有解决问题,因为(1)它还不够,(2)它在我的机器上是本地的。有没有办法git gc在远程?

0 投票
1 回答
54 浏览

git - 找到丢失的`git write-tree`

我有一个脚本可以git write-tree用来弥补 中的不足,除非我是脚本git stash,否则它可以完美运行。ctrlC

此时我^C的脚本并因此丢失了 write-tree hash variable workingTreeHash

我的恢复尝试:

什么都没显示……那么丢失的git add -f .;git write-tree物体去哪儿了?在哪里可以找到。(我知道 git 工作区,我将尝试将其作为脚本的替代方案)。

这不是一个高优先级,仅供将来参考,以防这种情况再次发生在重要的事情上。

0 投票
0 回答
166 浏览

git - 如何摆脱 git gc 上的“内存不足”?

这个错误已经困扰了我很长时间(几个月),我能找到的所有东西(无论是在 SO 上还是在互联网上)都没有解决任何问题。

我有一个历史悠久的 git 存储库。如此之大,以至于无法克隆它。这不是我想在这里解决的问题,但指定它可能会帮助您理解问题。

使用 git 版本 1.9.5,每次 I 时git pull,git 都会告诉我:“自动打包存储库以获得最佳性能。您也可以手动运行“git gc”。有关更多信息,请参阅“git help gc”。”。但它失败并出现此错误:“致命:内存不足,malloc 失败(尝试分配 257539286 字节)”(每次拉取时字节数都会增加)。我尝试了几次git gc手动运行,即使使用--prune=now,但我遇到了同样的错误。

我可以使用任何配置来git gc成功吗?我不介意需要几天才能完成。(如前所述,删除 repo 并将其克隆回来不是一种选择,因为克隆会导致代理出现超时错误。)

0 投票
2 回答
96 浏览

git - git push 和未引用的对象

不运行git pruneor git gc,会git push上传任何未引用的对象吗?想象一下这些提交历史:

A <= B <= C <= D <= E

在提交 C 中添加了一个新文件,并从提交 D 中删除了该文件。现在 agit rebase --onto B D将导致:

A <= B <= E

并且该文件仍在 .git/objects 中,因为它被两个分离的提交 C 和 D 引用。现在在这两个事件中会发生什么:

  1. git push <remote> <branch>现在将远程包含已删除,因为文件对象仍然存在吗?

  2. 将请求拉到远程分支的主要上游。如果 1 的答案是肯定的,如果 C 和 D 从未与上游合并,该文件是否会合并到上游?

编辑:这个问题补充了这里讨论的案例Removing unreferenced objects from remote

0 投票
0 回答
33 浏览

git - 无论如何,使用 gc --prune=now 清除 git 存储库中的悬空对象是否有帮助?

我有时会注意到一些 GIT 存储库中有大量悬空对象。

我有一个主-> 镜像设置,并且我每天只在镜像存储库而不是 auto.gc 上运行计划的垃圾收集。

所以我不担心会丢失镜像上的悬空对象,但是移除悬空对象会以任何方式帮助,比如加快获取速度,位图或对象存储结构的任何差异都会有所帮助吗?

0 投票
1 回答
634 浏览

git - 运行 git fetch origin 时出现 Git gc 和 git prune 警告

在某个时刻使用远程存储库时,我在运行时开始收到此信息git fetch origin

在后台自动打包存储库以获得最佳性能。

有关手动内务管理,请参阅“git help gc”。

警告:最后一次 gc 运行报告了以下内容。请更正根本原因并删除 .git/gc.log。

在删除文件之前不会执行自动清理。

警告:无法到达的松散对象太多;运行 'git prune' 删除它们。

这事儿常常发生。我找到了git gc应该有帮助的地方,但它只能工作一次(或似乎工作) - 在此之后,git fetch origin我得到了

在后台自动打包存储库以获得最佳性能。有关手动内务管理,请参阅“git help gc”。

后来情况又重复了。我还尝试删除 .git/gc.log - 它没有帮助。

我的 git 技能真的很有限。为什么我会收到此警告以及如何长期解决此问题?