版本控制二(创建仓库与使用)

安装Subversion,官方下载地址为:http://subversion.tigris.org,我在这里使用1.6.5的版本.

安装完后,Subversion会自动在环境变量path里面加入bin目录的地址.可以在命令行里面操作.

Subversion的组件大致可以分为两种:客户端组件和服务器组件,因为访问数据仓库也需要通过服务器组件.服务器组件又有三种,是供管理员使用的:

  • svnadmin:用来调整和修正svn档案库的工具
  • mod_dav_svn:给Apache-2.X网页服务器使用的外G模块;可以用来将你的档案库透过网络对外开放,以供他人进行存取.
  • svnserve:一个独立地服务器程序(内置),可以作为服务器程序执行,或是被SSH启动;另一个让你的档案库在网络上可供其他人存取的方法.

客户端组件只有一个,供用户使用:svn,命令行客户端程序,这是用来管理数据的主要工具.

我要这个目录下面创建一个仓库:F:/RevisionControl/Repository/svn,默认安装完只有仓储行的组件,那么现在就用这个组件来创建一个仓库,又可以称之为档案库,这是管理员的操作,要用到svnadmin:

C:/Users/ZhangAo>cd F:/RevisionControl/Repository/svn
 
C:/Users/ZhangAo>f:
 
F:/RevisionControl/Repository/svn>svnadmin create firstsvn
 
F:/RevisionControl/Repository/svn>

这样就在F:/RevisionControl/Repository/svn目录下创建了一个名为firstsvn的仓库,创建仓库的语法:

svnadmin create 仓库名称

可以看到仓库创建完后生成了一堆文件和目录,这些目录的含义是:

db目录:就是所有版本控制的数据存放文件

hooks目录:放置hook脚本文件的目录

locks目录:用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端

format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号

conf目录:是这个仓库的配置文件(仓库的用户访问帐号、权限等)

你把你的文件更新或者加入到仓库以后,不要试着找到这些文件,它们虽然在db目录下,但是以它自己的方式保存着,常规方法看不了.可以说conf目录是最重要的目录.

仓库创建之后还不能马上使用,需要启动.有两种启动方式:svn服务器启动和Windows服务启动方式.

先使用svn服务器启动的方式,在cmd命令行输入语法为:

svnserve -d –r 文档仓库路径

其中d代表后台执行,r是指定仓库的根目录.命令执行后,如果不知道是否启动,因为命令行没有任何反应,有的只是没有反应.可以通过在另一个cmd命令行中输入netstat -an的命令查看当前端面的监听情况来辨别是否启动.它的监听端口号为:3690:

图为已启动.但是这种启动方式不好,因为只要你关闭了输入启动命令的命令行,你的Subversion也就停止了.所以建议使用第二种方式:以服务方式启动.

还是在命令行输入:

C:/Users/ZhangAo>sc create SVN-Service binpath= "F:/RevisionControl/Subversion/bin/svnserve.exe --service -r F:/RevisionControl/Repository/svn" 
displayname= "SVN-Service" start= auto depend= Tcpip
[SC] CreateService SUCCESS
 
C:/Users/ZhangAo>

表示创建一个名为"SVN-Service"的服务,要指定binpath,设置自动启动.需要注意一点,这种方式为多仓库,如果指定到svn目录下的firstsvn,就是单仓库.多仓库可以对目录下多个工程进行版本控制.下方出现"[SC] CreateService SUCCESS"表示创建成功.这个时候可以在服务里面找到它:

可以看出创建完它是没有启动的,启动后就可以使用了.删除的语法为:

sc delete 服务名

可以使用了.当一个新人加入项目组的时候,第一次要checkout工程,修改完以后要commit,团队的人可以通过update来获取最新的版本.

我在F:/Develop/workroom/目录下建立一个用户,就叫user1,用他来做checkout:

C:/Users/ZhangAo>cd F:/Develop/workroom/user1
 
C:/Users/ZhangAo>f:
 
F:/Develop/workroom/user1>svn checkout svn://localhost/firstsvn
取出版本 0。
 
F:/Develop/workroom/user1>

子命令checkout后面可以跟两个参数,第一个参数为指定的url,由于我是多仓库,所以需要指定具体的仓库.第二个参数(上面没写)指定checkout的目的地.默认就是当前执行命令的路径,我用cd命令切过来了,所以不指定也行.

命令执行后可以看到user1的目录下多了个目录:firstsvn.里面有一个隐藏目录:.svn.这个目录里面包含了你的版本库的信息,可以让你commit或者update的时候不用再输入url.

由于目前版本库里面没有任何东西,也没有对它操作过,所以是取出版本0.现在我就在里面增加一个文件,就叫hello.txt,里面只有一句话:hello world:

然后commit,commit之前输入先要add,相当于给它一个标记.输入命令:

F:/Develop/workroom/user1/firstsvn>svn add hello.txt
A         hello.txt
 
F:/Develop/workroom/user1/firstsvn>

下面出现了"A",相当于给了它标记,接着commit,彻底保存在版本库中:

F:/Develop/workroom/user1/firstsvn>svn commit
svn: 提交失败(细节如下):
svn: 无法使用外部编辑器获得日志信息;考虑设置环境变量 $SVN_EDITOR,或者使用 --me
ssage (-m) 或 --file (-F) 选项
svn: 没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境变量,运行时的配置参数中也没有 “
editor-cmd” 选项
 
F:/Develop/workroom/user1/firstsvn>

可以看到命令执行后出现了这么一些话,就是说你的东西提交上去了,要说明一下,就像写程序的时候加注释一样,总不能无缘无故地就出现吧?

 
F:/Develop/workroom/user1/firstsvn>svn commit -m"test"
svn: 提交失败(细节如下):
svn: 认证失败
 
F:/Develop/workroom/user1/firstsvn>

用-m命令,加了还是报错,也很正常!不能随便什么人就往版本库里面加东西吧?看上面的一些操作,没有对来访都进行核查,肯定不行的,这就要用到版本库的conf目录.把这个目录打开,总共有三个文件:

svnserve.conf 定义所有认证和授权政策

passwd 存放项目成员帐户信息

authz 主要是做复杂的群组权限控制

把svnserve.conf文件打开,也很多东西,注释更多,其他的不用管,可以看到这么一行:

# anon-access = read

这是对匿名用户的权限,默认为read,可以先把前面的注释去掉,不要留下空格,然后把read改为write,不用重启,再试试之前的命令:

F:/Develop/workroom/user1/firstsvn>svn commit -m"test"
增加           hello.txt
传输文件数据.
提交后的版本为 1。
 
F:/Develop/workroom/user1/firstsvn>

完成了,这个时候你把文件删掉都不怕了,因为版本库中已经有了.那么你要修改这个文件呢?修改完后还是commit就行了.

如果其他成员更新了这个文件,只需要update就可以了:

 
F:/Develop/workroom/user1/firstsvn>svn update
版本 1。

如果删除:

 
F:/Develop/workroom/user1/firstsvn>svn delete hello.txt
D         hello.txt
 
F:/Develop/workroom/user1/firstsvn>

跟add类似,只是加入了一个标记,相当于在你本地删除了,因为你现在在本地看不到这个文件,但是版本库中还有,其他成员可以获取到.你可以通过commit来使删除生效,或者revert来取消这次操作:

 
F:/Develop/workroom/user1/firstsvn>svn revert hello.txt
已恢复“hello.txt”
 
F:/Develop/workroom/user1/firstsvn>

那么现在可以总结一下常用命令:

svn checkout -从版本库取出一个工作拷贝

svn commit -将改动的文件提交到版本库

svn update -更新你的工作拷贝

svn add-向版本库中添加新文件

svn delete-从版本库中删除文件

svn revert-取消所有的本地编辑

还有svn的常用命令:

svn info-显示本地或远程条目的信息

svn list-列出版本库目录的条目

svn status-查看当前工作区状态

svn help-获取帮助信息

还有对于每一个更新的项目之后都会有标记,就像add之后会出现"A",delete之后会出现"D"一样:

A添加

D删除

U更新

C冲突

G合并

Subversion还有目录规范,创建三个顶级目录:

/trunk 存放开发的“主线”

/branches 存放支线副本

/tags 存放标签副本

Subversion 提供了主线、分支管理技术,使得在软件开发中可以更方便、灵活的对项目的进度、版本的发布、版本的维护、软件功能的拓展与定制进行管理。

主线(trunk):一个项目建立时就存在,并伴随着项目的成长而不断的成长,直到项目完全结束。

分支(branch):一般是指功能分支,例如:我们的某个项目要添加一个模块,但这个模块又比较复杂,实现难度比较大。为了不影响主线的稳定,我们就可以创建一个功能分支来专门开发这个模块,当这个模块开发完成以后,并通过测试部门的各项测试,再合并到主线中去。再比如,我们的交警 GPS 项目已经开发完成了,但是这个项目是给泉州交警做的,现在我们又接到了一个交警项目,不过是要给厦门交警大队的。现在厦门交警大队要求我们给他们定制一些功能。我们又不想再主线上进行修改,这个时候,我们也可以创建一个分支,并在这个分支上开发,这时是不会对主线造成影响的。等给厦门开发完成了以后,我们发现,他们要求的有些功能其实很好,以后别的地方可能也需要同样的功能。这个时候我们就可以根据我们的需要,将有用的模块有选择的合并到主线中来。

标签(tag):标签和分支一样,也是一个目录,不过这个目录中一般存放的是发布的信息(当然我们也可以只用分支,但是用标签更清楚明了一些)。还是拿我们的交警项目来举个例子:我们的交警项目开发完成了以后,要拿给泉州交警大队用了,也就是要发布(release),假设这个版本叫做1.0.2。这个时候,我们就要创建一个标签,当泉州交警大队用了三个月,发现了一个 BUG,我们只需要签出这个标签中的代码(它和我们刚提供给泉州交警大队时候的是一模一样的),进行调试,并修正这个 BUG。然后再发布一个版本,假设叫做1.1.0,这个时候我们就在创建一个 1.1.0的标签……

要注意,标签目录里面的代码,要进行严格的控制,除了修正 BUG 外,不能做任何其他的事情。

 



如果本文有任何问题,请及时指出,以免对后来者产生不必要的困扰,不胜感激!

时间: 2024-11-08 17:21:14

版本控制二(创建仓库与使用)的相关文章

EGit用户指南,使用手册,(基础指南,创建仓库,版本跟踪,检查历史)

个人原创,版权所有,转发请标明出处:http://blog.csdn.net/wanghantong 基础指南 1.Adding a project to version control(给项目添加一个版本控制) 当我们的repository发生了变化的时候,我们需要知道是谁触发了这次提交,这个标识是由两部分组成:1.name 2.e-mail address 这个信息是存储在文件 ~/.gitconfig 中. 在我们创建第一次commit(提交)的时候,EGit会询问这个信息.在默认情况下:

Git 教程之创建仓库详解_相关技巧

Git 创建仓库 本章节我们将为大家介绍如何创建一个 Git 仓库. 你可以使用一个已经存在的目录作为Git仓库. git init Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令. 在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓

Git 创建仓库【转】

转自:http://www.runoob.com/git/git-create-repository.html Git 创建仓库 本章节我们将为大家介绍如何创建一个 Git 仓库. 你可以使用一个已经存在的目录作为Git仓库. git init Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令. 在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录

ASP.NET 2.0数据教程之六十二:创建一个用户自定义的Database-Driven Site Map

返回"ASP.NET 2.0数据教程目录" ASP.NET 2.0数据教程之六十二:创建一个用户自定义的Database-Driven Site Map Provider 导言: ASP.NET 2.0的网站地图(site map)功能允许页面开发者在一些 持久介质(persistent medium),比如一个XML文件里,自己定义一个web程序的 site map.一旦定义了之后,我们可以通过System.Web命名空间的SiteMap class 类或某个Web导航控件,比如Si

DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这样浪费时间才写的这篇文章,高手不想的看请路过 本文内容来DevExpress XtraReports帮助文档,如看过类似的请略过. 废话少说 开始正事 一.创建应用程序并添加报表 启动 MS Visual Studio (2005.2008.或 2010). 在 Visua

微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台

原文:微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台  微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 上节我们简单介绍了一下什么是公众号第三方平台,今天我们将具体操作如何创建属于您自己的微信第三方平台. 注册认证 用户首选需要注册成为开发平台的用

windows server 2008 R2虚拟化高可用群集之二创建及配置群集

上篇我们已经将环境准备好了,角色功能均安装到位,现在我们开始创建群集和配置群集吧 首先我们从管理工具中打开故障转移群集管理器,在c1和c2上打开均OK,可以看见常见的任务,验证配置和创建群集以及管理现有群集,验证配置在我们做了上篇的准备后可以略过,直接创建群集吧 本篇分为 1.创建群集 2.配置仲裁磁盘 3.配置群集共享磁盘 4.配置hyper使用群集共享磁盘 ```````````````````````````````````````````````华丽的分割线```````````````

Windows 8风格应用开发入门 二 创建调试应用

我们如何使用Visual Studio 2012创建Windows 8风格应用呢?可归结为以下几步: 1. 选择我们要使用的开发语言,例如:JavaScript.C++.C#.Visual Basic. 2. 选择项目模版,可以选择以下常用的项目模版: 1) 拆分应用(Split App)模版 可以对对该应用进行自定义,以创建允许用户以两列式视图方式查看项目列表和项目详细信息,用户可能需要在项目间快速切换,并且该列表可能会动态更新.例如:新闻阅读器.运动计分应用或电子邮件应用.

hibernate annoation (二 创建表)

为了追踪hibernate的信息 <property name="hibernate.show_sql">true</property> 新建User类: @Entity @Table(name="E_USER",uniqueConstraints={ @UniqueConstraint(columnNames={"yahoo"}) }) public class User { private int id; privat