`
jayghost
  • 浏览: 441881 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【转】使用Subversion

 
阅读更多

 

本文目的

让未使用过版本控制器软件或者未使用过subversion软件的人员尽快上手。

subversion的使用技巧很多,这里只总结了最小使用集,即主要的基本功能,能够用来应付日常工作。

因此不涉及subversion服务器端的搭建和配置。

为什么要使用版本控制

当多人共同开发同一个软件时,会涉及源代码的共享以及带来的相关问题,比如追究某个代码是由谁在什么时间修改的。

下面列出版本控制带来的好处:

  • 为团队提供了所有项目文档的回退按钮,个人IDE工具只能提供某个文件的回退按钮,而不能做到,比如回退到2008年6月12日下午3点10分时的所有项目文件;
  • 支持多个开发人员在可控的方式下为相同的代码工作;
  • 版本控制系统保存了文档在过去的各个改动,便于查找是谁,在何时,因为什么修改了文档;
  • 支持在文档的主线上同时有多个版本(版本的分支和合并是版本控制的主要手段,一些开发团队仅仅是简单的共享代码主干);
  • 支持查询在某个时点上项目各个文档的状态,可用于研究生产效率等(比如,统计项目哪个时期代码提交最活跃,以及每个人的代码提交频次等等),也可用于对以前的软件发行版的再发行(比如,以前构建的2.0版本的安装包丢失了,那么可以通过版本控制器记录的历史重新回溯到那个版本,然后重新构建出安装包)。

为什么使用subversion

首先,考虑的是使用免费开源和轻量级的版本控制器。

第二,要求使用比较广泛,可选的有cvs和svn。

这里选择svn,主要考虑是比较好集成apache使用,提交代码支持原子级操作(即,比如提交3个文件,如果因为网络或者其他原因,上传2个文件后中断,svn能做到服务器端回滚到提交前的状态,而cvs做不到这点,需要手工检查和恢复)。

subversion的程序构成

subversion程序,和mysql很类似,是c/s结构的,有客户端和服务器端。服务器端和客户端都是通过命令行方式启动和执行的。本文只会使用到客户端的命令。

第三方提供了各种图形界面的客户端工具,比如eclipse插件subclipse,windows图形界面工具tortoiseSVN。这些后面会提到它们的基本使用。

subversion资源

安装subversion

有关subversion和subclise的安装暂略,因为目前提供的虚拟机开发环境已经安装和配置。

tortoiseSVN,可到官方网站上下载最新版本的windows安装包,默认安装,不需要做其他设置,安装后需要重启计算机。能在资源管理器中鼠标右键菜单看到如下图所示条目,就说明安装成功。

image

使用subversion

日常工作中使用subversion仅仅是几个命令或者操作,并不复杂。但是它内部的一些机制需要逐渐去理解。

检出代码

在刚开始进入一个开发队伍的时候,已经有版本控制和软件项目,使用的第一个命令往往是检出(checkout)代码。或者当使用和研究开源软件的时候,也是第一个要用到这个命令。这个命令的作用是把项目的源代码下载到用户本地,并且带有版本控制信息。

比如,执行以下命令获取一个项目的源代码:

svn cohttp://easymorse.googlecode.com/svn/trunk/vfs.demo/

这个命令将在本地当前目录建vfs.demo目录并将该服务器目录下的所有文件下载到本地,并且,会生成隐藏文件.SVN目录,用于记录版本控制信息。

tortoiseSVN有图形界面的检出操作,但是命令行方便快捷,建议使用命令行。

如果使用eclipse并安装了subclipse插件,可以通过插件导入项目。

image

然后,

image

选择或者新建资源库位置,

image

选择资源库中的项目目录。

image

然后,就可以完成(finish)了。

image

初始导入

何时使用初始导入,比如,对于java开发人员来说,在eclipse中编写了一个项目,并决定把项目共享到版本控制器上,这时就需要初始导入操作了。

以下以subclipse为例说明初始导入的步骤。

第一步,选择share project,共享你的项目:

image

选择通过svn共享项目:

image

填写svn提交的url:

image

这个url,需要subversion的管理员告知你,还有用户名和密码。如果想练习一下,google提供了免费的svn,你可以通过:http://code.google.com 申请项目,这样就会有类似我上面的url和权限。

然后可以直接点击finish,完成初始提交。选择next,可以做定制模块名和初始提交的信息,一般不需要。

如果你的svn服务器使用了https协议,需要接受一个数字证书,一般选择永久接受。

image

之后,会要求输入用户名和密码。建议勾选保存密码,否则会很麻烦。

image

这样,再看项目,会发现条目上多了问号,这时需要选择哪些目录和文件需要提交,哪些需要忽略,比如生成的class文件等。

image

选择需要忽略的文件或者目录,这时需要切换到导航视图下才能看到所有文件和目录:

image

从导航视图看到的情况:

image

选中需要忽略的目录和文件,操作svn:

image

然后提交整个项目即可。有关提交的操作见下文。

更新项目

项目在提交前,应该先做更新项目操作。比如有一个文件a.txt,已经提交到svn中,这样,可能有其他用户提交了新的改动到a.txt,你现在又修改了a.txt,准备提交你的改动。先操作更新a.txt,这样如果该文件在svn服务器已经改动,会将改动加入到当前本地的a.txt中。

在subclipse中的操作:

image

提交代码

提交代码,一般会级联当前目录下所有改动的内容。

image

删除代码

对于不再使用的代码,可以直接删除掉,比如通过windows删除文件,通过ubuntu的rm命令或者通过eclipse的delete功能,然后提交项目,subclipse会知道哪个文件被删除了,并将这个变化通知给svn服务器。

还原代码

如果代码做了改动,可以是多个文件,也可以删除了文件或者新增了文件,但是没有提交到svn服务器,可以通过还原功能恢复到改动前的样子。

image

版本的分支与合并

版本的分支和合并,是版本控制的核心功能。

比如,软件通过版本的分支,将项目分配给多人做分工开发,通过版本合并,将这些分工实现的代码合并到新的版本中;或者,修改代码bug的时候,可以先打出一个版本分支,保留出现bug的版本,比如分支版本名称为pre_fix_bug_2201,这里2201表示bug的代号,然后针对这个分支做修改fix这个bug,再将修改后的内容提交到一个新的分支版本,比如post_fix_bug_2201,再到适当时候将这个分支合并到代码主干中去。

以上说了一下版本分支与合并的用途,这里简单说一下svn版本分支合并的基本原理。

首先是版本分支,实际上是将当前版本“copy”到分支上,非常类似windows下,将某个目录的快捷方式复制到其他路径。这种copy,可以说是轻量级copy或者叫廉价copy,不是复制版本内容,而是做一个内部的引用。这样的copy很快,对服务器也没有空间上的开销。

版本的合并,是svn开发中的难点,当做版本合并的时候,服务器会试图智能的合并同一个文件的不同版本,可能会带来版本冲突,这需要操作者做手工的处理,消除版本冲突。合理分工的项目应该可以通过管理手段尽量避免这种情况。

以下是通过subclipse演示版本分支的操作。首先,项目文档应该已经全部提交,然后,选择

image

然后,填写url,一般是在tags/目录下:

image

然后默认选项,next即可,然后选择finish按钮。在svn的相应路径下就会有一个同名的项目。

image

打分支,实际上就是建立了一个项目的轻量级copy。

如何从版本的一个分支切换到另外一个分支,这也是很重要的,它能帮助你轻松在不同的项目版本中自动切换,而不必在eclipse里维持多个项目。

image

选择要切换的项目版本路径,或者直接输入亦可。

image 

然后点击ok后,项目即可切换到该版本下。

在分支上做了改动,并且已经提交(一般tags目录下的项目约定是只读的,不建议改动,这里是为了举例方便),那么,可以将这个版本合并到trunk(主干)代码中,让主干也拥有最新的代码。

image 

选择需要合并的源,比如从tags上面一个版本,合并到主干(trunk)代码中。

image

之后,需要设置一些合并的特性,这里默认配置即可。

image

执行完毕后,会有一个合并报告,可见没有出现冲突情况。

image

这时候看源代码,可以发现有改动,这些改动就是合并过来的代码。

image

改动如果没有问题,就可以提交,这样就完成了一次版本的合并工作。

 

 

“还原”已经提交的改动

如果文档没有提交,还原是很容易的,只需执行还原(revert)就可以了。有时候,已经提交了代码,结果发现了问题,需要回退到之前提交的版本,就不是很容易了。

这时候的还原,其实是将以前的某个修订本(revision)覆盖当前的本地工作拷贝。然后再提交这些改动,成为新的修订本。

下面演示一下。

首先提交了一个版本的改动,这是以后需要还原回来,这里,为了以后还原方便,要在提交的消息中说明改动了什么。(这一步在开发中是必须的,是纪律)

image

下面,再修改一下项目,然后提交一次,这里故意增加一个文件。

image

提交以后,后悔了,想恢复到前一个修订版。虽然可以通过版本号进行覆盖还原,但是一般人是无法记忆这个版本号的,另外就是实际情况往往更复杂,不会像示例中那样是相邻的两个修订版。

所以提交修订版时的注解消息就显得特别重要。

这时可以通过svn的日志功能查看到这些版本和它们的注释消息。

image

看到历次版本的消息内容。

image

这样,根据注释,我们很容易找到需要还原到以前的那个修订版。如果不放心,我们还可以根据上下文菜单,对比两个修订版的区别。

image

看比较结果。可以看出,增加了一个文件,另外一个文件中有一处差异。

image

那么,可以确定是从125修订版恢复(还原)。

image

更改后的项目,相当于用125修订版还原了126修订版。

image

可以看到126版本添加的文件不见了,另外VfsDemo.java文件也还原到125版本的内容。这时提交将成为127版本,这个版本其实就是125版本。算是还原了主干(trunk)上的代码。

image

刷新历史,可以看到修订版已经生效。

image

分享到:
评论

相关推荐

    使用Subversion进行版本控制(针对 Subversion 1.4)

    使用Subversion进行版本控制针对 Subversion 1.4(根据r2866编译) 参照网页版 http://svndoc.iusesvn.com/svnbook/1.4/制作而成。 目录 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书的结构 本书是...

    在Eclipse中使用Subversion--Subclipse

    Apache Software Foundation等组织转而使用Subversion(SVN),因为它提供了更好的性能和更多的功能。 - **Subversion优势**: - **更好的性能**:Subversion支持智能本地缓存和数据库后端,从而提高了操作速度。 ...

    Subversion快速入门教程(转)

    这篇教程将帮助初学者理解Subversion的基本概念和操作,以便在实际项目中有效地使用它。 1. **安装与配置Subversion** 在开始使用Subversion之前,你需要在计算机上安装它。Subversion的安装包可以在其官方网站上...

    Subversion以及TortoiseSVN安装包

    在实际开发中,Subversion和TortoiseSVN的组合使用能帮助团队协同工作,避免代码冲突,同时保持代码历史的完整记录。版本控制的重要性不言而喻,尤其是在大型项目或多人协作的环境中,它能有效地跟踪和管理代码变更...

    Subversion汉化包

    Subversion(简称SVN)是一款广泛使用的版本控制系统,它能够帮助开发者管理代码库,跟踪文件和目录的修改历史,实现多人协作开发时的代码同步与冲突解决。Subversion汉化包则是为了方便中国用户使用而专门设计的,...

    Setup-Subversion-1.7.7.rar

    **Subversion的使用场景:** 1. **软件开发**:团队成员协同编辑代码,通过版本控制避免冲突,跟踪变更历史。 2. **文档协作**:多用户共同编辑文档,便于版本管理和历史查阅。 3. **项目管理**:项目资源的版本控制...

    Subversion与CVS的比较

    5. **本地化和国际化**:Subversion在本地化和国际化方面做得更好,支持多语言环境,便于全球范围内的用户使用。 6. **丰富的组件支持**:Subversion有一系列丰富的插件和扩展组件,满足了各种特定需求,如图形界面...

    subversion-1.6.13.tar.gz

    使用Subversion** 安装完成后,Subversion提供了命令行工具`svn`,可以执行各种版本控制操作,如`svn checkout`(检出项目)、`svn commit`(提交更改)、`svn update`(更新到最新版本)和`svn merge`(合并分支)...

    subversion-1.9.5+apache-2.4.25安装步骤及安装包

    4. **安装Subversion模块**:使用`mod_authz_svn`和`mod_dav_svn`模块,确保用户认证和版本控制功能能正常工作。 5. **设置权限**:配置Apache以允许或拒绝特定用户访问Subversion仓库。 6. **启动Apache**:用`...

    subversion-1.10.2 for windows VS2017 x64

    subversion-1.10.2 for windows VS2017 x64 CSDN-tags: subversion-1.10.2 windows VS2017 SDK17134.12 subversion-1.10.2 ... ...其他的dll是我自己从源代码编译的。...svn的gen-make.py 脚本在...欢迎朋友们下载使用。

    Subversion服务器端安装及配置手册_windowsXP

    Subversion(SVN)是一种广泛使用的版本控制系统,它支持多种服务模式来提供版本管理功能。本文档主要介绍了Subversion的两种服务模式: 1. **自定义协议的Subserve服务**:这是一种独立的服务模式,使用自定义的...

    SVN+中文语言包 - 让您的Subversion客户端“说”中文

    提升您的Subversion(SVN)体验,通过这个简易的中文语言包,将SVN客户端界面本地化为中文,使得中文用户能够更加便捷地进行版本控制操作。这个语言包是为了帮助非英语母语的开发者和项目管理者更舒适地使用SVN,...

    CollabNetSubversionEdge 使用说明英文版

    ### CollabNet Subversion Edge 使用说明 #### 概述 CollabNet Subversion Edge 是一款功能强大的版本控制系统服务器,主要用于管理、监控以及优化Subversion仓库的性能与安全性。本使用说明将详细介绍如何安装、...

    SubVersion培训文档,详细地描述了svn的使用情况

    SubVersion,通常简称为svn,是一种广泛使用的版本控制系统,它允许开发者跟踪和管理源代码和其他文件的变更。SubVersion的设计目标是替代Concurrent Versions System (CVS),在解决CVS的一些已知问题的同时,保持其...

    vss2svn使用说明vss导入subversion教程

    在本文中,我们将详细介绍如何将Visual SourceSafe (VSS)的数据迁移到Subversion (SVN)的步骤,以及在过程中可能会遇到的问题和解决方案。VSS2svn工具是实现这一转换的关键。 首先,我们需要获取vss2svn工具。你...

    subversion info cleaner

    Subversion(简称SVN)是一种广泛使用的版本控制系统,它允许团队协作管理文件和项目源代码。"Subversion info cleaner"工具则是针对SVN版本控制系统的特定辅助工具,主要用于清理或整理与Subversion相关的元数据...

    Matlab的Subversion接口:在Matlab中使用Subversion版本控制系统-matlab开发

    这使您可以在 Matlab 中使用 Subversion。 我没有看到任何其他实现,所以我为我的小组编写了这个简单的版本。 将此文件放在 ../toolbox/matlab/verctrl/ 目录中,用相同的名称覆盖那里的现有文件。 然后转到 matlab...

Global site tag (gtag.js) - Google Analytics