【问题标题】:Why git operations becomes slow when repo gets bigger为什么当 repo 变大时 git 操作变慢
【发布时间】:2013-07-06 18:34:01
【问题描述】:

我知道当 repo 变大时 git 会变慢。
但是为什么呢?
由于 git 将文件存储为单独的目录和 .git 下的文件,我无法找出操作变慢的原因。让我们看看 commit 操作。最近,我克隆了 webkit repo 并从 master 分支,然后我将 2k 文件提交到分支。但我觉得它比我在我的小回购上做的要慢。
因为我没有通读 git 源代码,我猜提交操作会影响将文件存储到磁盘、插入提交日志、更新索引并将 HEAD 更新为文件的 sha 值。

写入速度很快。
插入速度很快。(我猜,如果插入操作是将日志附加到文件)
更新索引很快。
更新 HEAD 很快。

为什么它很慢? 谁能给我说明一下?
谢谢。

一些答案​​很有帮助但不是很令人信服,提供一些代码sn-ps来支持你会很棒。

【问题讨论】:

    标签: git git-commit git-gc


    【解决方案1】:

    提交一棵树应该在时间上保持不变,因为它只需要创建一个新的提交对象(git write-tree)并更新HEAD ref。

    我过去做过不同 SCM 的基准测试,git commit 确实不受树大小、存储库大小、历史长度等的影响。

    【讨论】:

    • 由于commit ID是当前repo快照的SHA-1,所以不能是常数时间。
    • 提交 ID 是提交对象内容的 SHA1。内容包括父提交的 SHA1 哈希、树的哈希(在git add 期间生成)和提交消息文本。除非你有一个非常长的提交信息,否则没关系。
    • 我明白了。在add 操作期间,您仍在对整棵树进行哈希处理。除非最初的答案明确避免了这一步,否则它应该仍然是相关的。
    • @Tordek:好吧,您正在散列当前目录的新创建树,然后您需要所有父目录的新树对象,直到根目录。但不影响提交时间,只影响git add
    • 是的,这就是答案。我使用 git commit -am 提交文件。然后我使用 git commit -m 来测试和 time -p 来记录使用情况。我少了 0.6 个。
    猜你喜欢
    • 2019-11-29
    • 2011-05-19
    • 2012-01-07
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多