维护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.mfbz.cn/a/557567.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)

从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1) 段子手168 1、微服务的注册中心 注册中心可以说是微服务架构中的”通讯录”,它记录了服务和服务地址的映射关系。 在分布式架构中服务会注册到这里&am…

美易官方:美债美元黄金继续涨?

全球金融市场波动加剧,投资者对避险资产的需求不断升温。在这一背景下,“投行老将”们纷纷发表观点,认为避险情绪尚未结束,美债、美元和黄金等避险资产有望继续上涨。 巴克莱一位资深投资银行家表示,由于担心中东冲突升…

在Linux系统中搜索当前路径及其子目录下所有PDF文件中是否包含特定字符串

目录标题 方法一:pdfgrep方法二:使用find和xargs与pdftotext(将PDF转换为文本)组合,然后用grep搜索 方法一:pdfgrep pdfgrep -ri "rockchip" .方法二:使用find和xargs与pdftotext&am…

动手学深度学习11 权重衰退

动手学深度学习11 权重衰退 1. 权重衰退2. 代码实现3. QA 视频: https://www.bilibili.com/video/BV1UK4y1o7dy/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 电子书: ttps://zh-v2.d2l.ai/chapter_multilayer-perceptrons/wei…

Mamba 学习

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

视频太大怎么压缩变小?8种方法随时压缩视频大小

视频太大怎么压缩变小?视频压缩方式分为两种,有损压缩和无损压缩,什么是有损什么是无损压缩,什么时候视频用无损压缩更好?什么时候用有损压缩更好?如何调整视频参数实现基本无损压缩? 今天就借助…

小红书笔记写作方法和技巧分享,纯干货!

很多小伙伴感叹小红书笔记流量就是一个玄学,有时精心撰写的笔记却没有人看,自己随便写的笔记却轻轻松松上热门。实际上你还是欠点火候,小红书笔记写作是有一套方法和技巧的,总归是有套路的,如果你不知道,请…

数仓建模—物理数据模型

文章目录 数仓建模—物理数据模型什么是物理数据模型物理数据模型示例如何构建物理数据模型物理数据模型与逻辑数据模型逻辑模型和物理模型之间有什么关系逻辑数据模型的好处物理数据模型的好处数仓建模—物理数据模型 前面我们讲了数据模型和逻辑数据模型,你可以参考前面的文…

【JAVA进阶篇教学】第四篇:JDK8中函数式接口

博主打算从0-1讲解下java进阶篇教学,今天教学第四篇:JDK8中函数式接口。 在 Java 8 中,函数式接口是指只包含一个抽象方法的接口。这种接口可以用作 Lambda 表达式的类型,从而使得函数式编程在 Java 中变得更加方便和灵活。下面…

【题解】NC398 腐烂的苹果(多源BFS)

https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34?tpId196&tqId40529&ru/exam/oj 从每个腐烂的苹果开始使用广度优先遍历&#xff08;bfs&#xff09; class Solution {int n, m;int dx[4] {0, 0, 1, -1};int dy[4] {1, -1, 0, 0};vector<v…

C++ STL 容器 deque

目录 1. deque 对象1.1 内部表示1.2 底层数据结构1.3 分段连续1.4 重新分配 2. deque 迭代器 本文测试环境 gcc 13.1 1. deque 对象 1.1 内部表示 deque 为我们提供了一个双端队列&#xff0c;即可以在队头进行 push、pop&#xff0c;可以在队尾进行 push、pop deque 容器擅…

电弧的产生机理

目录&#xff1a; 1、起弧机理 2、电弧特点 3、电弧放电特点 4、实际意义 1&#xff09;电力开关装置 2&#xff09;保险丝 1、起弧机理 电弧的本质是一种气体放电现象&#xff0c;可以理解为绝缘情况下产生的高强度瞬时电流。起弧效果如下图所示&#xff1a; 在电场的…

pyplot+pandas实现操作excel及画图

1、安装jupyter lab pip install jupyterlab # 启动 建议在指定的项目文件夹下 开启cmd窗口并执行 jupyter lab 启动后会自动打开浏览器访问 2、安装依赖 pip install matplotlib pip install xlrd pip install pandas 3、读取excel import pandas as pddf pd.read_excel(hi…

一文带你了解什么是国际短信

什么是国际短信&#xff1f; 国际短信&#xff0c;也叫国际短消息&#xff0c;是指中国大陆以外的国家或地区运营商与用户之间发送和接收短信息的业务&#xff0c;是一种实现国际间沟通交流与信息触达的便捷方式&#xff0c;可广泛应用于出海游戏、跨境电商、在线社交、实体零…

「探索C语言内存:动态内存管理解析」

&#x1f320;先赞后看&#xff0c;不足指正!&#x1f320; &#x1f388;这将对我有很大的帮助&#xff01;&#x1f388; &#x1f4dd;所属专栏&#xff1a;C语言知识 &#x1f4dd;阿哇旭的主页&#xff1a;Awas-Home page 目录 引言 1. 静态内存 2. 动态内存 2.1 动态内…

比特币上最有价值的BRC-20,你了解吗?

BRC20 是比特币网络上发行同质化Token 的实验性格式标准&#xff0c;由domodata 于2023 年3 月8 日基于 Ordinal 协议创建。 类似于以太坊的 ERC20 标准&#xff0c;它规定了以太坊上发行 Token 的名称、发行量、转账等功能&#xff0c;所有基于以太坊开发的 Token 合约都遵守这…

计算机视觉——DiffYOLO 改进YOLO与扩散模型的抗噪声目标检测

概述 物体检测技术在图像处理和计算机视觉中发挥着重要作用。其中&#xff0c;YOLO 系列等型号因其高性能和高效率而备受关注。然而&#xff0c;在现实生活中&#xff0c;并非所有数据都是高质量的。在低质量数据集中&#xff0c;更难准确检测物体。为了解决这个问题&#xff…

axios 请求中断和请求重试

请求中断​ 请求已经发出去了&#xff0c;如何取消掉这个已经发出去的请求&#xff1f; 微信扫码体验一下 &#xff08;说不定哪天你就用得上&#xff09; 用途&#xff1a; 比如取消正在下载中的文件点击不同的下拉框选项&#xff0c;向服务器发送新请求但携带不同的参数&…

解决系统报错:此应用无法在你的电脑上运行

在开发过程中不知从何时起&#xff0c;使用电脑时过程中不断的都显示“此应用无法在你的电脑上运行”&#xff0c;让人非常恶心&#xff0c;一直以为是系统误操作了什么或误安了软件 百度的答案就是让你找到报错的软件用兼容模式运行。而我连报错的软件都不知道&#xff0c;让人…

盲人盲杖:科技革新,助力视障人士独立出行

在我们的社会中&#xff0c;盲人朋友们以其坚韧的精神风貌&#xff0c;生动诠释着生活的多样与可能。然而&#xff0c;当我们聚焦于他们的日常出行&#xff0c;那些普通人视为寻常的街道、路口&#xff0c;却成为他们必须面对的严峻挑战。如何切实提升盲人盲杖的功能&#xff0…
最新文章