文件共享上的git是否需要显式git gc?

文件共享上的git是否需要显式git gc?,git,Git,我们是一个开发团队,在windows文件共享上拥有我们的中央存储库 我们的一个开发人员错误地在一个分支上推送了大量的提交。之后,我们从中央存储库中删除了该分支,但显然这并没有真正删除提交 由于它只是一个文件共享,因此文件服务器上没有自动运行git gc的进程 我们是否需要在中央存储库上显式运行git gc git gc不是由后台服务运行的。当达到应删除对象的特定阈值时,客户端会在执行某些命令(如commit或push)后自动运行该命令。本地存储库也没有处理过程。 git gc不是由后台服务运行的

我们是一个开发团队,在windows文件共享上拥有我们的中央存储库

我们的一个开发人员错误地在一个分支上推送了大量的提交。之后,我们从中央存储库中删除了该分支,但显然这并没有真正删除提交

由于它只是一个文件共享,因此文件服务器上没有自动运行
git gc
的进程


我们是否需要在中央存储库上显式运行
git gc

git gc
不是由后台服务运行的。当达到应删除对象的特定阈值时,客户端会在执行某些命令(如
commit
push
)后自动运行该命令。

本地存储库也没有处理过程。

git gc
不是由后台服务运行的。当达到应删除对象的某个阈值时,客户端在执行某些命令(如
commit
push
)后自动运行该命令。

错误答案阅读注释


git gc
删除已暂存的无法访问的对象(使用
git add
),我认为它永远不会删除已提交的文件。

错误答案阅读注释


git-gc
删除已暂存的无法访问的对象(使用
git-add
),我认为它永远不会删除已提交的文件。

正如Daniel所说,存储库位于共享文件系统上的事实对git来说并没有什么特殊之处:这就像此repo位于常规文件系统上一样。因此,没有服务器,只有一堆访问同一存储库的“客户端”Git进程

也就是说,这种情况与通常仅由单个开发人员操作的“普通”本地存储库的情况没有什么不同

正如状态一样,Git确实通过运行
Git gc--auto
来对存储库执行某些检查,这可能会检测到需要gc并对其执行检查

所以

  • git-gc--auto
    将由在该存储库上运行的开发人员之一运行的git进程自动生成。这一切都将自行发生

    文档中没有明确指定可能触发此操作的精确Git操作。我认为这是因为没有必要对其进行编码(这种GC应该是快速和透明的)

  • 我看不出有什么理由不手动运行
    git-gc--aggressive
    来回收可用空间

    不过,您必须记住,如果启用了reflog,您可能希望

    • 确保reflog是空的(通过
      git reflog expire--all
      或更细粒度的方法,如手动从中删除所需的条目)
    • 没有其他挥之不去的引用(分支或标记)指向不需要的历史
    还要注意,虽然Git应该正确地序列化对存储库的所有访问,并在操作对象时使用“创建+原子重命名”操作,但我会要求开发人员在对存储库执行垃圾收集时不要访问存储库

  • 附言。
    您可能会发现阅读起来很有趣,尤其是讨论中提到的内容。

    正如Daniel所说,存储库位于共享文件系统上这一事实对Git来说并没有什么特别之处:它就像这个repo位于常规文件系统上一样。因此,没有服务器,只有一堆访问同一存储库的“客户端”Git进程

    也就是说,这种情况与通常仅由单个开发人员操作的“普通”本地存储库的情况没有什么不同

    正如状态一样,Git确实通过运行
    Git gc--auto
    来对存储库执行某些检查,这可能会检测到需要gc并对其执行检查

    所以

  • git-gc--auto
    将由在该存储库上运行的开发人员之一运行的git进程自动生成。这一切都将自行发生

    文档中没有明确指定可能触发此操作的精确Git操作。我认为这是因为没有必要对其进行编码(这种GC应该是快速和透明的)

  • 我看不出有什么理由不手动运行
    git-gc--aggressive
    来回收可用空间

    不过,您必须记住,如果启用了reflog,您可能希望

    • 确保reflog是空的(通过
      git reflog expire--all
      或更细粒度的方法,如手动从中删除所需的条目)
    • 没有其他挥之不去的引用(分支或标记)指向不需要的历史
    还要注意,虽然Git应该正确地序列化对存储库的所有访问,并在操作对象时使用“创建+原子重命名”操作,但我会要求开发人员在对存储库执行垃圾收集时不要访问存储库

  • 附言。
    您可能会发现阅读起来很有趣,尤其是讨论中提到的内容。

    git gc
    肯定会删除无法通过任何分支或标记访问的提交。@DanielHilgarth:有趣,我不知道这一点。我会留下答案,这样那些不知道这两个问题的人可以学到一些东西:)
    git gc
    当然会删除那些无法通过任何分支或标记访问的提交。@DanielHilgarth:有趣,我不知道。我会留下答案,这样那些不知道这两个问题的人可以学到一些东西:)好的,但是因为没有人在文件服务器上运行任何git命令,那么我需要在那里显式地运行
    git gc
    ?@Klashoutbourn:你在服务器上运行命令,即当