问题标签 [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.
git - 错误:尝试重写历史时,pack-objects 死于信号 9517
我正在与之交互的 git 存储库有一个巨大的包文件(1.7Gb!),所以我尝试关注这篇文章。我能够使用git filter-branch
,但是当我运行时,git gc --aggressive --prune=now
我得到:
我试图将线程降低到已经使用的 2 和 1,git config --global pack.threads "2"
但它没有帮助。
谢谢!
git - 如何避免“git gc”生成垃圾松散对象?
在我跑之前git gc
,我有几千个松散的物体:
(注意松散的物体count
和size
)。在git gc
我吃了更多之后:
我知道发生这种情况是因为git gc
当它们变得无法访问时从包中逐出对象;作为松散的物体,它给了他们新的“生命租约”。
我怎样才能避免这种单一的行为git gc
发生?我希望它的所有其他行为保持不变,即所有超时、各种垃圾清除、除此之外的所有行为。
我git gc
最多每月跑一次。出于某种我不知道的原因,git gc --auto
几乎没有运行过(我不想改变它)。
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文件、错误推送的个人备份等问题。但是我也想知道我是否可以保留我长期存在的分支的历史。所以我的问题:
- 如果我删除所有短暂的分支,是否可以看到大小会减少多少?
- 这可以在本地实现吗?
- 还是我只需将所有内容复制到 GitLab 上的测试存储库并删除此测试存储库上的分支?
git - 从svn导入后重新打包
我已经用svn2git导入了一个 SVN Repo。现在我选择了如何重新打包/垃圾收集 repo 以减小大小,但我不想牺牲以后 git 操作的性能。我怎么做?
该工具的主页建议:
或者我应该使用一个非常长的深度和窗口:
后期 git 操作的性能是否会受到这些gc决定的影响?
git - 管理远程 git 存储库的存储库大小
我遇到了这个问题,我的存储库达到了 Bitbucket 中的 2GB 大小限制。在给定的时间,我在 repo 中有几个分支,每个大约 260MB(由于我在 repo 中保留了一些图像,以便更容易与团队共享)。鉴于这个文件大小,对于 8 个分支以下的任何内容,我应该远低于 2GB 限制。但是,我经常收到警告,有时由于达到限制而被锁定,不得不删除一些分支。
我注意到.git
根目录或项目中的隐藏目录非常大(~3GB)。这个目录在远程是如何处理的?显然,它没有上传。它是在遥控器中重新创建的吗?这可能是遥控器中的 repo 大小如此之大的原因吗?
我尝试运行git gc
将目录的大小减小.git
到大约 2.3GB,但这并没有解决问题,因为(1)它还不够,(2)它在我的机器上是本地的。有没有办法git gc
在远程?
git - 找到丢失的`git write-tree`
我有一个脚本可以git write-tree
用来弥补 中的不足,除非我是脚本git stash
,否则它可以完美运行。ctrlC
此时我^C的脚本并因此丢失了 write-tree hash variable workingTreeHash
。
我的恢复尝试:
什么都没显示……那么丢失的git add -f .;git write-tree
物体去哪儿了?在哪里可以找到。(我知道 git 工作区,我将尝试将其作为脚本的替代方案)。
这不是一个高优先级,仅供将来参考,以防这种情况再次发生在重要的事情上。
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 并将其克隆回来不是一种选择,因为克隆会导致代理出现超时错误。)
git - git push 和未引用的对象
不运行git prune
or git gc
,会git push
上传任何未引用的对象吗?想象一下这些提交历史:
A <= B <= C <= D <= E
在提交 C 中添加了一个新文件,并从提交 D 中删除了该文件。现在 agit rebase --onto B D
将导致:
A <= B <= E
并且该文件仍在 .git/objects 中,因为它被两个分离的提交 C 和 D 引用。现在在这两个事件中会发生什么:
git push <remote> <branch>
现在将远程包含已删除,因为文件对象仍然存在吗?将请求拉到远程分支的主要上游。如果 1 的答案是肯定的,如果 C 和 D 从未与上游合并,该文件是否会合并到上游?
编辑:这个问题补充了这里讨论的案例Removing unreferenced objects from remote
git - 无论如何,使用 gc --prune=now 清除 git 存储库中的悬空对象是否有帮助?
我有时会注意到一些 GIT 存储库中有大量悬空对象。
我有一个主-> 镜像设置,并且我每天只在镜像存储库而不是 auto.gc 上运行计划的垃圾收集。
所以我不担心会丢失镜像上的悬空对象,但是移除悬空对象会以任何方式帮助,比如加快获取速度,位图或对象存储结构的任何差异都会有所帮助吗?
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 技能真的很有限。为什么我会收到此警告以及如何长期解决此问题?