【问题标题】:Is git gc required for a mirrored git bare repository where user's don't push any changes用户不推送任何更改的镜像 git 裸存储库是否需要 git gc
【发布时间】:2016-12-15 06:41:08
【问题描述】:

我有一个名为“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 不需要垃圾收集吗?

【问题讨论】:

  • master 是一个糟糕的存储库名称,因为 master 是默认分支名称。

标签: git git-push git-gc


【解决方案1】:

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

这肯定是矫枉过正。做例如du -sh objects 在 gc 之前和之后的 repo 中查看您节省了多少空间。我会推荐git gc --auto

通过使用 master.git 中的--force --mirror 选项推送来保持“slave.git”与“master.git”同步 -> slave.git [...] 将 slave.git 存储库需要一个“git gc”才能运行保持优化或者因为我们正在镜像已经 GC 的存储库 slave.git 不需要垃圾收集?

当您推送或获取时,新对象会打包发送。 git gc 会在包太多时合并包(现在 50 个,从 2008 年的 20 个增加),所以最终它会变得有价值。

【讨论】:

  • 感谢 jthill,是的,我确实有一个脚本可以检查对象,它们是否需要打包然后执行 gc。抱歉,我没有详细说明。
【解决方案2】:

git push --mirrormirror 方面意味着引用(分支和标签)可以使用相同的名称并指向与源相同的对象。这并不意味着底层数据库就是一个精确的镜像。

是的,您仍然需要在镜像目标中gc,因为它会在旧对象被丢弃时积累垃圾。推送操作不会清除此类对象,因为这些对象不再存在于源中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 2013-08-28
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2020-02-22
    • 2013-01-14
    • 2014-05-09
    相关资源
    最近更新 更多