问题标签 [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 投票
2 回答
1125 浏览

git - 在 git filter-branch 之后忘记 rm refs/original

我忘了rm refs/original之后git filter-branch做了git gc,这清除了refs。我还提交了新的 repo,并希望保留这些提交。

提取的分支大小为几千字节,但.git重量仍为 80 MB,就像过滤之前一样。

现在refs是空的,我不能再轻易删除refs/original了。我怎样才能删除原件?如果可能的话,我想避免filter-branch再次这样做。

0 投票
10 回答
79774 浏览

git - 如何处理 git gc fatal: bad object refs/remotes/origin/HEAD 错误?

我今天在尝试运行 Git垃圾收集时随机遇到了这个问题:

我该如何处理?

0 投票
1 回答
4585 浏览

git - git prune 对象的确切时间:为什么“git gc”不删除提交?

我正在学习 git 课程,想提一下丢失的 refs 直到 running 才真正丢失git gc。但是验证了这一点,我发现事实并非如此。即使在运行git gc --prune=all --aggressive丢失的裁判之后仍然存在。

显然我误解了一些东西。在课程中说错话之前,我想弄清楚我的事实!下面是一个示例脚本来说明效果:

该脚本将添加 10 个虚拟提交,重置为过去的 5 个提交,然后再添加 10 个提交。就在重置之前,它将打印当前 HEAD 的哈希值。

希望CURRENT在运行后丢失对象git gc --prune=all。然而,我仍然可以git show在那个哈希上运行。

我确实明白,在运行git reset并添加新提交之后,我基本上创建了一个新分支。但我原来的分支不再有任何引用,所以它没有出现在git log --all. 我想它也不会被推送到任何遥控器。

我的理解git gc是删除那些对象。情况似乎并非如此。

为什么?什么时候git gc删除对象?

0 投票
3 回答
2289 浏览

git - `git gc` 和 `git repack -ad; 之间有什么区别吗?git prune`?

git gc和有什么区别git repack -ad; git prune吗?
如果是,将采取哪些额外步骤git gc(反之亦然)?
在空间优化或安全方面,哪个更好用?

0 投票
2 回答
381 浏览

git - 用户不推送任何更改的镜像 git 裸存储库是否需要 git gc

我有一个名为“master.git”的 git 裸存储库,我定期在其中定期运行“git gc --prune=now”。

我有另一个名为“slave.git”的 git 裸存储库,它是使用“master.git”中的 --mirror 选项创建的。但是我已经停止了“git gc”并且不会运行,即使在 gitconfig 中自动关闭也是如此。

通过从 master.git -> slave.git 推送 --force --mirror 选项,使“slave.git”与“master.git”保持同步

master.git 存储库将从开发人员那里获得更改,而slave.git不会从开发人员那里获得任何更改,并且就像一个只读副本。

所以问题是,如果 master.git 存储库定期进行 GC,并且它的更改通过镜像选项推送到 slave.git,slave.git 存储库是否需要运行“git gc”以保持优化,或者因为我们正在镜像已经 GC 的存储库 slave.git 不需要垃圾收集吗?

0 投票
1 回答
787 浏览

git - git reset 后,未删除无法访问的提交

我有一个小仓库,有几个提交:

还:

我无法理解以下行为。在这种状态下我运行: $ git reset initial
我现在看到:

我所期待的:提交 a0fc4f8 将被删除,因为它无法访问。
发生了什么:
1) Doinggit show a0fc4f8仍然显示提交
2) Doing将提交 a0fc4f8 添加的git status显示file.txt为未跟踪,提交 f705657 添加的文件 hello 也显示为未跟踪。
3) 运行git gcgit gc --prune=all不删除 a0fc4f8,尽管它不再可访问并且没有与之关联的名称/标签。
为什么会发生这些?

更新:

更新 2:

$ git show a0fc4f8 仍然显示提交

更新 3:

0 投票
1 回答
137 浏览

git - Mirror Gerrit 维护 Git 存储库

我有一个裸存储库 A.git,它有 1500 个不在 Gerrit 下的分支,并且驻留在主机 1 中

我有一个相同的裸存储库 A.git,在 Gerrit 下有 2000 个分支,并且驻留在主机 2 中

Gerrit 下 A.git 中的 500 个额外分支可能是用户推送或评论/更改等的分支。我不需要这些分支,应该修剪。

因此,从源 A.git(主机 1)到 Gerrit(主机 2)下的 dsetination A.git 的复制应该准确地反映所有更改,并且还应该修剪目标(Gerrit)上的额外 500 个分支。Gerrit 中 A.git 下的 BUt refs/meta 应从修剪中排除,因为 Gerrit 需要正确识别存储库。

A.git -> A.git (Gerrit)。来自源的所有分支都应该同步到目标,并且应该修剪目标(Gerrit)中的额外分支。

push --mirror 选项不起作用,因为它试图删除 refs/meta 并且还会引发一些内部错误 - 权限被拒绝错误。

0 投票
0 回答
552 浏览

git - 自定义对象和参考的注意事项是什么?

假设我想编写一个助手,允许以可以传播到克隆的方式将一些元数据附加到存储库refs。简单示例(一个克隆原型,它甚至没有将注释附加到任何其他 git 对象):

即我创建了一个blob带有哈希的对象hash并引用它,refs/comments/just因此git fsck --unreachable不会抱怨它,git gc也永远不会prune成为对象。

但这当然是一个非常简单的例子,实际上我对更复杂的功能感兴趣。在那里,我的问题是,我可以“合法”做什么,我应该绝对避免做什么?

例如,SE 上的几篇帖子是关于用户必须从重复tree条目中恢复的。因此,一个“不要”就是“不要创建tree带有重复条目的”。另一个例子是“确保你的对象是可访问的,所以不会git prune删除它们”。还有什么?

我可以创建自定义对象类型吗?对树中的 blob 使用“无效”文件模式?我在哪里可以找到概述?或者我应该git-fsck手动检查 's source 以查看什么构成错误(以及哪些是可以忽略的)?

0 投票
2 回答
5336 浏览

git - 当我们这样做时 git 会做什么:git gc - git prune

启动时后台发生了什么,

  • git gc
  • git prune

git gc的输出:

git prune的输出:

这两个选项有什么区别?

谢谢

0 投票
1 回答
109 浏览

git - 确定是什么阻止了从 git 中删除提交

如何确定是什么阻止了通过以下命令从 git 中删除提交?

细节

我想XYZ从我的克隆中完全删除一个提交(例如,使用 commit hash )。如果以上不是正确的命令(或者我的以下命令/推论中的任何一个不正确),请告诉我。

我知道XYZ在运行上述 prune 之后它仍然在我的克隆中,因为以下返回一个日志列表:

我知道这XYZ不在任何分支中,因为以下内容不输出任何内容:

我认为这XYZ不在任何藏匿处,因为以下内容不输出任何内容:

XYZ,然而,实际上是在一个藏匿处,但一个 git 错误阻止了藏匿处被列出。