维护SQLite的私有分支(二十六)

news2025/1/11 6:54:10

 返回: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 节中所述的更改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1606967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端css中transition的使用

前端css中transition的使用 一、前言二、transition的4个属性三、例子1.源码12.源码1运行效果 四、结语五、定位日期 一、前言 CSS中的transition(过渡),根据字面意思就可以理解成一种变化状态的过程。当我们有一个方形,我们想让…

深度学习数据处理——对比标签文件与图像文件,把没有打标签的图像文件标记并删除

要对比目录下的jpg文件与json文件,并删除那些没有对应json文件的jpg文件,这个在深度学习或者机器学习时常会遇到。比如对一个数据集做处理时,往往会有些图像不用标注,那么这张图像是没有对应的标签文件的,这个时候又不…

MySQL 的事务概念

事务概念 MySQL事务是一个或者多个的数据库操作,要么全部执行成功,要么全部失败回滚。 事务是通过事务日志来实现的,事务日志包括:redo log和undo log。 事务状态 事务有以下五种状态: 活动的部分提交的失败的中止的…

模拟相机拍照——对文档进行数据增强

一. 背景 假如我们有一个标准文件,我们对其进行文字识别、版面分析或者其他下游任务就比较容易。然而,当图片是手机拍照获取的,图片中往往有阴影、摩尔纹、弯曲。 那么,如何通过标准的文档,获得类似相机拍照的图片呢&…

24华中杯C题10页论文+代码+思路

问题1:估算传感点的曲率 问题2:重构平面曲线 问题3:重构平面曲线并分析误差 详细资料如图所示 10页论文 需要的宝子们:2024华中杯A题思路数据可执行代码参考论文https://mbd.pub/o/bread/ZZ6am5dw 2024华中杯B题思路数据可执行…

C语言简单的数据结构:双向链表的实现

目录: 1.双向链表的结构和初始化1.1双向链表的结构1.2双向链表的初始化 2.双向链表的相关操作2.1双向链表的尾插、打印和头插2.11双向链表的尾插2.12双向链表的打印2.13双向链表的头插 2.2双向链表的尾删和头删2.21双向链表的尾删2.22双向链表的头删 2.3双向链表查找…

Linux 网络测速

1.开发背景 网络测速,为了测试开发板的网络速度是否达标的通用测试方法 2.开发需求 搭建 iperf3 ,在 ubuntu 下安装服务端,在板卡上安装客户端,服务端和客户端互发 3.开发环境 ubuntu20.04 嵌入式开发板(debian 千…

了解MySQL InnoDB多版本MVCC(Multi-Version Concurrency Control)

了解MySQL InnoDB多版本MVCC(Multi-Version Concurrency Control) 在数据库管理系统中,多版本并发控制(MVCC)是一种用于实现高并发和事务隔离的技术。MySQL的InnoDB存储引擎支持MVCC,这使得它可以在提供高…

22长安杯电子取证复现(检材一,二)

检材一 先用VC容器挂载,拿到完整的检材 从检材一入手,火眼创建案件,打开检材一 1.检材1的SHA256值为 计算SHA256值,直接用火眼计算哈希计算 9E48BB2CAE5C1D93BAF572E3646D2ECD26080B70413DC7DC4131F88289F49E34 2.分析检材1&am…

Spring (三) 之Aop及事务控制

文章目录 目标 一、AOP 思想和重要术语(理解)1、需求问题2、AOP3、AOP 术语 二、AOP 实现及 Pointcut 表达式(了解)1、AOP 规范及实现2、AspectJ3、AspectJ 切入点语法(掌握)3.1、切入点语法通配符3.2、切入…

Linux 网络基本命令

一、查看网络信息 ifconfig 二、关闭网络 ifdown ens33 (有的电脑不一定是ens33,具体看上图画线的地方) 三、开启网络 ifup ens33

【电路笔记】-数字逻辑门总结

数字逻辑门总结 文章目录 数字逻辑门总结1、概述2、逻辑门真值表3、总结 数字逻辑门有三种基本类型:与门、或门和非门。 1、概述 我们还看到,数字逻辑门具有与其相反或互补的形式,分别为“与非门”、“或非门”和“缓冲器”,并且…

RK3588 Android13 鼠标风格自定义动态切换

前言 电视产品,客户提供了三套鼠标图标过来,要求替换系统中原有丑陋风格且要支持动态切换, 并且在 TvSetting 中要有菜单,客户说啥就是啥呗,开整。 效果图 test framework 部分修改文件清单 png 为鼠标风格资源图片,这里就不提供了,可自由找一个替换一下就行 framew…

C语言野指针【入门详解】

目录 一、什么是野指针 二、野指针的成因 2.1 指针未初始化 2.2 指针越界访问 2.3 指针指向的空间释放 三、如何规避野指针 3.1 初始化指针 3.2 小心越界访问 3.3 当指针不用时,及时置为空 3.4 避免返回局部变量的地址 *结语: 希望这篇关于指…

[SWPUCTF 2021 新生赛]jicao、easy_md5

目录 一、[SWPUCTF 2021 新生赛]jicao 什么是JSON? JSON语法: [SWPUCTF 2021 新生赛]jicao 二、[SWPUCTF 2021 新生赛]easy_md5 PHP弱类型和强类型 1.弱类型比较() 2.强类型比较() [SWPUCTF 2021 …

OceanBase数据库日常运维快速上手

这里为大家汇总了从租户创建、连接数据库,到数据库的备份、归档、资源配置调整等,在OceanBase数据库日常运维中的操作指南。 创建租户 方法一:通过OCP 创建 确认可分配资源 想要了解具体可分配的内存量,可以通过【资源管理】功…

华为OD机试 - 结队编程(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…

Google DeepMind: Many-Shot vs. Few-Shot

本文介绍了如何通过增大上下文窗口,利用大型语言模型(LLMs)进行多实例上下文学习(Many-Shot In-Context Learning,ICL)的方法。主要描述了现有的几实例上下文学习方法虽然在推理时能够通过少量例子学习&…

MicroSIP电话呼叫软件使用及配置方法

MicroSIP是一款开源的SIP协议电话软件,它可以帮助你在计算机上进行语音和视频通话。下面是关于如何使用和配置MicroSIP的一些基本步骤: 安装MicroSIP 从MicroSIP官方网站下载适合你操作系统的安装包23。 解压下载的文件,并运行安装程序。 …

可以与 FastAPI 不分伯仲的 Python 著名的 Web 框架

正如你所理解的,任何领域都不可能停止进步,不断使用相同的工具意味着不思进取。这一点在信息技术领域,尤其是网络开发行业非常明显。 关于网络框架,不论是 Django 和 Flask 等传统框架还是 Python 的新型高级框架,一直…