版本控制初步使用

(一)SVN常识

     SVN的服务端,可以选用Visual SVN,tortoiseSVN 是比较公认的客户端。如果是在Visual Studio,可以考虑从Visual StudioAdd in 库

      https://visualstudiogallery.msdn.microsoft.com/DBD60715-FE57-44B5-ABEA-F18618068C1E?SRC=Featured

      里面下载相关的插件,集成在Visual Studio当中。

      假如想用分布式的版本控制软件,可以考虑Git for Windows

      http://www.cnblogs.com/chuncn/archive/2011/02/24/1963712.html

      如果想用在线的库,可以在github里面github.com直接建库,但是如果设为私人库需要收费,建立开源库,就是免费的。

(二)使用方法

Svn主要用于多人开发同一个项目的版本控制、保持大家工作在正确的版本上,基本工作流程如下:

1)         项目管理者在svn服务器中为需要共同开发的项目建立repository

2)         项目管理者在服务器上为需要提供权限的用户设置账号,对repository设置权限

3)         项目管理者(或者其他有权限的用户)第一次向repository中添加项目原型,即import操作。此操作在项目生命周期中一般仅进行一次。

4)         拥有访问权限的用户通过checkout从repository中取得项目代码,参加到开发过程中,此操作一般对单个用户来说只需要执行一次。

5)         开发者在每次开发之前从服务器update得到最新版本,然后在此基础上进行开发,完成一个相对独立的模块时应当更新到服务器让其他开发者得到最新版本,在commit之前仍然需要update查看是否已经有其他开发者提交了新的版本,如果有新版本并且修改与自己的修改存在冲突,开发者需要在本地解决冲突,再次update直到没有冲突。此时才能commit将自己的代码提交到repository中。

6)         在项目开发过程中,如果仅需要获取代码,可通过export从repository中获取项目代码

 (三)SVN中trunk branch和tag的用法

本节主要讲解一下SVN中tag branch trunk的用法,在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆。这里就向大家简单介绍一下,欢迎大家能和我一起学习SVN中tag branch trunk的用法。
在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别。至于何时用tag,何时用branch,完全由人主观的根据规范和需要来选择,而不是强制的(比如cvs)。一般情况下,tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本。这里,应该是只读的。更多的是一个显示用的,给人一个可读(readable)的标记。branch,是用来做并行开发的,这里的并行是指和trunk进行比较。比如,3.0开发完成,这个时候要做一个tag,tag_release_3_0,然后基于这个tag做release,比如安装程序等。trunk进入3.1的开发,但是3.0发现了bug,那么就需要基于tag_release_3_0做一个branch,branch_bugfix_3_0,基于这个branch进行bugfix,等到bugfix结束,做一个tag,tag_release_3_0_1,然后,根据需要决定branch_bugfix_3_0是否并入trunk。对于svn还要注意的一点,就是它是全局版本号,其实这个就是一个tag的标记,所以我们经常可以看到,什么什么release,基于xxx项目的2xxxx版本。就是这个意思了。但是,它还明确的给出一个tag的概念,就是因为这个更加的可读,毕竟记住tag_release_1_0要比记住一个很大的版本号容易的多。

branches:分枝
SVN中tag branch trunk的用法,首先看一下branches的介绍。当多个人合作,可能有这样的情况出现:John突然有个想法,跟原先的设计不太一致,可能是功能的添加或者日志格式的改进等等,总而言之,这个想法可能需要花一段时间来完成,而这个过程中,John的一些操作可能会影响Sally的工作,John从现有的状态单独出一个project的话,又不能及时得到Sally对已有代码做的修正,而且独立出来的话,John的尝试成功时,跟原来的合并也存在困难。这时最好的实践方法是使用branches。John建立一个自己的branch,然后在里面实验,必要的时候从Sally的trunk里取得更新,或者将自己的阶段成果汇集到trunk中。
(svncopySourceURL/trunkDestinationURL/branchName-m"Creatingaprivatebranchofxxxx/trunk.")

trunk:主干
主干,一般来说就是开发的主要呆的地方,
tag:  图标
在经过了一段时间的开发后,项目到达了一个里程碑阶段,你可能想记录这一阶段的代码的状态,那么你就需要给代码打上标签。
(svncpfile:///svnroot/mojavescripts/trunkfile:///svnroot/mojavescripts/tags/mirrorutils_rel_0_0_1-m"tagedmirrorutils_rel_0_0_1")另有一说,无所谓谁对谁错。
trunk:表示开发时版本存放的目录,即在开发阶段的代码都提交到该目录上。
branches:表示发布的版本存放的目录,即项目上线时发布的稳定版本存放在该目录中。
tags:表示标签存放的目录。
在这需要说明下分三个目录的原因,如果项目分为一期、二期、三期等,那么一期上线时的稳定版本就应该在一期完成时将代码copy到branches上,这样二期开发的代码就对一期的代码没有影响,如新增的模块就不会部署到生产环境上。而branches上的稳定的版本就是发布到生产环境上的代码,如果用户使用的过程中发现有bug,则只要在branches上修改该bug,修改完bug后再编译branches上最新的代码发布到生产环境即可。tags的作用是将在branches上修改的bug的代码合并到trunk上时创建个版本标识,以后branches上修改的bug代码再合并到trunk上时就从tags的version到branches最新的version合并到trunk,以保证前期修改的bug代码不会再合并。

源自:http://developer.51cto.com/art/201005/201718.htm
posted @ 2014-12-06 10:00  DowTowne  阅读(210)  评论(0)    收藏  举报