SVN项目管理Eclipse应用服务器框架.是前面公司开始使用svn时候的培训时候准备的资料,发出来,希望对使用svn的兄弟们有所帮助。里面的相关软件版本可能已经不够新了,但新的软件的大概操作方式也基本是相通的,同时,SVN的基础概念也没有发生过变化。
第一部分:基础使用
工具安装:
1. Subclipse , Eclipse 的 Svn 插件。安装、使用都很简单。当前最高版本 1.2.4 ,支持 Eclipse 版本 3.2 、 3.3 。这个插件的优点是版本比较、合并很清晰,但前提是要用到 Eclipse 。
安装方法:打开 Eclipse ,选择菜单栏中的 Help -> Software Updates -> Find And Install 。
选择 Search for new features to install ,然后 Next 。
点击右边的 New Remote Site 按钮,出现的对话框中, Name 项可以随便填写,例如 subclipse , URL 项填写: http://subclipse.tigris.org/update_1.2.x 。然后确定。
确定之后,在网站列表中,可以看到新加入了 Subclipse 一项,钩选之,然后 Finish 。稍等 n 秒,出现如下界面:
钩选下面的 subclipse1.2.4 。然后一路 Next ,或者 Finish 。就开始安装了。注意后面有一部需要选择同意他的使用协议。安装时间根据网速的不同而不同。
2. TortoiseSVN 这个是 Windows 操作系统上的 Svn 客户端。有中文语言包,与 Windows 系统结合得比较好,可以直接在资源管理器中做版本管理操作。这个工具的优点是小巧,不依赖别的什么软件,缺点是比较、合并等界面我觉得不太理想。
安装文件下载地址: http://tortoisesvn.net/downloads ,注意这个页面上有 TortoiseSVN 的安装文件,还有语言包,最好都下载吧。
安装 TortoiseSVN 完成后,要求重新启动机器。
3. AnkhSVN ,这个是 VS.NET 的 SVN 插件,我没有用过,有兴趣的同事可以查一下。
工具使用:
1. Subclipse 按照基础操作类型,描述如下:
检出项目:在 Eclipse 的项目导航区域点击右键, Import ,出来的对话框中选择最下面的从 SVN 导入项目。然后选择列表中的 svn 服务器地址,或者创建新的 svn 服务器地址。然后一路确定,要输入用户名密码的话按照帐号管理人分配的帐号输入就可以了。
共享项目:意思是把一个目前只在我机器上的项目发布到 SVN 版本库。在项目上点击右键,选择 Team -> Share Project 。然后选择 SVN ,后面的步骤就基本上一样了。
比较:比较本地版本和服务器上的版本的差异,选择 Team -> 与资源库同步。比较的结果中,灰色的向右的肩头代表本地版本作了修改,还没有提交到服务器。蓝色的向左的箭头代表尤其他人修改了该文件,并且提交到了版本库,本地文件需要更新。红色的双向箭头代表本地文件和服务器上的文件有冲突,需要合并。
在比较结果上,点击右键,可以执行更新、提交等操作。
更详细的文档:
A. Eclipse 安装 Subclipse 之后,也会安装 Subclipse 的文档,点击 Help -> Help Contents ,左边的树上会列出所有的文档,其中有 Subclipse 的文档。英文的,但有截图,说得也很好懂。(推荐)
B. http://dev2dev.bea.com.cn/techdoc/20060620822
2. TortoiseSVN ,安装语言包之后,直接在资源管理器的目录上点击右键,就可以看到有 TortoiseSVN 的相关操作了。
检出项目:建立一个空目录,在目录上点击右键,选择 SVN 检出,后面按照提示输入地址等信息就可以了。
共享项目:在项目目录上点击右键, TortoiseSVN -> 导入,填入地址,按照提示操作就可以了。但是注意,完成之后,版本库中已经有了这个项目,但你本地的这一份项目和版本库依然没有任何联系。此时要新建立一个目录,执行上面说的检出操作。
比较、提交、更新等操作就使点击相应的选项。略。
另外还有两个经常用到的操作是锁定和还原。一个人锁定某个文件或者目录后,别人都不能锁定,也不能提交。另外,如果我从服务器上更新下来一个文件 a.txt ,修改了一部分内容后,又发现改得不好,希望恢复到服务器上的样子。那么可以执行还原操作。
更详细的文档:
A. 安装 TortoiseSVN 中文包之后,其帮助文档也成了一个半中文半英文的翻译版本。值得一看。
B. http://www.subversion.org.cn/tsvndoc/ (推荐)
C. http://fairyfish.net/2007/09/08/tortoisesvn-introduce/
第二部分:高级使用
主要包含如下内容:打版本标记、分支操作
标记和分支可以理解为都是项目的一份拷贝。只不过用途不同。而实际上这两个东西在 SVN 服务器上是没有区别的。
建立标记、分支: 所谓打标记,和 CVS 里面的 Tag as a version 是一个意思。就是整个项目的当前状况拍一个照片,放在某目录,日后方便查看。例如我们可以记住某项目的 134 版本是这个阶段工作的阶段性成果,而使用标记,我们可以把这个项目的 134 版本拷贝一份放在某个目录,并命名为 project_a_final_20080227 。以后任何时候都可以从这个位置方便的找回这个版本。
在 Subclipse 中, SVN 操作选项中有 Tag/Branche 选项,点击之, 第二个地址就是 tag 的存放地址(分支、标记存放在哪里都有一些一般性的建议,关于版本库的规划请参见另外一份文档《版本库结构规划建议》)。
而在 TortoiseSVN 中,也有分支 / 标记这样的选项。操作起来大同小异。
分支的创建和上面的 Tag 创建是完全一样的,只不过我们一般建议把分支存放于一个叫做 branches 的目录。
切换分支: 假设我们创建了一个分支叫做 branchesA 。之后开发人员可以工作在主干或者这个分支上,二者之间的切换也很简单,菜单中有一个“切换”选项。点击按提示操作即可。
分支合并: 这个是分支开发中最重要的一步。假设 BranchesA 是为了一个新功能的开发而创建的,那么该功能开发完成后,需要把这个分支合并回到主干上来。这时可以选择 SVN 操作菜单中的“合并”功能。
所谓合并,实际上是比较两个资源的不同,找出差异,并将这个差异应用到本地工作拷贝上。
合并的过程中涉及到的两个资源一般称作起始路径和目标路径。这两个路径的选取是很随意的。举以下几个例子:
起始路径 http://domain/svn/project/branches/b1 创建分支时的版本(例如 130 )
目标路径 http://domain/svn/project/branches/b1 当前最新版本(例如 200 )
假设本地拷贝 该项目的主干版本
合并操作可以表达为:
本地版本 + (分支当前版本 - 分支创建时的版本) = 合并后的版本
(我们可以将开发理解成在版本库上的一种增量操作,此时括号中的减法得出的是一个正值,例如“增加了 a.txt 这个文件”)
合并意义:比较分支 b1 创建时的样子和现在的样子,找出差异(注意这个差异实际上就是 b1 分支的开发成果),将这个差异应用到本地工作拷贝。而当前工作拷贝是项目的主干本本,这就意味着把分支 b1 的开发成果应用到了主干上,经过检查、提交到版本库,最后达到了将分支开发所完成的功能合并到了主干上的目的。
------------------------------------------------------------------------------------------------------------
起始路径: http://domain/svn/project/odps 上一次提交给信访项目时的版本 120
目标路径: http://domain/svn/project/odps 当前版本 145
假设本地拷贝:信访项目的当前版本
合并操作表达如下:
项目 A 当前版本 + (框架当前版本 - 框架上次提交给项目时的版本) = 项目 A 进行了框架升级后的版本
(注意其中的减法结果依然是正值)
合并意义:比较上一次把 odps 框架提交给信访项目使用时的样子和该框架现在的样子,找出差异,应用到本地工作拷贝。而当前工作拷贝是信访项目,这就意味着把 ODPS 框架这个阶段开发的成果应哟功能到信访项目中,经过检查、提交到版本库,最后达到的目的是把信访项目中的 ODPS 项目部分进行了升级( ODPS 框架和信访项目是由不同的小组开发的,所以这个操作很有意义)。
------------------------------------------------------------------------------------------------------------
起始路径: http://domain/svn/project/trunk 当前版本 300
目标路径: http://domain/svn/project/trunk 某个历史版本 250
工作拷贝: http://domain/svn/project/trunk 当前版本 300 ,与起始路径相同
注意:这个例子和上面两个例子不同,上面两个例子其实路径在时间上都早于目标路径。
合并操作表达如下:
项目当前版本 + (项目历史版本 250 - 项目当前版本) = 项目回滚后的版本
注意这一次括号中的减法操作按照上面的规则来讲得出的结果是负的。也就是说,假设我们在开发过程中新增了一个文件 a.txt ,那么减法(新版本 - 旧版本)表达的含义是“以当初的版本位处发现,看现在的版本”,得出的结论是新增了一个文件 a.txt ,而减法(旧版本 - 新版本),也就是把起始路径和目标路径的时间顺序倒了一下,表达的含义就变成了“站在今天,看过去有什么不同”,得出的结论是少了一个 a.txt 文件。
合并意义:从现在看过去,整个差异部分“加了一个负号”,经过检查、提交,最后的结果是当前项目恢复到了历史上的 250 版本。
其它:单一差异文件,补丁
上面的分支合并操作是比较两个资源的不同,将差异应用到本地工作拷贝。在此之外, SVN 可以比较两个资源的不同,并将这些不同之处记录在一个独立文件中。而这一个差异文件也就是所谓的补丁。