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

 返回: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.mzph.cn/diannao/554.shtml

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

相关文章

汇编语言 实验10.1

汇编语言 实验10.1 assume cs:code,ds:datasgdatasg segmentdb welcome to masm!,0 datasg endsstack segmentdw 0,0,0,0,0,0,0,0 stack endscode segment ;代码段start: mov dh,8mov dl,3mov cl,2mov ax,datasgmov ds,axmov si,0call show_strmov ax,4c00h ;程序返回int 21hs…

已经下载了pytorch,但在正确使用一段时间后出现No module named torch的错误

问题描述 使用的是叫做m2release的虚拟环境,在此环境下使用conda list可以发现是存在pytorch的,但是运行代码时却报No module named torch的错误。 解决方案 想尝试卸掉这个pytorch重新装一次,但是想卸载会提示找不到,想重新…

Java八股文4

Linux篇 1.free命令-查看内存状态 free命令用于显示内存状态,它可以提供关于系统内存使用情况的详细信息。这个命令会显示出内存的使用情况,包括实体内存、虚拟的交换文件内存、共享内存区段,以及系统核心使用的缓冲区等。 其中,参…

每三人拥有一辆车!车载工业平板电脑五大硬性要求

在今年7月初,公安部发布2022年上半年全国机动车和驾驶人统计数据,数据显示,截至2022年6月底,全国机动车保有量达4.06亿辆,其中汽车3.10亿辆。此外,目前全国拥有驾驶证的人数高达4.92亿人,其中汽…

一文读懂电阻并联电路和串联电路的特性

电阻并联电路是最基本的并联电路,所有的电路都可以转化为电阻串联电路和电阻并联电路来了解其工作原理。并联电路和串联电路具有完全不同的特性。它们是完全不同的电路,不能相互等效(电阻并联电路图)。 串联电路 特点与特性&…

探索半导体测试领域:哲讯TCC智能化管理系统的应用与优势

在半导体行业中,封装和测试环节是至关重要的一环。半导体封装测试是指将通过测试的晶圆按照产品型号及功能需求加工得到独立芯片的过程。半导体封测包括封装和测试两个环节,封装是保护芯片免受物理、化学等环境因素造成的损伤,增强芯片的散热…

es安装中文分词器

下载地址,尽量选择和自己本地es差不多的版本 https://github.com/infinilabs/analysis-ik/releases 下载好,解压,把里面的文件放到es的plugins/ik目录下 把plugin-descriptor.properties文件里的es版本改成自己对应的 再启动es,能…

Mamba 学习

Vision Mamba U-Mamba 以后的趋势: 1.Mamba模型机机制上和transform一样,但是参数量上做了改进,可以直接替代 2.vision上可以实时处理

深入剖析跨境电商平台风控机制,探索测评安全与稳定的秘诀

在跨境电商测评市场鱼龙混杂的当下,测评过程中可能隐藏的陷阱保持高度警觉。多年的测评经验告诉我们,选择一个适合的测评系统对于项目的成功至关重要。近年来,测评技术如雨后春笋般涌现,市场上涌现出众多测评系统,覆盖…

Java 的注释

文章目录 java 的注释共有三种形式单行注释多行注释文档注释文档注释的文档需要命令进行生成GBK 不可映射问题 与大多数的编程语言一样,Java 中的注释也不会出现在可执行程序中。 因此我们可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码受…

了解光纤的最大损耗

在电信和数据传输领域,保持最佳的网络性能和可靠性至关重要。 影响网络完整性的关键因素之一是光纤中的信号丢失。信号损耗,也称为衰减损耗或光纤衰减,测量光缆输入和输出之间的光损耗量。本文将深入探讨光纤中的主要损耗,并指导您…

使用yolov5训练自己的目标检测模型

使用yolov5训练自己的目标检测模型 使用yolov5训练自己的目标检测模型1. 项目的克隆2. 项目代码结构3. 环境的安装和依赖的安装4. 数据集和预训练权重的准备4.1利用labelimg标注数据和数据的准备4.1.1 **labelimg介绍:**4.1. 2 labelimg的安装 4.2 使用labelimg4.2.1 数据准备4…

开源在线表单工具 HeyForm 使用教程

HeyForm 是一个非常出色的开源在线表单工具,可以通过直观的拖拽式编辑器,快速构建出美观实用的表单。 HeyForm 的功能非常丰富: 支持丰富的输入类型,从基础的文本、数字到高级的图片选择、日期选择、文件上传等,一应俱…

Nginx第3篇-使用ngx_http_proxy_connect_module配置https正向代理

场景 我使用python爬虫,然后需要个代理,所以就用Nginx搭了一个代理服务器。对Nginx也不太熟,慢慢摸索,搭建完之后发现只能代理http的请求,无法穿透https。几经折腾和摸索发现一个强大的HTTP代理模块:ngx_h…

配置静态IP【windows+ubuntu】

Windows配置静态IP 如下图所示,通过“网络和Internet进入设置界面”,依次操作“更改适配器选项”->选择要配置静态ip的网络“属性”->选择IPV4的属性->配置静态ip的地址、子网掩码、默认网关。默认网关应和路由器上的设置保持一致。 Ubuntu配…

SL7220线性降压恒流3.6A 外围只需两个电阻 耐压40V汽车大灯IC

概述: SL7220 是一款双路线性降压LED恒流驱动器,外围只需两个电阻,输出电流10MA-3600MA。 SL7220 内置过热保护功能,内置输入过压保护功能。 SL7220 静态电流典型值为120uA。 特点 ●输入电压范围:2.5V-40V ●电…

Matlab方程组拟合【案例源码+视频教程】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法,并提供所有案例完整源码;2.…

OpenHarmony轻量系统开发【6】驱动之ADC按键

摘要:本文简单介绍如何操作ADC去读取电压,并且实现开发板上3个ADC按键检测的功能 适合群体:适用于润和Hi3861开发板,L0轻量系统驱动开发 文中所有代码仓库:https://gitee.com/qidiyun/hihope-3861-smart-home-kit 6…

如何识别伪装IP的网络攻击

伪装IP的网络攻击是一种通过篡改或伪造IP地址,冒充合法用户或服务器,发起恶意网络请求的攻击方式。这种攻击具有极强的隐蔽性,使得受害者在遭受攻击后难以找到真实的攻击者。为了识别伪装IP的网络攻击,我们可以采取以下几种方法&a…

SpringBoot中使用Jackson序列化返回

SpringBoot中使用Jackson序列化返回 在Spring Boot应用中,使用Jackson库来处理JSON的序列化和反序列化是一种常见的做法。Jackson是一个高效的JSON处理器,广泛用于Java环境中,尤其是在与Spring框架集成时。本文将详细介绍如何在Spring Boot中…