Maintaining Private Branches Of SQLite
Maintaining Private Branches Of SQLite
1.介绍
2.基本理念
3.程序
3.1.获取软件
3.2.创建一个项目库
3.3.在化石中安装SQLite基线
3.4.创建私人分支
3.5.向私人分支中的代码添加自定义项
3.6.整合新的公有SQLite版本
3.7.将公有SQLite更新合并到私有分支中
3.8.进一步更新
4.变化
1.介绍
SQLite旨在满足大多数开发人员的需求,而无需进行任何更改或定制。当需要更改时,通常可以使用启动时间(1)或运行时间(2)(3)(4)配置方法或通过编译时选项来完成。应用程序开发人员需要编辑SQLite源代码才能将SQLite合并到产品中的情况非常罕见。
我们调用SQLite源代码的自定义修改,这些源代码是为了将一个应用程序用作“私人分支”而持有的。当需要私有分支时,应用程序开发人员必须承担保持私有分支与公共SQLite源同步的任务。这很乏味。它也可能很棘手,因为虽然SQLite文件格式和发布的接口非常稳定,但SQLite的内部实现变化非常迅速。对于任何给定的SQLite点发行版,成百上千行代码可能会发生变化。
本文概述了保持SQLite的私有分支与公共SQLite源代码同步的一种可能方法。当然,维护私营部门有很多方法。没有人被迫使用这里描述的方法。本文并不试图对私人分支机构的维护者强加特定的程序。本文的重点在于提供一个维护私有分支的流程示例,该分支可用作设计最适合每个单独项目环境的流程的模板。
2.基本理念
我们建议使用化石软件配置管理系统建立两个分支。一个分支(“公共分支”或“trunk”)包含已发布的SQLite源,另一个分支是包含为该项目自定义的代码的专用分支。无论何时创建SQLite的新公开版本,该版本都会添加到公共分支中,然后将这些更改合并到私有分支中。
本文档提出使用化石,但任何其他分布式软件配置管理系统,如单调或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)的变化不相容。在这种情况下,维护者将不得不手动解决冲突。希望冲突不会经常出现。私人编辑保持在最低限度时,冲突发生的可能性较小。
上面的循环可以重复多次。该图在圆圈(6)中显示了第三个SQLite版本3.6.17。私有分支维护者可以进行另一次合并,以便将从(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 open private-project.fossil
如果你愿意,你可以有多个同一个项目的签出。你可以将存储库“克隆”到不同的机器上,以便多个开发人员可以使用它。查看化石网站获取更多信息。
3.3.在Fossil中安装SQLite基线
在上一步中创建的存储库最初是空的。下一步是加载基线SQLite版本 - 上图中的circle(1)。
首先以您使用它的任何形式获取SQLite的副本。您获得的公共SQLite应尽可能接近您的私有编辑副本。如果您的项目使用SQLite合并,则获取合并副本。如果您使用预处理的独立源文件,请改为使用这些文件。将所有源文件放在上一步创建的结帐目录中。
公共SQLite版本中的源代码使用unix行结尾(ASCII代码10:“仅新行”,NL)和空格而不是制表符。如果您将要更改以windows样式行结束的行(ASCII代码13,10:“carriage-return”和“newline”; CR-NL),或者如果要将空格缩进更改为制表符缩进,请进行更改现在
在您检查基线之前。如果公共部门和私营部门之间的差异很小,合并过程才会奏效。如果源文件的每一行都在专用分支中更改,因为您已从NL更改为CR-NL行尾,则合并步骤将无法正常工作。
让我们假设你正在使用合并源代码。如下所示将基线添加到项目中:
fossil add sqlite3.c sqlite3.h
如果您使用单独的源文件,请命名所有源文件,而不仅仅是两个合并源文件。完成此操作后,按如下方式提交您的更改:
fossil commit
系统会提示您提供签入评论。说出你喜欢的一切。提交完成后,您的基线将成为存储库的一部分。如果你愿意,下面的命令可以在“时间线”上看到:
fossil ui
最后一个命令与我们之前运行的命令是相同的“ui”命令。它启动一个迷你网络服务器运行并将您的网络浏览器指向它。但是这一次我们不需要指定存储库文件,因为我们位于一个checkout内,所以化石可以找出它自己的存储库。如果你想输入资源库文件名作为第二个参数,你可以。但它是可选的。
如果您不想使用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
通常情况下,化石将在私人和公共分支机构之间切换时修改结帐中的所有文件。但在这一点上,这两个分支中的文件是相同的,因此不需要进行修改。
3.5.向私人分支中的代码添加自定义项
现在是时候对SQLite进行私有的自定义修改了,这是本次练习的重点。使用“ fossil update private
”命令切换到专用分支(如果您不在其中),然后在您的文本编辑器中调出源文件,并进行所需的任何更改。完成更改后,使用以下命令提交这些更改:
fossil commit
系统会再次提示您输入描述更改的提交。然后提交会发生。该提交会在存储库中创建一个与上图中的circle(3)对应的新签入。
现在公共和私人分支是不同的,你可以运行“ fossil update trunk
”和“ fossil update private
”命令,并看到化石确实在分支之间来回切换时会改变结帐中的文件。
请注意,在上图中,我们将私有编辑显示为单个提交。这只是为了清晰呈现。没有什么可以阻止你做几十个或几百个单独的微小更改并分别进行。事实上,做出许多小改变是首选的工作方式。在单次提交中完成所有更改的唯一原因是它使图更易于绘制。
3.6.整合新的公有SQLite版本
假设经过一段时间(通常大约一个月),SQLite的新版本发布了:3.6.16。你会想把这个新的公共版本的SQLite整合到公共分支(干线)的仓库中。为此,首先将您的存储库更改为trunk:
fossil update trunk
然后下载新版本的SQLite源并覆盖结帐中的文件。
如果您将NL更改为CR-NL行结束更改或空格更改原始基准中的缩进更改,请对新的源文件进行相同的更改。
一切准备就绪后,运行“ fossil commit
”命令检查更改。这会在上图中创建圆圈(4)。
3.7.将公有SQLite更新合并到私有分支中
下一步是将公共分支中的更改转移到私人分支。换句话说,我们想要在上图中创建圆圈(5)。首先使用“ fossil update private
” 切换到私人分支。然后输入这个命令:
fossil merge trunk
“合并”命令尝试将圆圈(1)和(4)之间的所有更改应用于本地签出中的文件。请注意,圆圈(5)尚未创建。您需要运行“提交”来创建圆圈(5)。
合并中可能存在冲突。当同一行代码在圆圈(1)和(4)与圆圈(2)和(3)之间以不同方式更改时会发生冲突。合并命令将宣布任何冲突,并将在输出中包含两个版本的冲突行。您将需要调出包含冲突的文件并手动解决冲突。
在解决冲突之后,许多用户在提交到版本库之前都喜欢编译和测试新版本。或者你可以先提交并在稍后测试。无论哪种方式,运行“ fossil commit
”命令检入圆圈(5)版本。
3.8.进一步更新
随着SQLite的新版本发布,请重复步骤3.6和3.7,将新版本中的更改添加到专用分支。如果需要,可以在两个发行版之间对私人分支进行其他私人更改。
4.变化
自从这篇文档首次撰写以来,规范的SQLite源代码已经从古老的CVS系统转移到了http://www.sqlite.org/src的Fossil存储库中。这意味着如果你正在使用规范的SQLite源代码(而不是合并源代码文件,sqlite3.c和sqlite3.h),那么你可以简单地通过克隆官方仓库来创建一个私有仓库:
fossil clone http://www.sqlite.org/src private-project.fossil
这个命令都创建了新的存储库,并用最新的SQLite来填充它。然后您可以创建一个私人分支,如3.4节所述。
当通过克隆创建私有存储库时,整合新的公共SQLite版本也变得更加容易。要从公共SQLite存储库中获取所有最新的更改,只需进入开放式检出并执行以下操作:
fossil update
然后继续将“trunk”中的更改与您的“私有”更改合并在一起,如3.7节所述。
SQLite在公共领域。