开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
为什么 SQLite 不使用 Git 进行版本管理? - 技术翻译 - 开源中国社区

为什么 SQLite 不使用 Git 进行版本管理? 【已翻译100%】

标签: SQLite Git
oschina 推荐于 4个月前 (共 10 段, 翻译完成于 04-25) 评论 6
收藏  
22
推荐标签: SQLite Git 待读

1. 引言

SQLite不使用Git版本控制系统。SQLite使用Fossil作为替代,它是一个专门为支持SQLite而设计和编写的版本控制系统。

人们有时会问,为什么SQLite不像其他人那样使用Git版本控制系统。本文试图回答这个问题。另外,在第3节中,本文向Git用户提供了如何轻松访问SQLite源代码的提示。

1.1. 编辑

为了提高清晰度,明晰关注点和疑虑,并修复Hacker NewsRedditLobsters上发现的错误,本文进行了多次修订。完整的编辑历史可以在https://sqlite.org/docsrc/finfo/pages/whynotgit.in中找到。

Tocy
 翻译得不错哦!

2.SQLite不使用Git的几个原因

SQLite不使用Git的原因可以用一句话概括:SQLite的主开发者发现Git令人难以接受。如果你喜欢Git而且想用它,那也没什么问题。我不喜欢Git,更喜欢用我认为更好的东西。
下面是几个我不喜欢Git的原因:

2.1. Git在check-in时很难发现后继(派生)

Git允许你可以很容易及时回退版本。如果有出分支的最后的check-in,Git可以让你看到check-in的所有的先驱。但是换个方向对Git来说很难做到。如果给出一些历史的check-in,在Git中找到下一个是什么是个相当大的挑战。这是可以完成的,但是很难而且人们很少这么做。Git的公共接口,例如GitHub,不支持这个功能。

在Git中找到一个check-in的后继,不是不可能的。只是很困难。例如,在stackoverflow页面有一些命令来在unix中找到一个check-in的后继:

git rev-list --all --parents | grep ".\{40\}.*.*" | awk '{print $1}'

琪花亿草
 翻译得不错哦!

这个命令序列对于记忆和输入来说是很重要的。(如果经常使用的话,你会想要创建一个bash别名或短shell脚本。)此外,它也不是完全一样的东西。上面的命令给出了一个后续列表,而没有显示分支结构,这对于理解所发生的事情非常重要。相反的, Fossil提供了这个链接中的展现方式https://sqlite.org/src/timeline?d=8a439a6dda390d74&n=15这对分析历史变更的后果有很大的帮助。

实际上,这并不是仅仅为了找到签入的后续行为。事实上,后续行为在Fossil中很容易找到,这意味着信息在Fossil提供的网页中无处不在。举个例子:每一个Fossil签入信息页(例子)都有一个小的“上下文”图表,显示了直接的先导行为和签入者的后续行为。这可以帮助用户保持更好的态势感知,并且提供了有用的功能,比如可以按顺序单击下一步的签入。另一个例子:Fossil很容易显示特定的签入(示例)的上下文,这再次有助于提高态势感知和对代码中正在发生的事情做深入理解。

在Git中,所有上述都是可能的,只要有正确的扩展和工具,并使用正确的命令。但这并不容易,所以很少能做到。因此,开发人员对代码中所发生的事情的了解较少。

雪落无痕xdj
 翻译得不错哦!

2.2 Git的脑力模式的是复杂的且毫无意义

Git的复杂使人从开发中的软件分心出来。Git的用户需要记住下面所有的东西:
  1. 工作目录
  2. 暂存区的“索引” 
  3. 本地最新版本
  4. 远端最新版本的本地副本
  5. 实际的远端最新版本
针对移动和对比所有上述位置之间的内容,Git拥有相关命令(或者命令的选项)。
相反的,Fossil用户只需要考虑他们的工作目录和他们所工作的check-in。相对省下了60%的分心。每个开发者的脑循环都是有限数。Fossil需要更少的脑循环去做相关操作,因此它解放了脑力资源,可以将注意力放在正在开发软件上。
Git和Fossil的一个共同用户 在HN中写道
Fossil让我在完成了所有事情之后,脑子还有空间…只使用一条命令同步到服务器…。我使用git的时候脑子对这方面从来不会还有空间。

琪花亿草
 翻译得不错哦!

2.3. Git没有跟踪历史分支的名称

Git保持签入序列的完整有向图(DAG)。但是分支标签是本地信息,当分支关闭时,它不会被同步,也不会被保留。这使得对历史分支的回顾变得单调乏味。

作为一个例子,考虑一下由GitHub和Fossil所呈现的SQLite的单一历史分支:

从Fossil的视角可以清楚地看到,这个分支最终被合并到主干中。它显示了分支的起始位置,它显示了主干上的变化合并到分支的两个场合。GitHub没有显示这一点。事实上,在试图弄清楚到底发生了什么时,GitHub的显示基本上是无用的。

许多读者已经推荐了一些用于Git的第三方界面,以便更好地展示历史开发活动。也许其中一些确实比原生的Git和GitHub更好,不过它们都将由于Git并没有在同步中保存历史分支名称受到阻碍而且即使其他工具更好,但有必要使用第三方工具来获取所需的信息,这一事实说明核心系统还不够好。

雪落无痕xdj
 翻译得不错哦!

2.4. Git需要更多的管理方面的支持

Git是复杂的软件。我们需要某种安装程序将Git放在开发人员工作站上,或者升级到Git的更新版本。建立一个Git服务器是有意义的。我们可以使用GitHub,但这引入了另一个第三方依赖和一个集中式的服务,这降低了Git的“分布式”的关键优势。GitHub有各种免费的替代品,比如GitLab,但是这些替代品也有很多依赖项,需要完成大量的服务器配置。

相比之下,Fossil是一个单独的二进制文件,可通过将其放置到$PATH中来完成安装。这一个二进制包含核心Git,以及GitHub和/或GitLab的所有功能。它管理着一个社区服务器,包含wiki和错误跟踪,为用户提供包下载,登录管理等等,并且不需要额外的软件。

更少的管理意味着程序员花更多时间在软件上工作(在这种情况下是SQLite),并用更少的时间去熟悉版本控制系统。

Tocy
 翻译得不错哦!

2.5. Git提供较差的用户体验

以下https://xkcd.com/1597/卡通是一种夸张的说法,但却是亲身体会:

让我们回到现实吧。很少有人认为Git提供的用户体验并不理想。很多底层实现都在用户界面中中展示了。界面非常糟糕,甚至有一个模仿网站会生成假的git man页面。

设计软件是很难的。它需要很多的聚焦。一个好的版本控制系统应该为开发者提供帮助,而不是挫败。在过去的十年中,Git在这方面已经变得更好,但它仍然有很长的路要走。因此,SQLite的开发人员计划现在继续使用不同的版本控制系统。

Tocy
 翻译得不错哦!

3.一个访问SQLite源代码的Git用户指南

如果你是一个忠实的Git用户,你仍然可以轻松访问SQLite。 本节提供了一些关于访问源码的提示。

3.1. GitHub镜像

在GitHub的https://github.com/mackyle/sqlite地址上有一个SQLite源代码树的镜像。这个镜像由用户“mackyle”维护,该用户与官方SQLite开发团队没设任何关系,官方团队并不认识他。虽然我们不了解mackyle,但我们发现他在维护镜像方面做得非常出色也很受欢迎。所以,如果你想访问GitHub上的SQLite源代码,我们推荐他的镜像的源代码。

kevinlinkai
 翻译得不错哦!

3.2 Web访问

SQLite Fossil Repository包含用于下载任何历史版本Tarball,ZIP文件或SQLite文件的链接。这些下载的URL很简单,可以很容易地结合到自动化工具中。格式是:

https://sqlite.org/src/tarball/ VERSION / sqlite.tar.gz

只需要将带有说明的VERSION替换为要下载版本。这个VERSION可以是特定导入的加密哈希名称的前缀,或者一个分支的名称(在这种情况下获取分支的最新版本)或者用于特定导入的一个标签,如“version-3.23.1”:

https://sqlite.org/src/tarball/version-3.23.1/sqlite.tar.gz

要获取最新版发布版,用“release”替换VERSION,像这样:

https://sqlite.org/src/tarball/release/sqlite.tar.gz

获取最新的主分支导入,使用“trunk”替换VERSION

https://sqlite.org/src/tarball/trunk/sqlite.tar.gz

等等。对于ZIP文件,SQLite文件,只需要将 "/tarball/" 替换为"/zip/" 或者 “/sqlar/“,也可以将下载后的文件名后缀改为“.zip”或者“.sqlar。

kevinlinkai
 翻译得不错哦!

3.3. Fossil上手

Fossil很容易安装和使用。下面是unix的步骤。(Windows相似。)

  1. 下载自包含的Fossil可执行文件 https://fossil-scm.org/fossil/uv/download.html ,把可执行文件放在你的$PATH的某个地方。

  2. mkdir ~/fossils

  3. fossil clone https://sqlite.org/src ~/fossils/sqlite.fossil

  4. mkdir ~/sqlite; cd ~/sqlite

  5. fossil open ~/fossils/sqlite.fossil

现在,您可以键入“./configure;make“(或在Windows上使用MSVC,”nmake/f makefile.msc")。

要将您的签出更改为不同版本的Fossil,使用“update”命令:

fossil update  VERSION

使用“trunk”来获得最新的SQLite版本。或者使用加密散列名称的前缀,或者某个分支或标记的名称。看看这个链接https://fossil-scm.org/fossil/doc/trunk/www/checkin_names.wiki ,可以获得哪些名称可以用于VERSION的更多建议。

在~/sqlite目录内使用“fossil ui”命令 来调出网站的本地副本。

关于Fossil的其他文件可以在这个链接里找到。https://fossil-scm.org/fossil/doc/trunk/www/permutedindex.html

不要害怕探索和试验。如果没有登录,你无法提交你所做的任何更改,所以你不会破坏项目的。

4. 另请参阅

其他关于Fossil和Git的页面包括:

雪落无痕xdj
 翻译得不错哦!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
评论(6)
Ctrl/CMD+Enter

我就不说sqlite的语法有多反人类了,建表时,有AUTOINCREMENT的primary key必须在field中指定PRIMARY KEY和AUTOINCREMENT,而多primary key又只能用PRIMARY KEY(k1,k2)的方法声明
只有大佬才敢diss大佬
1. Fossil 和 SQLite 的作者是同一个人。
2. 用的人最多的,不一定是最适合你的。
第一次看到世界上还有叫Fossil的版本控制系统

引用来自“bigpigeon”的评论

我就不说sqlite的语法有多反人类了,建表时,有AUTOINCREMENT的primary key必须在field中指定PRIMARY KEY和AUTOINCREMENT,而多primary key又只能用PRIMARY KEY(k1,k2)的方法声明
#SQLiteStudio# 这款基于Qt开源跨平台的SQLite图形管理工具,你值得拥有.
SQLite的每个文件之前都有这样一段话

The author disclaims copyright to this source code. In place of
a legal notice, here is a blessing:

May you do good and not evil.
May you find forgiveness for yourself and forgive others.
May you share freely, never taking more than you give.
顶部