为什么当 repo 变大时 git 操作会变慢

2024-01-01

我知道当 repo 变大时 git 会变慢。
但为什么?
由于 git 将文件存储为单独的目录和文件.git,我不知道为什么操作变慢。让我们来看看commit手术。最近,我从 master 克隆了 webkit 存储库和分支,然后我提交了一个2k文件到分支。但我觉得它比我在我的小仓库上做的要慢。
因为我没有通读git源代码,我猜提交操作会损害将文件存储到磁盘、插入提交日志、更新索引和更新HEAD文件的 sha 值。

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

为什么它很慢? 谁能给我说明一下吗?
Thanks.

有些答案很有帮助,但不太令人信服,如果能提供一些代码片段来支持您,那就太好了。


提交树的时间应该是恒定的,因为它只需要创建一个新的提交对象(git write-tree)并更新HEAD ref.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么当 repo 变大时 git 操作会变慢 的相关文章

  • Sublime Text 2 的 git 提交错误[重复]

    这个问题在这里已经有答案了 我正在 Udacity 上学习 如何使用 Git 和 GitHub 课程 我正在按照示例进行操作 但遇到了问题 我自己尝试通过谷歌搜索和反复试验来解决问题大约两个小时 我认为是时候在 StackOverflow
  • 如何使用 Groovy 获取自上次成功构建以来 Jenkins 的提交信息?

    如何编写自定义 groovy 脚本以轻松操作自上次成功构建以来所有提交的数据 在 gradle maven 步骤之后添加新的构建步骤 gt 执行系统 groovy 脚本 适配代码 import com tikal jenkins plugi
  • 如何使用和理解wso2 git仓库?

    我刚刚开始对wso2感兴趣 我正在寻找移动设备管理解决方案 所以我测试了 wso2 EMM 但我发现了一些限制 我想知道是否可以自己实现 我的问题是我完全迷失在 wso2 git 存储库中 有没有我错过的指导书或逻辑 如果有人帮助我解决这个
  • GIT:向非当前分支添加本地更改

    我通常会遇到这样的情况 我做了一些本地更改 却发现我在错误的分支上进行了更改 因此我需要在提交之前切换分支 问题是当有本地更改时我无法切换分支 有办法做到这一点吗 显然 我可以复制更新的文件 切换分支 然后将它们复制回来 但这看起来并不聪明
  • 如何保持 git 存储库的公共和私有版本同步?

    我正在 Github 上发布一个开源 Rails 应用程序 可能是 MIT 许可证 我还想维护一个项目的私人分支 分支 我们将使用它作为付费服务的一部分 在这种情况下组织存储库的最佳方式是什么 而且 当我有两个项目的更新时 如何保持项目同步
  • 将存储库移至另一台计算机

    我已将存储库从计算机 A 移至计算机 B 我已验证等待推送的提交仍在 B 上 但整个存储库 每个文件 均未暂存 我不想添加它们并将它们作为提交推送 因为从复制存储库到粘贴它 我没有更改每个文件 当我移动存储库时 它只有等待推送的提交 而不是
  • egit:设置gitignore忽略所有eclipse项目文件

    我在 github 上有一个项目 我想从中删除所有与 eclipse 相关的文件 并允许克隆它的人使用他们想要的任何 ide 这是该项目 https github com vedi0boy Archipelo https github co
  • 禁止 Gerrit 推送到 refs/for/master

    我已经更新了所有项目昨天获得访问权限 人们说他们今天早上无法将更改推送到存储库 当我恢复访问权限后 他们仍然无法将更改推送到存储库 只能clone工作正常 在将更改推送到远程存储库时 它表示 remote rejected HEAD gt
  • 使用 Git 部署时压缩 JS/CSS 文件

    我对 git 有点陌生 另外 这是我第一个自动化部署过程的项目 到目前为止 能够做到这一点真是太幸福了git push dev并上传文件 复制配置文件等 现在 当我推送到我的开发服务器时 我想缩小 JS CSS 文件 我正在考虑在服务器上安
  • Git 会删除空文件夹吗? [复制]

    这个问题在这里已经有答案了 我已提交一个项目并将其推送到我的 GitHub 帐户 该项目包含以下部分文件结构 server conf some files java lib java 和 lib 文件夹为空 从 GitHub 下载我的项目时
  • 使用 Git 处理 subversion:忽略对跟踪文件的修改

    我目前正在使用 subversion 存储库 但我正在使用 git 在我的计算机上本地工作 它使工作变得更加容易 但也使 subversion 存储库中发生的一些不良行为变得非常明显 这给我带来了问题 拉取代码后 有一个有点复杂的本地构建过
  • 如何设置“阅读文档”以使 Sphinx autodoc 选项发挥作用?

    我的项目不是使用 autodoc 构建的 我遇到了关于我的项目未在 autodoc 中构建的常见问题 https read the docs readthedocs org en latest faq html my project isn
  • 返回到 Github Desktop 中的上一个提交

    我正在尝试使用 GitHub Desktop 即 GUI 应用程序 而不是命令行 返回到先前的提交 在同一分支上 我认为这是一个核心功能 因为它是首先使用源代码控制的主要原因 我可以看到可以恢复提交 但这并不是我真正想要的 因为它创建了一个
  • git filter-repo:它可以在特定分支上使用吗?

    我正在读什么git filter repo可以做 因为我想用它做一个小实验 我有这个存储库 我只想从中获取一个目录的历史记录 比如说 master 但我不想为主人工作 我想创建一个新分支 例如filter repo test然后让git f
  • Windows 上的 git 忽略文件名大小写更改 [重复]

    这个问题在这里已经有答案了 我有一个reactjs应用程序 我正在将所有文件名标准化为小写以符合Nodejs 最佳实践 https devcenter heroku com articles node best practices stic
  • 如何将更改提交到另一个预先存在的分支

    我刚刚对一个分支进行了更改 如何将更改提交到另一个分支 我正在尝试使用 git checkout the commmit to the changed branch b the other branch 但是 我认为这不是正确的做法 因为在
  • git update-index --no-assume-unchanged 不起作用

    我设置了assume unchanged咬了几个文件 现在我想取消它们 但这不起作用 gt git update index no assume unchanged Gemfile gt git ls files v grep Gemfil
  • Git 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • 如何防止克隆我的 github 存储库?

    我正在尝试找到一种方法来防止从 github 存储库克隆 例如 我有一个私有存储库 有些人在该存储库中工作 在公司计算机中 团队中的每个人都设置了授权级别 当我在 github 上为某个用户设置授权时 该存储库可在他 她自己的 github
  • Jenkins groovy - 如何从最新提交中检索标签?

    从中获取最新提交branchName 我们运行下面的代码 treeMapData git branch branchName credentialsId credential url gitLabServer projectName rep

随机推荐

  • 留意 Wicket 的更新房产

    在我当前的项目中 我们需要实现一种让短信发送者通过上传属性文件来管理检票口消息 国际化的方法 另请参阅这个问题 管理国际化检票口应用程序 https stackoverflow com questions 5140429 administr
  • Visual Studio Code 显示“需要 Java 11 或更高版本才能运行。请下载并安装最新的 JDK”

    今天 Visual Studio Code 开始向我显示一个弹出窗口 需要 Java 11 或更高版本才能运行 请下载并安装最新的 JDK 我需要使用 JDK 8 在 Apache Beam 上工作 这是最后支持的版本 我一直在努力解决这个
  • 使用 JOOQ 查找 PostgreSQL 中时间戳(以秒为单位)之间的差异

    我需要使用 JOOQ 查找两个时间戳之间的差异 以秒为单位 我已经使用原始 SQL 查看了 StackOverflow 上的一些答案 但是我没有找到使用 JOOQ 实现它的方法 以下是我发现的一些使用原始 SQL 的解决方案 查找 Post
  • Stripe.js - 解决无法读取未定义的属性“stripeToken”

    我正在使用 Stripe 构建我的第一个基本 Express 应用程序Checkout 该应用程序呈现正确 但当我提交表单时 我在两个方面都收到错误stripeToken and stripeEmail 我不知道为什么它没有通过 有什么帮助
  • Android中如何获取对应的文件图标?

    每个文件类型都与其特定的相关联icon 现在如果我选择一些文件名 xxx那么我如何能够选择与关联的图标 xxx而不是未知文件的默认图标 原始问题 我怎样才能得到 txt or doc or png文件图标 比如我现在选择filename p
  • C# 反序列化 json

    我有如下 json data name 123 pwd 123 name 456 pwd 456 name 789 pwd 789 duration 5309 query myquery timeout 300 Using http jso
  • 如何配置Tomcat使用1个以上的CPU?

    我们有一个新的客户端 目前我们正在对具有 100 个并发 http 线程的生产类服务器进行压力测试 使用 Jmeter 问题是 即使我们有 2 个 Xeon 处理器 每个 CPU 有 4 个核心 总 共 8 个核心 我只能看到 tomcat
  • 多个输出路径(Java - Hadoop - MapReduce)

    我做了两项 MapReduce 作业 我希望第二项作业能够将结果写入两个不同目录中的两个不同文件中 我想要某种类似于 FileInputFormat addInputPath multiple input path 的东西 但对于输出 我对
  • 回购同步重复路径问题

    我已经为oneplus构建cyanogenmod有一段时间了 我已经用boeffla内核替换了库存内核 但是截至今天我遇到了一个问题 之前能够与新内核重新同步 一切都说现在当我进行回购同步时 致命 home noahvt BuildServ
  • 在android中创建缩放位图时保持图像质量

    我有一张尺寸为 960x800 的图像 我试图让它填满屏幕 我目前的做法是加载完整的 960x800 位图并使用源和目标Rect对象 到目前为止 我的目标矩形为 480x320 屏幕尺寸 源矩形为 960x800 background Bi
  • 如何使用“...”(变量)参数? [复制]

    这个问题在这里已经有答案了 可能的重复 C 和 C 中的可变参数函数是什么 https stackoverflow com questions 3870128 what are variadic functions in accordanc
  • 放大一条曲线,使其可以沿着 R 图中的另一条曲线显示

    我有一个 R 图 我想在其中展示IF the red curve 现在位于图的底部 未正确显示 乘以一个常数 它可以match the blue curve目前显示 我想知道我怎样才能最好scale up the 红 曲线以便它准确地mat
  • Apache Derby - java.sql.SQLException:无法启动数据库

    首先 这是我第一次使用 Apache Derby 我正在使用 netbeans 愿意使用嵌入式 apache derby 并且我按照以下教程配置和安装数据库 然后 我使用项目属性将 derby jar 文件附加到我的项目中 http net
  • Angular2 - ngOnDestroy() 未在类似路线上调用

    我有一个 Angular2 应用程序 其路线如下 path component ContentComponent children path folder folderId resolve currentFolder CurrentFold
  • 使用 CefSharp v65 加载本地 html/css/js 文件

    我正在尝试在 WinForms 中使用 CefSharp v65 加载本地 html css js 文件 我找到了与此相关的其他堆栈溢出帖子 但他们都没有使用新的内置版本FolderSchemeHandlerFactory 而不是实现他们自
  • 如果第二个输入字段已填充,则禁用输入字段

    完全是个新手 我只想知道当第二个输入字段被填充时如何动态禁用输入字段 eg td td
  • 将列中的所有行更新为新值

    抱歉 我确信这个问题已经被问过很多次了 但我已经四处寻找一个很好的例子 但一直没能找到 我想运行一种方法将值插入到表中所有行的特定列中 为了让您了解我正在使用的方法和查询 这是我的学生表的工作更新方法 public void updateS
  • 拉丁字符检查

    那里有一些类似的问题 但没有一个是完全相同的或者有适合我的答案 我需要一个javascript函数来验证文本字段是否包含所有有效的拉丁字符 因此没有cryllic或中文 只有拉丁文 具体来说 基本拉丁语 不包括 C0 控制字符 Latin
  • 为 python 2.7 安装 MySQLdb 返回错误

    pip install MySQL python 1 2 4b4 tar gz 在 Python 2 7 ubuntu 18 04 上返回此错误 你能帮助我吗 pip install MySQL python 1 2 5 zip Proce
  • 为什么当 repo 变大时 git 操作会变慢

    我知道当 repo 变大时 git 会变慢 但为什么 由于 git 将文件存储为单独的目录和文件 git 我不知道为什么操作变慢 让我们来看看commit手术 最近 我从 master 克隆了 webkit 存储库和分支 然后我提交了一个2