Git

关于 - 小巧快速

  1. 分支和合并
  2. 小巧快速
  3. 分布式
  4. 数据保证
  5. 暂存区
  6. 免费和开源
  7. 商标

小巧快速

**Git 速度很快**。使用 Git,几乎所有操作都在本地执行,这使其在与服务器不断通信的集中式系统中具有巨大的速度优势。

Git 是为了处理 Linux 内核而构建的,这意味着它从一开始就必须有效地处理大型仓库。Git 是用 C 语言编写的,减少了与高级语言相关的运行时的开销。速度和性能一直是 Git 从一开始的设计目标。

基准测试

让我们看看常见的操作如何与 Subversion 相比,Subversion 是一个常见的集中式版本控制系统,类似于 CVS 或 Perforce。越小越快。

提交 A
git
svn
提交 B
git
svn
Diff 当前
git
svn
Diff 最近
git
svn
Diff 标签
git
svn
克隆
git*
git
日志 (50)
git
svn
日志 (全部)
git
svn
日志 (文件)
git
svn
更新
git
svn
Blame
git
svn
大小
git
svn

为了测试,在同一可用区设置了大型 AWS 实例。Git 和 SVN 安装在两台机器上,Ruby 仓库被复制到 Git 和 SVN 服务器,并在两台服务器上执行常见操作。

在某些情况下,命令不完全匹配。在这里,尝试匹配最低公分母。例如,“commit” 测试还包括 Git 推送的时间,尽管大多数情况下您不会在提交后立即推送到服务器,而 SVN 中这两个命令无法分离。

所有这些时间都以秒为单位。

操作 Git SVN
提交文件 (A)添加、提交和推送 113 个修改后的文件 (2164+、2259-)0.642.604x
提交图像 (B)添加、提交和推送一千个 1 kB 的图像1.5324.7016x
Diff 当前与上次提交相比,Diff 187 个更改的文件 (1664+、4859-)0.251.094x
Diff 最近与 4 次提交相比 (269 个更改/3609+、6898-)0.253.9916x
Diff 标签将两个标签互相 Diff (v1.9.1.0/v1.9.3.0)1.1783.5771x
日志 (50)最近 50 次提交的日志 (19 kB 输出)0.010.3831x
日志 (全部)所有提交的日志 (26,056 次提交 - 9.4 MB 输出)0.52169.20325x
日志 (文件)单个文件的历史记录日志 (array.c - 483 个修订版)0.6082.84138x
更新提交 A 场景的 Pull (113 个更改的文件、2164+、2259-)0.902.823x
Blame单个文件的行注释 (array.c)1.913.041x

请注意,这是 SVN 的最佳情况 - 服务器没有负载,并且与客户端机器的千兆位连接。如果连接速度较慢,那么这些时间中几乎所有时间都将更糟糕,而许多 Git 时间不会受到影响。

显然,在许多这些常见的版本控制操作中,**Git 的速度比 SVN 快一到两个数量级**,即使在 SVN 的理想条件下也是如此。

Git 在一个地方速度较慢,即在初始克隆操作中。在这里,Git 下载的是整个历史记录,而不仅仅是最新版本。如上图所示,对于仅执行一次的操作来说,它并没有明显慢得多。

操作 Git* Git SVN
克隆Git 中的克隆和浅克隆(*) 与 SVN 中的签出相比21.0107.514.0
大小 (MB)克隆/签出后客户端数据和文件总大小(以 MB 为单位)181.0132.0

同样有趣的是,客户端数据的大小非常相似,即使 Git 还拥有项目整个历史的每个文件的每个版本。这说明了它在客户端压缩和存储数据方面的效率。

scroll-to-top