返回:SQLite—系列文章目录
上一篇:SQLite、MySQL 和 PostgreSQL 数据库速度比较(本文阐述时间很早比较,不具有最新参考性)(二十五)
下一篇:SQLite数据库中JSON 函数和运算符
1. 引言
SQLite旨在满足大多数开发人员的需求,而无需任何 更改或自定义。当需要更改时,他们通常可以 使用启动时 (1) 或运行时 (2) (3) (4) 配置方法完成 或通过编译时选项。应用程序非常罕见 开发人员需要编辑 SQLite 源代码才能 将SQLite整合到产品中。
我们调用对保存的 SQLite 源代码的自定义修改 对于单个应用程序的使用,一个“专用分支”。当私人 分支变得必要,应用程序开发人员必须承担 使私有分支与公共分支保持同步的任务 SQLite 源。这很乏味。它也可能很棘手,因为虽然 SQLite文件格式和发布的接口非常稳定, SQLite的内部实现变化非常快。数百或 对于任何给定的 SQLite 点版本,数千行代码可能会发生变化。
本文概述了保留私有分支的一种可能方法 与公共 SQLite 源代码同步的 SQLite。 当然,维护私有分支的方法有很多种。 没有人被迫使用这里描述的方法。 本文无意将特定程序强加于人 私有分支的维护者。本文的重点是提供 维护专用分支的一个过程的示例,该过程可以 用作设计最适合的流程的模板 每个项目的情况。
2. 基本理念
我们建议使用化石软件配置管理系统来建立两个分支。一个分支(“公共分支”或“主干”) 包含已发布的 SQLite 源,另一个分支是 包含为项目自定义的代码的专用分支。 每当 SQLite 发布新的公开版本时,该版本都会添加到 公共分支,然后将更改合并到专用分支中。
本文件建议使用化石, 但任何其他分布式软件配置管理系统,如 Monotone 或 Mercurial(又名“HG”)或 Git 也可以起到同样的作用。 概念是一样的, 尽管程序的具体细节会有所不同。
右图说明了这个概念。 一个从标准的SQLite版本开始。对于 举例来说,假设一个人打算创建一个 SQLite 版本 3.6.15 的私有分支。在 图示:这是版本 (1)。这 维护者制作基线的精确副本 SQLite 进入分支空间,显示为版本 (2)。 请注意,(1) 和 (2) 完全相同。然后 维护者将私有更改应用于 版本 (2) 导致版本 (3)。换言之, 版本 (3) 是 SQLite 版本 3.6.15 加上编辑。
稍后,SQLite 版本 3.6.16 发布,如下所示 图中的圆圈 (4)。在这一点上,私人 分支维护者执行合并,该合并将所有 从 (1) 到 (4) 的更改,并将这些更改应用于 (3).结果是版本(5),即SQLite 3.6.16 加上编辑。
可能存在合并冲突。换句话说,它可能 从(2)到(3)的更改与 从(1)更改为(4)。在这种情况下,维护者将 必须手动解决冲突。希望冲突 不会经常出现。冲突不太可能发生 当私有编辑保持在最低限度时发生。
上面的循环可以重复很多次。这 图显示了第三个 SQLite 版本,3.6.17 英寸 圆圈 (6)。私有分支维护者可以做 另一个合并以合并更改 从 (4) 移动到 (6) 进入专用分支,导致 在版本 (7) 中。
3. 程序
本文档的其余部分将引导读者完成 维护专用分支所需的步骤。总体思路 与上述相同。本节仅提供更多内容 细节。
我们再次强调,这些步骤并不是唯一的 维护专用分支的可接受方法。这种方法 是众多之一。使用本文档作为准备的基线 特定于项目的程序。不要害怕尝试。
3.1. 获取软件
Fossil 是一个计算机程序 在使用之前,必须将其安装在您的计算机上。 幸运的是,安装化石非常容易。化石是单一的 “*.exe”文件,您只需下载并运行。要卸载化石, 只需删除 EXE 文件即可。安装和入门的详细说明 化石可在化石网站上找到。
3.2. 创建项目仓库
创建一个化石存储库来托管专用分支 以下命令:
fossil new private-project.fossil
你可以用任何你喜欢的名字来称呼你的项目。“.fossil” 后缀是可选的。对于本文档,我们将继续调用 项目“private-project.fossil”。请注意,private-project.fossil 是一个普通的磁盘文件(实际上是一个 SQLite 数据库),它将包含完整的项目历史记录。 您只需复制项目即可备份项目 一个文件。
如果要配置新项目,请键入:
fossil ui private-project.fossil
“ui”命令将导致 fossil 运行一个微型内置 Web 服务器 并启动您的网络浏览器指向 在该 Web 服务器上。您可以使用 Web 浏览器来配置您的项目 以各种方式。有关其他信息,请参阅化石网站上的说明 信息。
创建项目存储库后,创建一个打开的检出 项目,通过移动到要保留所有 项目源代码和键入:
fossil open private-project.fossil
如果需要,可以对同一项目进行多次签出。 您可以将存储库“克隆”到不同的机器上,以便多个 开发人员可以使用它。有关更多信息,请参阅化石网站。
3.3. 在 Fossil 中安装 SQLite 基线
在上一步中创建的存储库最初是空的。这 下一步是加载基线 SQLite 版本 - 图中的圆圈 (1) 以上。
首先获取您使用的任何形式的 SQLite 副本。 您获得的公共 SQLite 应该与您的私人编辑尽可能接近 尽可能复制。如果您的项目使用 SQLite 合并,则 获取合并的副本。如果使用预处理的 源文件,请改为获取这些文件。将所有源文件放在 在上一步中创建的签出目录。
公共 SQLite 版本中的源代码使用 unix 行结尾 (ASCII 代码 10:仅限“换行符”,NL)和空格而不是制表符。如果你愿意 将行尾更改为 Windows 样式的行尾 (ASCII 代码 13、10:“回车”和“换行符”;CR-NL)或者如果你会 将空格缩进更改为制表符缩进,请在签入基线之前立即进行更改。合并过程将仅起作用 好吧,如果公共分支和私人分支之间的差异是 极小。如果源文件的每一行都更改了 private branch,因为您从 NL 更改为 CR-NL 行结尾,然后 合并步骤将无法正常工作。
假设您使用的是合并源代码。 将基线添加到项目,如下所示:
fossil add sqlite3.c sqlite3.h
如果使用单独的源文件,请改为命名所有源文件 仅两个合并源文件。完成此操作后,提交您的 更改如下:
fossil commit
系统将提示您输入签到评论。想说什么就说什么。 提交完成后,您的基线将成为存储库的一部分。 如果您愿意,可以使用以下命令在“时间轴”上查看此内容:
fossil ui
最后一个命令与我们之前运行的“ui”命令相同。它 启动正在运行的迷你 Web 服务器,并将 Web 浏览器指向它。但 这次我们不必指定存储库文件,因为我们是 位于结帐内,因此 Fossil 可以找出 本身。如果要键入存储库文件名作为第二个 参数,你可以。但这是可选的。
如果您不想使用 Web 浏览器查看新的签到, 您可以使用以下命令从命令行获取一些信息 这些:
fossil timeline
fossil info
fossil status
3.4. 创建私有分支
上一步在上图中创建了圆圈 (1)。 此步骤将创建圆圈 (2)。运行以下命令:
fossil branch new private trunk -bgcolor "#add8e8"
此命令将创建一个名为“private”的新分支(您可以使用 如果您愿意,可以使用不同的名称)并为其分配背景颜色 浅蓝色(“#add8e8”)。如果需要,可以省略背景颜色, 尽管拥有独特的背景确实更容易分辨 时间轴上显示的“主干”(公共分支)的分支。你 可以更改专用分支或公共的背景颜色 分支(“主干”),如果您愿意,可以使用 Web 界面。
上面的命令创建了新分支。但您的结帐是 仍然在主干上 - 您可以通过运行命令看到这一事实:
fossil info
要将您的退房更改为私人分行,请键入:
fossil update private
您可以再次运行“info”命令以验证您是否在 私有分支。若要返回到公共分支,请键入:
fossil update trunk
通常,fossil 会在切换时修改您结帐时的所有文件 在私人和公共分支之间。但是在这一点上,文件 在两个分支中是相同的,因此无需进行任何修改。
3.5. 向私有分支中的代码添加自定义项
现在是时候对SQLite进行私有的自定义修改了 这是本练习的重点。切换到专用分支 (如果您还没有)使用“Fossil Update Private” 命令,然后在文本编辑器中调出源文件并制作 无论您想进行什么更改。一旦你完成制作 更改,请使用以下命令提交这些更改:
fossil commit
系统将再次提示您输入一个提交,描述您的 变化。然后将发生提交。提交将创建一个新的签入 在与上图中的圆圈 (3) 相对应的存储库中。
现在公共分支和专用分支不同,您可以运行 “Fossil Update Trunk”和“Fossil Update Private” 命令,并看到 Fossil 确实更改了结帐中的文件 当您在分支之间来回切换时。
请注意,在上图中,我们将私有编辑显示为单个 犯。这只是为了清晰地呈现。没有什么可以阻止的 你从做几十个或几百个单独的微小的改变和承诺 每个都单独。事实上,进行许多小的改变是首选的方式 工作。在一次提交中执行所有更改的唯一原因 是它使图表更容易绘制。
3.6. 合并新的公共 SQLite 版本
假设一段时间后(通常大约一个月)一个新版本的 SQLite 发布:3.6.16。您将希望合并这个新的 SQLite 的公共版本进入公共分支中的存储库( 树干)。为此,请先将存储库更改为主干:
fossil update trunk
然后下载新版本的 SQLite 源并覆盖 签出中的文件。
如果将 NL 更改为 CR-NL,则更改行尾或制表符空格 缩进更改原始基线,进行相同的更改 添加到新的源文件。
一切准备就绪后,运行“fossil commit”命令以 签入更改。这将在上图中创建圆圈 (4)。
3.7. 将公共 SQLite 更新合并到私有分支中
下一步是将公共分支中的更改移动到 私有分支。换句话说,我们想在 上图。首先,使用 “化石更新私人”。然后键入以下命令:
fossil merge trunk
“merge”命令尝试应用 将 (1) 和 (4) 圈到本地结帐中的文件。请注意, 圆圈 (5) 尚未创建。您需要运行 “提交”创建圆圈 (5)。
可能是合并中存在冲突。冲突 当同一行代码以不同的方式更改时发生 圆圈 (1) 和 (4) 与圆圈 (2) 和 (3)。merge 命令将 宣布任何冲突,并将包括冲突的两个版本 输出中的行。您将需要调出包含以下内容的文件 冲突并手动解决冲突。
解决冲突后,很多用户喜欢编译和测试 新版本,然后再提交到存储库。或者你可以提交 先测试,后测试。无论哪种方式,都运行“化石提交” 签入圆圈 (5) 版本的命令。
3.8. 进一步更新
随着新版本的 SQLite 发布,重复步骤 3.6 和 3.7 到 将新版本中的更改添加到专用分支。 其他私有更改可以是 如果需要,在两次发布之间的私有分支上制作。
4. 变化
由于本文档首次编写,规范的 SQLite 源代码 已从古老的 CVS 系统移至 SQLite: Documentation 的 Fossil 存储库。这意味着,如果您正在使用 规范的 SQLite 源代码(与合并源代码相反) 文件,sqlite3.c 和 sqlite3.h),然后您可以创建私有存储库 只需克隆官方存储库:
fossil clone https://www.sqlite.org/src private-project.fossil
此命令既会创建新存储库,又会填充 所有最新的SQLite代码。然后,您可以创建专用分支,作为 在第 3.4 节中描述。
通过克隆创建私有存储库时,合并新的 公共SQLite版本也变得容易得多。要拉入所有 来自公共 SQLite 存储库的最新更改,只需移动到 打开结账并执行以下操作:
fossil update
然后继续将“trunk”中的更改与“private”合并 第 3.7 节中所述的更改。