初学者使用Subversion(SVN)进行版本跟踪
什么是Subversion?
Subversion绝不是唯一存在的版本控制系统,替代品包括Git(由Linux内核创始人Linus Torvalds创建),Mercurial和PerForce等。话虽如此,它是免费的之一,它已经成熟并且在世界范围内被广泛使用。
什么是版本控制?
版本控制是保存项目在某个时间点的状态的过程。这种过程通常用于管理软件开发,因此工作可以继续改进项目或者添加功能,同时能够跟踪自上次总体保存点以来发生了什么变化。详细地说,这种过程对单个人可能有用,而对于一组都在同一项目上工作的人则更为有用。这是因为,通常,当一个团队作为一个团队工作时,职责是分布的,并且不同的人会改变项目的不同方面。没有版本控制机制,要使每个人都与其他人保持最新的工作变化保持同步非常困难。
术语
仓库
存储库是保存来自各个位置的所有数据的位置。从客户的角度来看,在Subversion的世界中,服务器是保存项目数据库的服务器。该数据库包含项目中所有的文件及其所有以前的版本。
修订版
创建存储库时,其修订号为零(0)。每次执行提交时,此数字都会增加一(1)。版本号对于存储库是全局的。也就是说,即使对于该特定提交,该文件中没有任何更改,存储库中的各个文件也没有单独的修订号。
工作副本
工作副本是特定版本的本地副本(或者签出)。通常,此版本在签出时是最新版本(也称为头像),但可以要求使用以前的版本。用户可以使用本地副本进行他/她想要的任何操作,但前提是他们知道在最坏的情况下他们可以再次签出代码。此外,此副本是私人的。这是因为除非我们更新或者提交副本,否则我们将看不到其他人的更改,也不会看到他们的更改。
更新和解决冲突
可以更新本地工作副本。也就是说,如果签出了某个版本,并且在工作时,存储库中的版本已更新,则可以将工作副本更新为最新版本。实际上,在更新到最新版本以匹配存储库之前,服务器将阻止我们提交更改。这样做是为了迫使我们在考虑将更改提交给存储库之前,在本地解决冲突。
合并中
合并是指将更改的代码混合到一个版本中的过程。它还可能需要解决冲突。
提交
提交是将对本地副本所做的更改重新合并到存储库中的过程。这是过程中最危险的部分,因为我们所做的更改可能会影响使用同一存储库的其他人。这就是为什么通常在经过考虑后,在团队达成共识之后,并且在解决任何合并冲突之后才进行此操作的原因。
工作流程
从用户的角度来看,使用Subversion时最基本的工作流程是:
1.签出现有代码(通常是头部)。
2.进行更改,添加文件并通常开发代码。
3.更新到最新版本,以确保本地副本与存储库中的更新同步。
4.如有必要,在本地合并并解决冲突。
5.将合并的更改提交到存储库中。
6.转到。
让我们开始
安装客户端
为了能够使用Subversion,我们需要在计算机上安装客户端。
在Linux上
我们只需要安装该软件包。在Ubuntu / Mint上,这可以通过以下方式完成:
sudo aptitude install subversion
在DD-WRT上
如果遵循了如何在家庭路由器(DD-WRT)上安装其他软件的方法,则只需发出以下命令即可安装svn客户端:
opkg update; opkg install subversion-client
在Windows上
虽然我们非常讨厌,但用户可能会开始忘记GUI有时甚至存在,但并不是每个人都有。如果要使用Windows客户端连接到SVN存储库,到目前为止,最受欢迎的是Tortoise。要使用它,只需下载程序并按常规的下一步安装方式安装。
创建存储库
虽然我们不会在本指南中详细介绍如何设置Subversion服务器,但对于初学者来说,使用Google替代方案并不是一个不错的开始。要创建Google存储库:
前往Google Code托管网站并创建一个新项目。
在下一页中,填写必填字段,然后选择要颠覆的版本控制系统的类型。注意:在为项目选择一个之前,我们可能希望浏览一下Google提供的许可之间的区别。
单击创建项目。
签出工作副本
创建项目后,我们应该能够在"源"选项卡中找到有关如何访问它的说明。
关于Google代码的好处是,它将为项目启用匿名只读版本。如果我们不想处理创建自己的项目的麻烦,则可以匿名签出此作者的资料库。
关于hotfortech项目的一个注释:该项目将包装在iGiftIdea(我个人使用)上的DD-WRT中的功能,以及一些个人调整。尽管该项目旨在与theitroad上发表的文章配合使用,但这仍然是我的私人项目。就是说,它非常适合我的Buffalo路由器(AR71xx架构),我个人的想法很容易发生。
在Linux / DD-WRT上
创建要在DD-WRT上使用的目录,该目录可以是:
mkdir -p /jffs/svn; cd /jffs/svn
Linux上的完整命令包括SVN命令本身,checkout指令,存储库的地址以及要检出的目录。创建一个空目录并执行以下命令:
svn checkout http://hotfortech-dd-wrt.googlecode.com/svn/trunk/ hotfortech-dd-wrt-read-only
请注意,在上面的示例中,只读版本已签出。如果选择创建自己的存储库,则需要使用httpS链接。
在Windows上
由于tortoise是一个shell扩展,因此我们需要使用Windows文件浏览器的上下文菜单(单击鼠标右键)来使用它。实际上,如果尝试从开始菜单调用它,则会得到:
创建一个空目录。
右键单击它以弹出上下文菜单。
选择SVN Checkout:
将项目链接(如果有的话)复制并粘贴到URL文本框中:
根据项目的大小,这可能需要一段时间,但是当Checkout完成时,我们应该会看到类似以下内容的信息:
我们可能会开始开发。
更新并合并工作副本
如果我们正在与同事一起处理代码,或者我们自己正在从多个位置(例如笔记本电脑,台式机甚至路由器)更新代码,则在提交最新更改之前必须先更新工作副本。
在Linux / DD-WRT上
在这些POSIX系统上执行此命令的命令很简单:
svn up
在Windows上
右键单击工作目录,然后选择" SVN更新":
如果遇到冲突,请尝试按照屏幕上的说明进行操作,然后根据自己的判断来解决这些问题。
提交更改
就是这样,我们应该没有冲突,并准备好使用所做的更改来更新存储库。
这里要注意的一点是,将日志消息添加到提交是一种常见的做法,以便能够轻松地回想为什么进行更改。实际上,Google的存储库使这成为提交的强制性准备工作。
在Linux / DD-WRT上
这是我对hotfortech项目所做的提交(将其升级到版本19)的示例:
svn commit -m “updated to reflect new ant-ads pack link”
在Windows上
右键单击工作目录,然后选择SVN Commit:
我们应该被一个允许我们注意日志消息的窗口欢迎:
点击确定,当提示我们输入密码时,输入Google生成的密码。
如果提交成功,我们应该看到以下内容:
就是这样,我们应该能够像BOSS一样进行提交。