问题标签 [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 - 在 git filter-branch 之后忘记 rm refs/original
我忘了rm refs/original
之后git filter-branch
做了git gc
,这清除了refs
。我还提交了新的 repo,并希望保留这些提交。
提取的分支大小为几千字节,但.git
重量仍为 80 MB,就像过滤之前一样。
现在refs
是空的,我不能再轻易删除refs/original
了。我怎样才能删除原件?如果可能的话,我想避免filter-branch
再次这样做。
git - 如何处理 git gc fatal: bad object refs/remotes/origin/HEAD 错误?
我今天在尝试运行 Git垃圾收集时随机遇到了这个问题:
我该如何处理?
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
删除对象?
git - `git gc` 和 `git repack -ad; 之间有什么区别吗?git prune`?
git gc
和有什么区别git repack -ad; git prune
吗?
如果是,将采取哪些额外步骤git gc
(反之亦然)?
在空间优化或安全方面,哪个更好用?
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 不需要垃圾收集吗?
git - git reset 后,未删除无法访问的提交
我有一个小仓库,有几个提交:
还:
我无法理解以下行为。在这种状态下我运行:
$ git reset initial
我现在看到:
我所期待的:提交 a0fc4f8 将被删除,因为它无法访问。
发生了什么:
1) Doinggit show a0fc4f8
仍然显示提交
2) Doing将提交 a0fc4f8 添加的git status
显示file.txt
为未跟踪,提交 f705657 添加的文件 hello 也显示为未跟踪。
3) 运行git gc
或git gc --prune=all
不删除 a0fc4f8,尽管它不再可访问并且没有与之关联的名称/标签。
为什么会发生这些?
更新:
更新 2:
$ git show a0fc4f8 仍然显示提交
更新 3:
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 并且还会引发一些内部错误 - 权限被拒绝错误。
git - 自定义对象和参考的注意事项是什么?
假设我想编写一个小助手,允许以可以传播到克隆的方式将一些元数据附加到存储库refs
。简单示例(一个git-notes克隆原型,它甚至没有将注释附加到任何其他 git 对象):
即我创建了一个blob
带有哈希的对象hash
并引用它,refs/comments/just
因此git fsck --unreachable
不会抱怨它,git gc
也永远不会prune
成为对象。
但这当然是一个非常简单的例子,实际上我对更复杂的功能感兴趣。在那里,我的问题是,我可以“合法”做什么,我应该绝对避免做什么?
例如,SE 上的几篇帖子是关于用户必须从重复tree
条目中恢复的。因此,一个“不要”就是“不要创建tree
带有重复条目的”。另一个例子是“确保你的对象是可访问的,所以不会git prune
删除它们”。还有什么?
我可以创建自定义对象类型吗?对树中的 blob 使用“无效”文件模式?我在哪里可以找到概述?或者我应该git-fsck
手动检查 's source 以查看什么构成错误(以及哪些是可以忽略的)?
git - 当我们这样做时 git 会做什么:git gc - git prune
启动时后台发生了什么,
git gc
git prune
git gc的输出:
git prune的输出:
这两个选项有什么区别?
谢谢
git - 确定是什么阻止了从 git 中删除提交
如何确定是什么阻止了通过以下命令从 git 中删除提交?
细节
我想XYZ
从我的克隆中完全删除一个提交(例如,使用 commit hash )。如果以上不是正确的命令(或者我的以下命令/推论中的任何一个不正确),请告诉我。
我知道XYZ
在运行上述 prune 之后它仍然在我的克隆中,因为以下返回一个日志列表:
我知道这XYZ
不在任何分支中,因为以下内容不输出任何内容:
我认为这XYZ
不在任何藏匿处,因为以下内容不输出任何内容:
XYZ
,然而,实际上是在一个藏匿处,但一个 git 错误阻止了藏匿处被列出。