Subversion使用手册

quanzhong

贡献于2011-12-21

字数:10865 关键词: Subversion 版本控制系统 手册

Subversion使用手册 Subversion使用手册 Subversion使用手册 目录 第一章 Subversion简介 2 1.1 什么是Subversion 2 1.2 Subversion的特性 2 1.3 什么是 TortoiseSVN 2 1.4 基本概念 3 1.4.1 什么是版本控制 3 1.4.2 版本库(repository) 3 1.4.3 工作拷贝 3 1.4.4 合并 3 第二章 Subversion的安装和配置 3 2.1 安装准备 3 2.2 安装流程 4 2.3 配置流程 4 2.3.1 创建版本库 4 2.3.2 启动SVN 4 2.3.3 svnserve的认证 5 第三章 Subversion的使用 6 3.1 SVN的访问 6 3.2 首次导入(import) 6 3.4 提交修改(Commit) 9 3.5 更新(Update) 10 3.6 合并(Merge) 11 3.7 回退(Update to reversion) 14 3.8 Branch and Tag 14 3.9 导出(Export ) 15 3.10 版本库浏览器(Repository Brower ) 15 第四章 附录 16 4.1 TortoiseSVN的一些设置 16 4.2 参考文献 16 Subversion使用手册 第一章 Subversion简介 1.1 什么是Subversion Subversion是一个自由/开源的,专门针对CVS的不足而开发的版本控制系统。Subversion是版本管理的后台系统,其核心是保存数据的档案库-repository。档案库用分层的“文件-目录”文件系统数来存储数据。连接到档案库的客户能读写数据。档案库记录了用户的每一次修改!客户端可以从档案库中提取到过去的版本。 体系结构:采用了B/S与C/S相结合的方式。 B/S结构:可以通过浏览器访问仓库。 C/S结构:安装TortoiseSVN后访问仓库。 Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作,从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。因为修改不再是单线进行,开发进度会进展迅速。此外,由于所有的工作都已版本化,也就不必担心由于错误的更改而影响软件质量—如果出现不正确的更改,只要撤销那一次更改操作即可。 1.2 Subversion的特性 l 保留大多数CVS 特性 Subversion意味着比CVS更好,它拥有CVS的大多数特性,一般说来,Subversion的接口与CVS的十分相似,除了一些有竞争性的原因我们选择了其他方式。 l 目录、重命名和文件meta-data都已经版本化 CVS经常因为缺少这些特性而被抱怨,Subversion的版本不仅仅是关注文件的内容和存在性,它也允许附加在任意文件和目录上的metadata ("properties")可以被版本化,而且提供了一种机制可以版本化文件上的“执行”许可标志。 l 提交是真实的原子操作 在整体提交之前不会有部分提交起作用的情况出现,修订号对应每次提交而不是对应每个文件,log信息与修订号附在一起,并没有和CVS一样需要冗余的地方存放。 l 本地化的客户端/服务器,分层的库设计 Subversion从一开始就是设计为客户端/服务器模式,从而免去了许多折磨着CVS的维护问题,代码是有一系列结构化的模块组成,有定义良好的接口,设计为被别的程序调用。 l 客户端/服务器双向传输区别的协议 网络协议有效的利用网络带宽,在有可能的情况下回双向传输区别(CVS的服务器向客户端传输区别,但反之不是)。 l 消耗和修改部分的大小成比例,而不是数据的大小 通常情况下,Subversion操作所耗费的时间与此次操作引起的变化成比例,而不是对这个项目改变的绝对值,这个是Subversion版本库模型的特性。 l 处理二进制文件的高效性 Subversion对于二进制文件具备同文本文件一样的高效性,这是因为它在传输和存储连续的修订版本中使用二进制的文件交换算法。 l 可解析的输出 Subversion所有的命令行客户端输出的内容都经过精心的设计,适合人们读取和自动解析;脚本化也具备较高的优先级。 1.3 什么是 TortoiseSVN TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。 Subversion使用手册 1.4 基本概念 1.4.1 什么是版本控制 简单点来说,版本控制就是数据仓库,它可以记录你对文件的每次更改。这样,就算你在昏天黑地的改了几个月后老板说不要了,还是按照过去那样,你也不会抓狂,简单的恢复版本操作就搞定一切。 1.4.2 版本库(repository) Subversion 的核心就是 repository,中文翻译成“版本库”。用于存储工作拷贝文件集的仓库,对外提供一定的接口供SVN客户端使用。对外接口可以是文件系统、SVN服务、apache插件提供的SVN服务等等。一定要区别SVN版本库和工作拷贝。版本库以典型的文件和目录结构形式文件系统树来保存信息。任意数量的客户端连接到Subversion版本库,读取、修改这些文件。客户端通过写数据将信息分享给其他人,通过读取数据获取别人共享的信息。(图1-4-1) 图1-4-1 1.4.3 工作拷贝 从SVN版本库中得到的一份工作文件集合。工作拷贝中会包含.svn文件夹,其中记录 了原始文件,当修改时也会有所发觉。一般是通过checkout来获得工作拷贝工作时就是对工作拷贝进行修改。 1.4.4 合并 将已经修改过的工作拷贝提交到SVN版本库的过程,一般是通过commit来提交你的更改。 第二章 Subversion的安装和配置 * 本手册基于 svnserve 的服务器 2.1 安装准备 Subversion下载地址 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 在打开的页面中选择一个版本下载,我们手册中使用的是带svnserve的版本,一般文件的后缀名为msi,且描述为Windows MSI installer with the basic win32 binaries - includes bindings for Apache 2.0x and 2.2x即是我们所需要的版本,现在我们下载最新的版本Setup-Subversion-1.5.3.msi Subversion使用手册 TortoiseSVN下载地址 http://tortoisesvn.net/downloads 去此页面上下载最新的版本,一般选择32bit的,后缀名为.msi的是我们需要的,那么我们下载最新的TortoiseSVN-1.5.6.14908-win32-svn-1.5.5.msi 2.2 安装流程 分别运行两个安装程序,选好路径安装即可,不用特殊配置, TortoiseSVN安装完成后需要重新启动计算机,重新启动即可。 2.3 配置流程 * 以下简称Subversion为SVN * 为了更好的说明怎么使用,我们用实际例子来解释,首先是我们的版本库的目录结构是 / ---------根目录 |---design 项目设计 |---release 已经发布的版本目录(用来放置已经可以正常使用的项目) |---trunk 开发中的项目 然后本例中有三个人,Tom和Jim是开发人员,而Jerry是设计人员。 我们将版本库放到D:\SVN\repo中。 2.3.1 创建版本库 选好想要将版本库放在哪里,比如说本例中把版本库放到D:\SVN\repo文件夹里,现在我们可以右击这个文件夹,然后在ToriseSVN的弹出菜单里选择Create repository here, 等一会后就会弹出对话框表示创建成功,默认的是FSFS的格式。 注:你可以使用 FSFS 或较老的 Berkeley 数据库(BDB)作为版本库的后端,FSFS 格式通常更快一点,还容易管理,而且可以正常运行在网络共享磁盘上 或 Windows 98 中。BDB 格式曾经简单的被认为更加稳定,因为其经过了更长时间的验证,但是既然 FSFS 已经使用了几年,这个论据已经相当不牢固了。 TortoiseSVN 不再给你创建 BDB 版本库的选择,尽管你仍旧可以使用命令行工具创建。FSFS 版本库通常很容易维护,也让我们维护 TortoiseSVN 变得更容易,因为我们不再需要处理不同 BDB 版本之间的兼容性问题。 2.3.2 启动SVN 启动SVN很简单,首先要确定你的版本库要放在哪里,接着上一步,本例中我们把版本库放在D:\SVN\repo文件夹,那么我们就在命令提示符下输入如下命令: svnserve.exe --daemon --root D:\SVN\repo svnserve将会在端口3690等待请求,--daemon选项告诉svnserve以守护进程方式运行,这样在手动终止之前不会退出,--root 选项设置根目录位置来限制访问服务器的目录,从而增加安全性和节约输入 svnserve URL 的时间,当然你也可以不不写--root选项。 使用普通用户直接运行 svnserve 通常不是最好的方法。它意味着你的服务器必须有一个用户登录,还要记着重新启动服务器后重新启动 svnserve。最好的方法是将 svnserve 作为 windows 服务运行。从 Subversion 1.4 开始,svnserve 可以安装为 windows 服务。 Subversion使用手册 在命令提示符运行如下命令: sc create svnserve binpath= "D:\worksoft\Subversion\bin\svnserve.exe --service --root D:\SVN\repo" displayname= "Subversion" depend= tcpip start= auto 注意 sc 的命令行很特殊。在 key= value 对中,key 与 = 之间不能有空格,但是在 value 之前,必须有空格。 在上面命令中svnserve为创建的服务名称,D:\worksoft\Subversion\bin\svnserve.exe为svnserve.exe所在的路径,一般在Subversion安装目录下得bin文件夹里。--root 选项设置根目录位置来限制访问服务器的目录,其他的照写即可。如果路径中含有空格,请按照下面的命令写: sc create svnserve binpath= " \"C:\Program Files\Subversion\bin\svnserve.exe\" --service --root D:\repos" displayname= "Subversion" depend= tcpip start= auto 服务安装完毕后,你需要在服务管理器中启动它(仅此一次;当服务器重启后它会自动启动)。 如果你想删除这个服务,那么(切记先停止服务!)请使用命令: sc delete svnserve 即可删除服务,svnserve为刚才创建的服务的名称。 2.3.3 svnserve的认证 默认情况下,svnserve只提供匿名用户读访问的权限,也就是说你只能从版本库中checkout和update工作拷贝,但是无法commit对工作拷贝任何更改,为了更好的使用和管理SVN,我们给SVN加入用户验证。 首先打开版本库所在的文件夹,本手册中是在D:\SVN\repo,在repo文件夹下的conf文件夹里svnserve.conf文件,在[general]下面添加一些内容,效果如下:(图2-3-1) 图2-3-1 anon-access = none 表示匿名用户无法使用 auth-access = write 表示通过用户认证的有写的权限 password-db = passwd 用户密码配置文件 authz-db = authz 用户组权限配置文件 现在访问SVN就需要用户名和密码了,我们来配置一下用户名密码,首先打开passwd文件,在文件里的[users]下面添加用户和密码,格式为:用户名 = 密码,例如: [users] Tom = 123 Jerry = 123 Jim = 123 Subversion使用手册 这样就有了两个用户,下面说说怎么控制用户的权限,我们可以同过控制用户可以不可以访问某个目录来控制权限,权限分配时,应遵守从根目录到子目录、从设置最广泛权限到最精细权限、从只读权限到读写权限设置原则,即从根目录开始设置最广泛的访问权限,然后逐步设置下属子目录的访问权限。提示:目录的访问权限既可以分配给组,也可以分配指定用户。 打开authz文件,在[groups]域里添加组,格式为:组名 = 用户名,用户名…也就是说组名后面跟着在这个组里的人,现在我们创建一个devloper组,将三个用户都加进去,我们让Tom和Jim作为开发者,而Jerry作为设计者,也就是: [groups] developer = Tom,Jim design = Jerry 然后在下面添加权限控制,我们让开发者developer这个组的人可以访问所有目录,而设计者只能访问design这个目录。 [/] #这个代表根目录 @developer = rw #r代表读,w代表写,rw代表有读和写的权限 @design = r [/design] @design = rw 在此不再做过于详细的权限控制,但是权限设置是非常必要的,你可以参照以上说明自己设计。 第三章 Subversion的使用 配置已经完毕了,下面就要开工啦。 3.1 SVN的访问 如何访问SVN请看下表: 方案 访问方法 file:// 直接版本库访问(本地磁盘或者网络磁盘)。 http:// 通过 WebDAV 协议访问支持 Subversion 的 Apache 服务器。 https:// 与 http:// 相似,但是用 SSL 加密。 svn:// 通过未认证的 TCP/IP 自定义协议访问 svnserve 服务器。 svn+ssh:// 通过认证并加密的 TCP/IP 自定义协议访问 svnserve 服务器。 由于我们采用的是svnserve服务器所以我们可以通过file://和svn://来访问,在此我们不对其他三种方式进行说明了。 由于我们在运行svnserve的时候已经将根目录定位到repo文件夹了,所以使用svn://访问时直接输入svn://localhost/ 即可访问到,如果不加上那个--root选项的话那么地址就必须是svn://localhost/repo。如果是从其他计算机访问,只需要将localhost改成SVN服务器机器的IP地址即可。 3.2 首次导入(import) 对需要进行版本控制的源码,需要先导入到版本库中,形成第一个修订版本。使用import命令,可以使用TortoiseSVN的import命令。首次导入之后,版本库中就已经包含了版本控制文件了,以前导入的文件也就可以删除了。 好了,现在我们在任意地方新建一个文件夹比如叫做import,里面新建三个文件夹 Subversion使用手册 design,release,trunk。各个文件夹的作用已经在前面说了,在此不再赘述,然后将我们西安现在正在开发的项目放到trunk文件夹中,我们的项目有两个文件一个是A.java一个是B.java, A.java文件中的内容是 public class A{ public static void main(String[] args){ System.out.println("Hello Everyone!"); } } B.java文件中的内容是 public class B{ } 还有就是我们把我们开发的设计文档design.doc放到design文件夹里,这些都放好之后,在import文件夹的空白处右击,在弹出的菜单中选择TortoiseSVN然后在弹出菜单中选择Import…,弹出如下内容:(图3-2-1) 图3-2-1 在URL of repository中填上访问地址,本地访问题写svn://localhost/即可,外面机器访问就需要填写IP了,然后在Import message里写上说明点击OK进入下一步。 大家就会看到如下界面(图3-2-2),填写上用户名和密码,为了更加快捷的工作,我们把Save authentication复选框选上,这样以后就不用一次又一次地输入用户名和密码了,不过如果你感觉这样不安全,你也可以在TortoriseSVN的settings里把它去掉。点击OK,就会出现(图3-2-3)的界面。 Subversion使用手册 图3-2-2 图3-2-3 这样我们的版本库中就有了我们要进行版本控制的项目,而且可以看到最后一句,当前的版本是1。 3.3 首次检出(checkout) 需要将版本库的代码检出(checkout)到一个文件夹,就得到了一份工作拷贝,可以对工作拷贝进行修改。可以使用Checkout命令。注意,不要检出到刚才用于导入(import)的文件夹,否则文件的覆盖会出现错误,如果确实很需要,就先删除原文件夹中的所有内容,然后检出(checkout)。检出所得的工作拷贝,每个文件夹中都包含一个.svn文件夹,其中包含了SVN的一些信息,有如版本库,不要进入这个文件夹,没什么好处。 具体操作是在你想的获得开发源码的地方比如说本例在E:\workspace,在此文件夹里右击,在弹出菜单中选择SVN Checkout…,弹出如下界面(图3-3-1),因为我们只需要开发代码所以地址要定位到trunk文件夹,其他的默认即可,点击OK。 Subversion使用手册 图3-3-1 如果刚才你没有让TortoiseSVN记住密码的话,Checkout的时候也会让你输入密码的,请输入对此目录有读权限的用户名和密码,不然的话会出错,这一次我用了Tom的用户名和密码。然后我再在另外一台机子上用Jim这个用户名Checkout一份拷贝。完成后就会看到trunk文件夹里的A.java和B.java就会被拷贝到workspace这个文件夹里,而且文件上面还带着绿色的对号,表示现在的文件没有作修改。 3.4 提交修改(Commit) 现在可以修改你的项目代码了,比如说Tom给B.java添加一个Test方法,具体如下: public static void test(){ System.out.println("Test!"); } 添加完成后你就会看到B.java文件上的绿色的小对号变成了红色的小叹号,表明文件已经做了修改,如果感觉没有问题了,就可以将修改完的文件提交到版本库中,可以直接右击修改的那个文件,也可以在修改的文件所在的文件夹右击,然后选择SVN Commit…这时会弹出如下界面(图3-4-1),填写相应信息后,点击OK即可,这时如果没有让TortoiseSVN记住用户名和密码还是要输入的,输入之后会出现(图3-4-2)的界面,这时可以看到版本已经变成了2。 Subversion使用手册 图3-4-1 图3-4-2 3.5 更新(Update) 上一步中Tom把B.java修改了,然后提交到了版本库中,而这时Jim还是以前的,如果他想要看到最新的版本,那么他就必须更新他的拷贝,在需要更新的文件夹里右击或者需要更新的文件右击,选择SVN Update,这时就会提示你输入用户名密码,输入之后就会更新到最新的版本。 Subversion使用手册 3.6 合并(Merge) 由于有了版本控制,这样多个开发人员可以同时开发这个项目,当两个人Tom和Jim同时编辑一个文件B.java,Tom编辑完之后将修改提交,当前版本是10,他为Test方法添加了一句话: System.out.println("Tom Test!"); 没有任何问题,提交之后版本就会加1,,提交后变成11,当Jim修改完,他在B.java里添加了一句话 System.out.println("Jim Test!"); 他当前的版本是10,当他也想提交时,问题来了,出现了下面的错误(图3-6-1): 图3-6-1 意思就是说当前你提交的版本低于版本库中的版本,已经过时了,这说明有人在此之前提交过,这时侯Jim必须先升级他的B.java文件,升级如果与当前本地的版本有代码不一致的地方也会提示如下错误,表示SVN无法自动处理这些差异,需要人工去合并(图3-6-2): 图3-6-2 B.java上的图标也变成了黄色三角叹号,而且当前文件夹里会出现几个文件,文件名都是修改了的文件的文件名加上版本号,比如说当前Jim的就是B.java.r10,B.java.r11,B.java.mine Subversion使用手册 等,这些文件中存放的都是各个版本的此文件的内容,.mine里的是本地修改后的文件内容,这些文件都是为了让你手工去合并而产生的,。手工去合并有一些方式,推荐使用TortoiseMerge,具体操作为更新完毕后再次Commit B.java文件,这个时候就会发现如下(图3-6-3), 图3-6-3 B.java是红色的标注的,并且是conflicted(有冲突的),这个时候双击列表框中的B.java就会打开TortoiseMerge的界面(图3-6-4) Subversion使用手册 图3-6-4 在这里面可以很清楚的看到,左上角上是Theris,也就是版本库中的B.java,右上角是Mine,也就是自己的B.java,下方是Meraged,表示合并之后的B.java。而且列数里还有一些小图标:我们说说小图标的意思。 · :表示这一行被添加了。 · :表示这一行被删除了。 · :表示这一行只包含空格一类的修改,并没有实际代码的变化,或者是几行合并成为了一行,你不需要对代码进行修改。 · :这一行是用TortoiseMerge手动修改的。 · :表示这一行现在有冲突。 · :表示这一行以前有冲突,但是冲突的效果被空格和回车隐藏了。 · :表示这里行里修改因为恢复了原始的内容,修改都被解除了。 在这里面可以清楚的看到,两个版本中的不同之处,如果想留下Jim写的,也就是Mine中的System.out.println("Jim Test!");,那你就可以在Mine中的红色的那一行里右击选择Use this text block,意思是使用这一行,这时候你就会看到下方Merged里的那一行问号变成了刚才选择的那一句。现在说说菜单项的作用: 在上面那两个窗口中: l Use this text block:表示使用这一行。 l Use this whole file:表示使用整个这一个文件。 l Use text block from “mine” before”thires”:表示冲突的两句话都要留下,但时mine的在前面,thires的在后面。 l Use text block from “thire” before”mine”: 表示冲突的两句话都要留下,但时thires的在前面,mine的在后面。 在Merged窗口中的菜单项基本上上面的明白了,这里的也就明白了,呵呵。 我们现在想要冲突的两句全都留下,而且Tom的在前,Jim的在后,我们就可以在Merged窗口中右击冲突的一行使用Use text block from “thire” before”mine”,这样就达到了想要的效果,修改完之后,别忘了最重要的一步:就是确认已经Merge完毕点击图标工具栏上的图标即可,然后就可以关闭TortoiseMerge,这个时候就可以点击OK来提交了。 如果代码不是很多,你可以直接打开更新后的B.java可以看到里面在有冲突的地方有相应的标注,如下: <<<<<<< .mine System.out.println("Jim Test!"); ======= System.out.println("Tom Test!"); >>>>>>> .r11 Subversion使用手册 这个表示本地文件在这一行是System.out.println("Jim Test!");,而版本库中的也就是第11个版本的B.java是System.out.println("Tom Test!");,现在就需要决定是留哪一句,通过与其他开发人员交流之后,知道怎么改了,就可以将那些标注和不能留下的语句去掉即可,然后将那些自动生成的B.java.r10,B.java.r11,B.java.mine等文件删除,然后再次Commit也是可以的,这个方法只适合代码较少,很容易发现不同之处的情况,不过还是使用TortoiseMerge好。 3.7 回退(Update to reversion) 这个情况是很容易发生的,那就是当大家修改了代码之后,发现程序有很大漏洞,而且及其难改,这个时候就可以将你的项目回退到以前的版本,具体操作是:右击想要回退的文件夹或者文件,在TortoiseSVN弹出菜单中选择Update to reversion…然后回弹出一个界面,比如说我们想要回退到第10个版本只需要在Revision中填写相应的版本号,然后点击OK即可。 3.8 Branch and Tag 当我们开发到一定程度,感觉这个版本已经做够成熟了,已经可以拿来发布了,我们可以将这个版本当做一个备份保留起来这样以后修改,出了大问题可以立刻拿这里面的版本来用。操作方法是:首先从版本库中将trunk中的项目checkout到一个文件夹里,然后右击checkout下来的这个文件夹,TortoiseSVN弹出菜单中选择Branch and Tag…,然后就会看到如下界面(图3-8-1): 图3-8-1 在To URL里填好路径,既然是可以发布的版本,我们就把它放到release文件夹里的V1.0文件夹里吧,如果没有这个文件夹会自动创建的。然后在下面的Log窗口里写上日志,点击OK即可。然后我们可以使用TortoiseSVN里的Repository Brower来看看是否加入了。 Subversion使用手册 3.9 导出(Export ) 我们想要给客户一个项目,当然不能带版本信息,我们可以用TortoiseSVN菜单里的Export来实现,新建一个文件夹,右击文件夹TortoiseSVN菜单里选择Export…如下图(图3-9-1):我们将我们刚刚做好的V1.0版本导出,点击OK即可。 图3-9-1 3.10 版本库浏览器(Repository Brower ) 你可以随时通过版本库浏览器(Repository Brower )来查看版本库中的变化,打开后如下图(图3-10-1) 图3-10-1 在这里可以看到文件和文件夹都有对应的版本和作者还有最后的修改时间,这里的作者表示最后修改的那个人。 Subversion使用手册 第四章 附录 4.1 TortoiseSVN的一些设置 在http://tortoisesvn.net/downloads页面里的Language packs里可以下载到TortoiseSVN中文语言包,英文不好的同学可以下下来对比着使用。 想要去除TortoiseSVN的一些记录功能可以在TortoiseSVN菜单里的settings里的Save Data里将不需要的clear掉,提高安全性。如下图(图4-1-1),修改语言的话在General里的Language里修改。 图4-1-1 4.2 参考文献 SVNBook,TortoiseSVN文档,TortoiseMerge文档。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档