SVN简单教程

SVN简单教程

1、下载svn


地址:http://subversion.apache.org/packages.html#windows

SVN简单教程
进入页面,点击下载

SVN简单教程

2、安装

window的安装方式相信大家都很熟悉,就是双击msi文件,一路next下去,知道安装完成为止。中途可以选择安装路径,建议不要使用默认的C盘

3、配置环境变量

安装完成后的目录结构:

SVN简单教程

将bin目录配置到环境变量Path中:

右键计算机  > 属性 > 高级系统设置  > 环境变量  > 系统变量下面的新建
SVN简单教程

添加到Path

SVN简单教程

确认配置成功

SVN简单教程


4、SVN生命周期 - 创建版本库

版本库相当于一个集中的空间,用于存放开发者所有的工作成果。版本库不仅能存放文件,还包括了每次修改的历史,即每个文件的变动历史。

Create 操作是用来创建一个新的版本库。大多数情况下这个操作只会执行一次。当你创建一个新的版本库的时候,你的版本控制系统会让你提供一些信息来标识版本库,例如创建的位置和版本库的名字。


5、SVN生命周期 - 检出(Checkout)

Checkout 操作是用来从版本库创建一个工作副本。工作副本是开发者私人的工作空间,可以进行内容的修改,然后提交到版本库中。

6、SVN生命周期 - 更新 (Update)

顾名思义,update 操作是用来更新版本库的。这个操作将工作副本与版本库进行同步。由于版本库是由整个团队共用的,当其他人提交了他们的改动之后,你的工作副本就会过期。

让我们假设 Tom 和 Jerry 是一个项目的两个开发者。他们同时从版本库中检出了最新的版本并开始工作。此时,工作副本是与版本库完全同步的。然后,Jerry 很高效的完成了他的工作并提交了更改到版本库中。

此时 Tom 的工作副本就过期了。更新操作将会从版本库中拉取 Jerry 的最新改动并将 Tom 的工作副本进行更新。


7、SVN生命周期 - 提交(Commit)

当检出之后,你就可以做很多操作来执行变更。编辑是最常用的操作。你可以编辑已存在的文件来,例如进行文件的添加/删除操作。

你可以添加文件/目录。但是这些添加的文件目录不会立刻成为版本库的一部分,而是被添加进待变更列表中,直到执行了 commit 操作后才会成为版本库的一部分。

同样地你可以删除文件/目录。删除操作立刻将文件从工作副本中删除掉,但该文件的实际删除只是被添加到了待变更列表中,直到执行了 commit 操作后才会真正删除。

Rename 操作可以更改文件/目录的名字。"移动"操作用来将文件/目录从一处移动到版本库中的另一处。

Commit 操作是用来将更改从工作副本到版本库。这个操作会修改版本库的内容,其它开发者可以通过更新他们的工作副本来查看这些修改。

在提交之前,你必须将文件/目录添加到待变更列表中。列表中记录了将会被提交的改动。当提交的时候,我们通常会提供一个注释来说明为什么会进行这些改动。这个注释也会成为版本库历史记录的一部分。Commit 是一个原子操作,也就是说要么完全提交成功,要么失败回滚。用户不会看到成功提交一半的情况。



8、复查

当你检出工作副本或者更新工作副本后,你的工作副本就跟版本库完全同步了。但是当你对工作副本进行一些修改之后,你的工作副本会比版本库要新。在 commit 操作之前复查下你的修改是一个很好的习惯。

Status 操作列出了工作副本中所进行的变动。正如我们之前提到的,你对工作副本的任何改动都会成为待变更列表的一部分。Status 操作就是用来查看这个待变更列表。

Status 操作只是提供了一个变动列表,但并不提供变动的详细信息。你可以用 diff 操作来查看这些变动的详细信息。

9、还原

我们来假设你对工作副本做了许多修改,但是现在你不想要这些修改了,这时候 revert 操作将会帮助你。

Revert 操作重置了对工作副本的修改。它可以重置一个或多个文件/目录。当然它也可以重置整个工作副本。在这种情况下,revert 操作将会销毁待变更列表并将工作副本恢复到原始状态。

10、解决冲突

合并的时候可能会发生冲突。Merge 操作会自动处理可以安全合并的东西。其它的会被当做冲突。例如,"hello.c" 文件在一个分支上被修改,在另一个分支上被删除了。这种情况就需要人为处理。Resolve 操作就是用来帮助用户找出冲突并告诉版本库如何处理这些冲突。


11、配置版本库

手工创建目录:
mkdir D:\svn\warehouse

利用svn命令创建版本库
svnadmin create D:\svn\warehouse\example
创建完成后你可以看下,svn自动创建了一些文件和文件夹

进入刚才创建的版本库目录  D:\svn\warehouse\example\conf
分别修改svnserve.conf、passwd、authz 配置相关用户和权限
1、服务配置文件svnserve.conf修改如下:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

anon-access: 控制非鉴权用户访问版本库的权限,取值范围为"write"、"read"和"none"。 即"write"为可读可写,"read"为只读,"none"表示无访问权限。 缺省值:read
auth-access: 控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。 即"write"为可读可写,"read"为只读,"none"表示无访问权限。 缺省值:write
authz-db: 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径,否则文件位置为相对conf目录的相对路径。 缺省值:authz
realm: 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的 认证域相同,建议使用相同的用户名口令数据文件。 缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。

2、用户名口令文件由svnserve.conf的配置项password-db指定,缺省为conf目录中的passwd。该文件仅由一个[users]配置段组成passwd修改如下:
说明:<用户名> = <口令>
[users]
admin = admin
develop = laizhiyuan

3、权限配置文件由svnserve.conf的配置项authz-db指定,缺省为conf目录中的authz。该配置文件由一个[groups]配置段和若干个版本库路径权限段组成,修改如下:
说明:<用户组> = <用户列表>
[groups]
group_admin = admin,laizhiyuan

说明:[<版本库名>:<路径>]
[/]
@group_admin = rw #该组的成员可以读写

* = r #其它人只能读

12、启动SVN服务

使用命令svnserve启动服务:

svnserve -d -r  D:\svn\warehouse --listen-port 3690

-r: 配置方式决定了版本库访问方式。
--listen-port: 指定SVN监听端口,不加此参数,SVN默认监听3690
由于-r 配置方式的不一样,SVN启动就可以有两种不同的访问方式
方式一:-r直接指定到版本库(称之为单库svnserve方式)
svnserve -d -r  D:\svn\warehouse\example
在这种情况下,一个svnserve只能为一个版本库工作。
使用类似这样的URL:svn://127.0.0.1/ 即可访问example版本库

方式二:指定到版本库的上级目录(称之为多库svnserve方式)
svnserve -d -r  D:\svn\warehouse
这种情况,一个svnserve可以为多个版本库工作
使用类似这样的URL:svn://127.0.0.1/example 即可访问example版本库。

13、检出

svn checkout svn://127.0.0.1/example --username=laizhiyuan