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

oschina 投递于 04/23 11:20 (共 10 段, 翻译完成于 04-25)
阅读 2605
收藏 21
3
加载中

1. 引言

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

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

1.1. 编辑

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

Tocy
Tocy
翻译于 04/23 13:43
0

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}'

琪花亿草
琪花亿草
翻译于 04/25 09:58
0

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

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

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

雪落无痕xdj
翻译于 04/23 20:10
1

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

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

琪花亿草
琪花亿草
翻译于 04/25 11:45
1

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

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

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

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

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

雪落无痕xdj
翻译于 04/23 20:17
0

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

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

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

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

Tocy
Tocy
翻译于 04/23 17:38
0

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

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

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

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

Tocy
Tocy
翻译于 04/23 13:51
0

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

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

3.1. GitHub镜像

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

kevinlinkai
kevinlinkai
翻译于 04/23 14:14
0

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
kevinlinkai
翻译于 04/23 14:26
0

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
翻译于 04/23 20:26
0
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(6)

习家家天下
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.
eechen
eechen

引用来自“bigpigeon”的评论

我就不说sqlite的语法有多反人类了,建表时,有AUTOINCREMENT的primary key必须在field中指定PRIMARY KEY和AUTOINCREMENT,而多primary key又只能用PRIMARY KEY(k1,k2)的方法声明
#SQLiteStudio# 这款基于Qt开源跨平台的SQLite图形管理工具,你值得拥有.
Zero__One
Zero__One
第一次看到世界上还有叫Fossil的版本控制系统
Raymin
Raymin
1. Fossil 和 SQLite 的作者是同一个人。
2. 用的人最多的,不一定是最适合你的。
开源前端工程师
开源前端工程师
只有大佬才敢diss大佬
bigpigeon
bigpigeon
我就不说sqlite的语法有多反人类了,建表时,有AUTOINCREMENT的primary key必须在field中指定PRIMARY KEY和AUTOINCREMENT,而多primary key又只能用PRIMARY KEY(k1,k2)的方法声明
返回顶部
顶部