集中式代码管理的核心是服务器,事实上,SVN的版本库的确是一种文件服务器,但不是“一般”的文件服务器。SVN版本库的特别之处在于,它会记录每一次改变:每个文件的改变,甚至是目录树本身的改变,例如文件和目录的添加、删除和重新组织。一般情况下,客户端从版本库中获取的数据是文件系统树中的新数据。但是客户端也具备查看文件系统树以前任何一个状态的能力。版本控制系统的核心问题,设计用来记录和跟踪数据变化的系统。
二、在Windows下使用Subversion的客户端程序SVN
1,Subversion体系结构
采用了B/S与C/S相结合的方式。B/S结构,通过浏览器访问仓库。C/S结构,安装Tortoise SVN后,访问仓库。
2, 安装SVN时注意
svn服务器有独立服务器和借助apache运行2种运行方式。存储版本数据有BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统) 两种方式。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。下载安装SVN成功后,在档案管理内按下鼠标右键可以看到:
大部分的Tortoise SVN的操作都是透过档案管理员及鼠标右键可以完成了。
假设您的要放置Repository的地方是E盘。您需要先建立一个空的目录(文件夹) svn_repo。SVN没有限定Repository目录名称,您可以建立任何您自己喜欢的名称,建议勿使用非英文的档名。透过您的档案管理员,在E:svn_repo的图标上,按鼠标右键后,选择TortoiseSVN->Create repository here,如图:
使用的Repository数据库格式选择FSFS,直到出现SVN repository成功的建立的提示。接下来是要把你的档案备份进来。日后,只要需要使用这个repository,我们可以使用file:///E:/SVN_REPO表示它。SVN是透过这种URL的方式与Repository取得联系的。各种URL的格式如下:
file:///磁盘驱动器|/repository所在目录/子目录
http://账号@服务器名称/ repository所在目录/子目录
https://账号@服务器名称/ repository所在目录/子目录
svn+ssh://账号@服务器名称/ repository所在目录/子目录
其中,http表示使用一般的超文字传输通讯协议。https表示使用加密的超文字传输通讯协议。svn+ssh表示透过SSH加密通讯的管道,进行存取。
3,建立一个Working目录
所谓的Working目录,是平常用来存放工作档案的地方。通常我们会等到自己的工作做的一个段落的时候再进行备份。所以我们平常都是在 Working目录下面工作,等到适当时机在commit到repository中。举例来说,我们在D盘下面建立一个名为working的空的文件夹,在档案管理员中按右键,选择SVN checkout,看到如下的画面:
首先我们要填入的是repository的位置,对于SVN来说,repository的位置都是URL。Checkout directory这个字段指向您的working目录。确认后按下OK按钮即可。您将会看到working目录下面多了一个名为.svn的目录(这个目录是隐藏的) 。 SVN会在您的工作目录下,以及其子目录下建立这个.svn子目录。注意,不要进去或改动.svn目录下的任何内容,否则会造成SVN无法正常运作。
由于原来的repository是空的,所以working目录也是空的。如果您现在checkout的是一个已经有内容的repository,您将会看到working目录下面现在多了许多目录及档案。如果您要在一个已经存在的SVN Server上面checkout出上面的档案,只需要给定正确的URL以及working目录的名称,可以取得指定的档案及目录了。
4,新增档案及目录到Repository中
假设您开发的程序将放在前面建立的working目录下面的my_ prj子目录。编辑好档案后,在my_prj目录上面,按鼠标右键,选择TortoiseSVN->Add,如图:
接着,TortoiseSVN会把准备要加入的档案及目录,显示给您看。打勾的是等下要被加入到Repository中的。如果您有某些档案或是目录不想在这次加入,您可以让该项目不要被勾选。如此,它不会被加入到Repository去。 注意:Add的动作并未真正的将档案放到Repository中。仅仅是告知SVN准备要在Repository中放入这些档案。此时,查看这些档案,应该会看到一个白色红底的惊叹号在档案文件夹的下方,表示您的working目录中的档案与Repository中的档案还没有同步。我们要多一个commit的动作,让这些档案真正的放入到 Repository中。在my_prj目录上或是my_prj目录内的空白处按下鼠标右键,选择SVN commit。如下的窗口出现:
在这个窗口中,下半部会列出一个清单,让您清楚的了解到哪些档案要被commit到repository中。如果您有档案不想在这个时候commit到Repository,您可以取消选取的档案。 在档案列表的上方的Message栏里输入本次commit的目的,这是十分重要的字段,当您commit的次数很多时,可以靠这个讯息知道版本与版本之间的差异。到先前的folder中,确定所有的档案图标都有绿色勾勾在上面,这样代表您的档案都正确无误的到repository中。有时候,因为Windows本身的问题,您可能会看到有些图标没有变成绿色的勾勾,多按F5几次,可以解决这个问题。
NOTE:新增的档案要经过提交(Commit)的动作才回真正的放入Repository中。
5,更新档案及目录
由于版本控制系统多半都是由许多人共同使用,所以同样的档案可能还有人会去进行编辑。为了确保您工作目录中的档案与Repository中的档案是同步的,建议您在编辑前都先进行更新的动作。在想要更新的档案或目录图标上按鼠标右键,并且选择SVN Update。会显示有哪些文件更新了。如果没有看到档案更新的相关信息,这表示您的目录中的档案已经是新的,无须进行更新。
有时我们需要回溯至特定的日期或是版本,这时可以利用SVN的Update to revision的功能。在这个Update窗口中,您可以选择更新到新版本(HEAD)。也可以选择更新到某个指定的版本(Revision)。或按下Show log按钮,回顾历史版本。