SVN安装使用教材

发布于 2020-05-14  97 次阅读


 

SVN安装使用教材

 

作者:郭亚望

归档:学习笔记

2019/3/14

夜月一帘幽梦,春风十里柔情。

    

1 SNV的基本操作    1

1.1 检出(svn checkout    1

1.2 更新操作(svn update    1

1.3 提交(svn commit -m "log information" file    1

1.4 SVN服务器环境搭建步骤    1

1.5 安装服务器端程序    1

1.5.1 yum安装    1

1.5.2 验证    1

1.6 创建并配置版本库    2

1.6.1 创建版本库目录    2

1.6.2 在版本库目录下创建具体的项目目录    2

1.6.3 创建版本库    2

1.6.4 版本库内容    2

1.7 配置svn对应的服务    2

1.7.1 将svn加入开机自启动    2

1.7.2 配置对应可执行脚本文件路径    2

1.7.3 启动svn服务    3

2
命令行客户端    3

2.1 创建两个工作区目录,模拟两个开发人员    3

2.2 检出操作    3

2.3 添加    4

2.3.1 svn要求提交一个新建文件前,先把文件添加到版本控制体系    4

2.3.2 认证失败解决办法    4

2.4 提交    5

2.4.1 再返回去提交就可以成功了    5

2.4.2 查看服务器端文件内容    5

2.5 更新操作    5

3
冲突    6

3.1 冲突的概念    6

3.2 冲突的产生     6

3.3 冲突的表现    7

3.4 冲突的解决办法    7

3.4.1 手动解决    7

3.4.2 冲突半自动解决办法    7

3.5 减少冲突的发生    7

4
分支    8

4.1 分支的概念    8

4.1.1 分支开发的作用    8

4.1.2 分支的相关目录    8

5 SVN权限管理    9

5.1 版本库中三个对应的配置文件    9

5.1.1 svnserve.conf配置文件    9

5.1.2 passwd用户名密码配置文件    9

5.1.3 authz分配权限配置文件    9

5.2 权限测试    10

6 TortoiseSVN使用    10

6.1 TortoiseSVN 安装    10

6.2 TortoiseSVN 的使用    13

6.2.1 建立一个 runoob01 的工作目录    13

6.2.2 新增档案及目录到 Repository add commit    17

6.2.3 更新档案及目录 update    20

6.2.4 复制档案及目录 branch    22

6.2.5 合并动作 merge    25

6.2.6 制作 Tag 或是 Release    27

 

  1. SNV的基本操作

  2. 检出(svn checkout)

就是把服务器端版本库的内容完整的下载到本地,在整个开发中制作一次,并且生成工作副本(.svn)

  1. 更新操作(svn update)

把服务器端别人修改的内容下载到本地

  1. 提交(svn commit -m "log information" file)

把本地修改的内容修改到服务器

  1. SVN服务器环境搭建步骤

  2. 安装服务器端程序

    1. yum安装

[root@svn ~]#yum install subversion –y

  1. 验证

[root@svn ~]svn –versione

  1. 创建并配置版本库

    1. 创建版本库目录

[root@svn ~]#mkdir -p /home/svn/svnroot/

  1. 在版本库目录下创建具体的项目目录

[root@svn ~]#mkdir -p /home/svn/svnroot/pro_oa

[root@svn ~]#mkdir -p /home/svn/svnroot/project_oa

  1. 创建版本库

[root@svn ~]#svnadmin create /home/svn/svnroot/pro_oa

  1. 版本库内容

  1. 配置svn对应的服务

    1. 将svn加入开机自启动

[root@svn ~]#chkconfig svnserve on

  1. 配置对应可执行脚本文件路径

[root@svn ~]#vim /etc/rc.d/init.d/svnserve

33 args="-emon -oot /home/svn/svnroot -id-file=${pidfile} $OPTIONS"

  1. 启动svn服务

[root@svn ~]#/etc/init.d/svnserve start

##查看端口号

[root@svn ~]#netstat -lntp |grep 3690

tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1539/svnserve

## 查看进程

[root@svn ~]#ps -ef |grep [s]vnserve

root 1539 1 0 08:38 ? 00:00:00 /usr/bin/svnserve --daemon --root /var/svn/repository --pid-file=/var/run/svnserve.pid

  1. 命令行客户端

  2. 创建两个工作区目录,模拟两个开发人员

[root@kaifa ~]#mkdir -p /root/workspace/harry

[root@kaifa ~]#mkdir -p /root/workspace/sally

  1. 检出操作

[root@kaifa ~/workspace/sally]#svn checkout svn://192.168.28.249/pro_oa ./

取出版本 0。

[root@kaifa ~/workspace/sally]#ls -A

.svn #工作副本,用来和svn服务器进行交互,不要轻易修改

  1. 添加

    1. svn要求提交一个新建文件前,先把文件添加到版本控制体系

svn add 文件名

[root@kaifa ~/workspace/sally]#svn add hello.txt #先纳入到版本控制体系

A hello.txt

[root@kaifa ~/workspace/sally]#svn commit -m "is commiet hello.txt" hello.txt

svn: 提交失败(细节如下):

svn: 认证失败

  1. 认证失败解决办法

回到svn服务器上修改svnserve配置文件

修改配置文件之前先备份,给自己留条后路

[root@svn ~]#cp /home/svn/svnroot/pro_oa/conf/svnserve.conf /home/svn/svnroot/pro_oa/conf/svnserve.conf.bak

[root@svn ~]vim /home/svn/svnroot/pro_oa/conf/svnserve.conf

[general]

anon-access = write

  1. 提交

    1. 再返回去提交就可以成功了

[root@kaifa ~/workspace/sally]#svn commit -m "is commiet hello.txt" hello.txt

增加 hello.txt

传输文件数据.

提交后的版本为 1。

  1. 查看服务器端文件内容

[root@kaifa ~/workspace/sally]#svn list svn://192.168.28.249/pro_oa

hello.txt

  1. 更新操作

作用:就是把服务器端文件所产生的所有修改下载到本地

命令:svn update [文件名] 可选

  1. 别人新创建一个文件更新到本地

    [root@kaifa ~/workspace/sally]#cd ../harry/

    [root@kaifa ~/workspace/harry]#svn checkout svn://192.168.28.249/pro_oa ./

    A hello.txt

    取出版本 1。

    [root@kaifa ~/workspace/harry]#touch test.txt

    [root@kaifa ~/workspace/harry]#svn add test.txt

    A test.txt

    [root@kaifa ~/workspace/harry]#svn commit -m "is harry commit" test.txt

    增加 test.txt

    传输文件数据.

    提交后的版本为 2。

    [root@kaifa ~/workspace/harry]#cd ../sally/

    [root@kaifa ~/workspace/sally]#svn update

    A test.txt

    更新到版本 2。

    [root@kaifa ~/workspace/sally]#ll

    -rw-r--r-- 1 root root 0 3月 14 14:54 hello.txt

    -rw-r--r-- 1 root root 0 3月 14 15:18 test.txt

    1. 冲突

    2. 冲突的概念

    概念:在一个相对服务器端版本来说是旧版本的基础上进行了修改的文件。 

    要求:所有过时的文件都必须先执行更新操作,更新后在最新版基础上修改的 文件才允许提交

    1. 冲突的产生 

    条件 1:本地当前编辑的文件已经过时。 

    条件 2:从服务器端更新下来的修改和本地的修改在"同文件同位置"不一致

    1. 冲突的表现

    发生冲突时文件内代码含有符号

    目录内产生多余的三个配置文件

    1. 冲突的解决办法

      1. 手动解决

    第一步:删除冲突发生时产生的三个文件

    第二步:删除冲突文件内多余的符号

    第三步:把文件编辑到满意的的状态

    第四步:提交

    1. 冲突半自动解决办法

    第一步:设置SVN_EDITOR环境变量

    [root@kaifa ~/workspace/sally]#vim /etc/profile

    SVN_EDITOR=/usr/bin/vim

    export SVN_EDITOR

    [root@kaifa ~/workspace/sally]#source /etc/profile

    [root@kaifa ~/workspace/sally]#echo $SVN_EDITOR

    /usr/bin/vim

    第二步:使用update 更新文件的时候,使用e选项进入文件内容编辑界面

    第三步:编辑完文件之后,使用r选项标记为已解决

    1. 减少冲突的发生

    第一:尽可能在修改文件之前先进行更新操作,尽量在最新版本的基础上修改文件内容

    第二:尽量减少多人同时修改一个文件的可能性

    第三:加强团队成员之间的沟通

    1. 分支

    2. 分支的概念

    在版本控制过程中,使用多个分支同时推进多个不同功能的开发

     

     

    不分支开发人与人之间协作

    使用分支开发团队与团对之间协作

    1. 分支开发的作用

    第一:多个功能开发能够同时进行

    第二:任何一个分支上开发失败,可立即删除,不会对其他分支造成影响

    1. 分支的相关目录

    trunk

    主干

    branches

    分支

    tags

    存放项目开发过程中各个里程碑式的代码

    说明:如果两个分支各自都有新的内容,需要合并两次才能让他们一致

    分支 1:☆☆☆★★★ 分支 2:☆☆☆○○○

    分支 1→分支 2:

    分支 1:☆☆☆★★★

    分支 2:☆☆☆○○○★★★

    分支 2→分支 1:

    分支 1:☆☆☆★★★○○○

    分支 2:☆☆☆○○○★★★

    1. SVN权限管理

    2. 版本库中三个对应的配置文件

    [root@svn ~]#cd /home/svn/svnroot/pro_oa/conf/

    [root@svn /home/svn/svnroot/pro_oa/conf]#ls

    authz

    passwd

    svnserve.conf

    1. svnserve.conf配置文件

    12#anon-access=write

    匿名访问

    13auth-access=write

    授权访问

    20password-db=passwd

    指定设置用户名密码的配置文件

    27authz-db=authz

    分配权限的配置文件

    1. passwd用户名密码配置文件

    [users]

    # harry = harryssecret

    # sally = sallyssecret

    例子

    tom = 123123

    jerry = 123123

    kate = 123123

    用户名 = 密码

    1. authz分配权限配置文件

    [groups]

    # harry_and_sally = harry,sally

    # harry_sally_and_joe = harry,sally,&joe

    kaifa = tom,jerry

    例子

     

     

    用户组 = 用户名,用户名

    [/]

    @kaifa = rw

    kate = r

    * =

    • 针对于版本库目录进行权限设置

    @组名 = 权限值

    用户名 = 权限值

    除上面已经授权的用户以外其他没有任何权限

    1. 权限测试

    [root@kaifa ~/workspace/sally]#svn list svn://192.168.28.249/pro_oa

    1. TortoiseSVN使用

    2. TortoiseSVN 安装

    下载地址:https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载链接。

    目前最新版为 1.11.0 下载地址: https://osdn.net/projects/tortoisesvn/storage/1.11.0/


    在语言补丁包中我们可以找到中文的补丁并下载下来:


    运行下载的 TortoiseSVN 安装程序


    运行下载的 TortoiseSVN 中文语言包


    正确安装后,应该进行一次的重开机,以确保 TortoiseSVN 的正确无误。

    修改 TortoiseSVN 默认语言

    TortoiseSVN 安装完后默认的界面是英文的,我们可以通过设置修改成已安装语言



    1. TortoiseSVN 的使用

      1. 建立一个 runoob01 的工作目录

    所谓的 runoob01 目录其实就是您平常用来存放工作档案的地方。通常我们会等到自己的工作做的一个段落的时候再进行备份。所以我们平常都是在 runoob01 目录下面工作,等到适当时机在 commit repository 中。举例来说,我们想在 D 盘下面建立一个名为 runoob01 的目录。首先先把这个目录建立出来。


    进入创建的目录在空白处按下右键后(您可以在 MyWork 目录的 icon 上按,也可进入 MyWork 目录后,在空白的地方按),选择 SVN checkout


    接着您可以看到如下的画面:


    首先我们要填入的是 repository(版本库)的位置,对于 SVN 来说,repository 的位置都是 URL。版本库 URL 这里填入我们测试的版本仓库地址 svn://10.0.4.17/runoob01

    接着,稍微看一下 Checkout directory(检出至目录),这个字段应该要指向您的 runoob01 目录。


    确认后,按下 OK 按钮,您应该可以看到如下的讯息窗口。


    这样就表示动作完成。按下 OK 按钮后,再到您刚刚建立的目录下。您将会看到 MyWork 目录下面多了一个名为 .svn 的目录(这个目录是隐藏的,如果您的档案管理员没有设定可以看到隐藏目录,您将无法看到它)


    如果您要在一个已经存在的 SVN Server 上面 checkout 出上面的档案,您只需要给定正确的 SVN URL 以及要 checkout 目录的名称。就可以取得指定的档案及目录了。


    1. 新增档案及目录到 Repository add commit

    创建目录 dir01, 在目录里新增文件


    将新增的文件加入到 SVN 版本控制中,TortoiseSVN 会把准备要加入的档案及目录,勾选需要加入的文件。


    按下 OK 后,您将会看到如下的讯息窗口:


    这个 Add(增加)的动作并未真正的将档案放到 Repository 中。仅仅是告知 SVN 准备要在 Repository 中放入这些档案。
    此时的文件状态为:


    这些档案真正的放入到 Repository 中,空白处右键选择 SVN commit(提交) 紧接着,您将会看到如下的窗口出现:


    在这里可以清楚地了解到哪些档案要被 commit repository(版本库)中。同样的,如果您有档案不想在这个时候 commit Repository,您可以取消选取的档案,这样他们就不会被 commit Repository 中。在"信息"文本框中可以写入对本次 commit 的说明。

    点击"确认"后完成 commit 动作,然后您可以到 runoob 目录中,确定是否所有的档案 icon 都有如下的绿色勾勾在上面,这样代表您的档案都正确无误的到 repository 中。



    1. 更新档案及目录 update

    由于版本控制系统多半都是由许多人共同使用。所以,同样的档案可能还有人会去进行编辑。为了确保您工作目录中的档案与 Repository 中的档案是同步的。建议您在编辑前都先进行更新的动作。

    在想要更新的档案或目录 icon 上面按下鼠标右键。并且选择 SVN Update


    有时我们需要回溯至特定的日期或是版本,这时就可以利用 SVN Update to revision 的功能。在想要更新的档案或目录 icon 上面按下鼠标右键。并且选择 TortoiseSVN->Update to revision(更新至版本)



    1. 复制档案及目录 branch

    很多时候您会希望有另外一个复制的目录来进行新的编修。等到确定这个分支的修改已经完毕了,再合并到原来的主要开发版本上。举例来说,我们目前在runoob01/trunk下面有如下的目录及档案:


    现在,我们要为 trunk 这个目录建立一个 branch。假设我们希望这个目录是在 D:\runoob01\branch。首先我们可以在 trunk 目录下面的空白处,或是直接在 trunk icon 下面按下鼠标右键选择 Branch/Tag…(分支/标记)这个选项,您将会看到如下的对话框出现。



    请先确认 From WC at URL(从工作副本/URL): 中的目录是您要复制的来源目录。接着,在 To URL(至路径)中输入您要复制过去的路径。通常我们会将所有的 branch 集中在一个目录下面。以上面的例子来说,branch 档案都会集中在 branch 的子目录下面。在 To URL 中您只需要输入您要的目录即可。目录不存在时,会由 SVN 帮您建立。特别需要注意的是 SVN 因为斜线作为目录分隔字符,而非反斜线。
    接着在 Log message(日志信息)输入您此次 branch 的目的为何。按下 OK 就可以了。

    如果成功,将可以看到下面的画面:


    按下 OK 就可以关闭这个窗口了。如果您此时立刻去 runoob01 目录的 branch 子目录下面,您将会失望的发现在该目录下面并没有刚刚指定的目录存在。这是因为您 runoob01 目录的部份还是旧的,您只需要在 branch 子目录下面进行 SVN update 就可以看到这个新增的目录了。新增的目录就与原来的目录无关了。您可以任意对他进行编辑,一直到您确认好所有在 branch 下面该做的工作都完成后,您可以选择将这个 branch merge 回原来的 trunk 目录,或者是保留它在 branch 中。


    1. 合并动作 merge

    假如我们在 branch 分支中对文件进行了修改或增加了文件,要 merge trunk 目录中,方法很简单。以上面的例子来说,我们在 D:\runoob01\trunk目录空白处,按下鼠标右键,选择 Merge(合并):


    这个画面主要分为三个部份,前面的 From: To: 是要问您打算从 Branch 中的哪个版本到哪个版本,merge 回原来的 trunk 目录中。因此,From To URL 字段应当都是指定原来 branch 的目录下。剩下的就是指定要 merge revision 范围。以上面的例子而言,我们从 Branch Revision 7 开始 merge Branch 下面的最新版本。您可以透过,Dry run 按钮,试作一次 Merge。这个 merge 只会显示一些讯息,不会真正的更新到 trunk 的目录去。只有按下 Merge 按钮后,才会真正的将 branch 的档案与 trunk 的档案合并起来。


    如果您确认这次的 merge 没有问题,您可以直接使用 commit 来将这两个被修改的档案 commit SVN repository 上。如果有问题,您可以直接修改这两个档案,直到确认 ok 了,再行 commit


    1. 制作 Tag 或是 Release

    所谓的 Tag 或是 Release 就是一个特别的版本,因为这个版本可能有特别的意义。例如:这个版本是特别的 Milestone 或是 release 给客户的版本。其实,Tag Release 的作法与 Branch 完全相同。只是 Branch 可能会需要 merge 回原来的 trunk 中,而 tag release 大部分都不需要 merge trunk 中。

    举例来说,今天我们的 trunk 做了一版,这个版本被认定是软件的 1.0 版。 1.0版对于开发来说是一个非常重要的里程碑。所以我们要特别为他做一个标记,亦即 Tag。假设,这个 1.0 版是要正式 release 给客户或是相关 vendor,我们要可以为他做一个 Release 的标记。基本上,SVN 只有目录的概念,并没有什么 Tag 的用法。所以您会看到在 SVN 的选单上面,Branch Tag 是同一个项目。以这个 1.0 的例子来说,我们在 runoob01 目录下创建 tags 目录用于存放打 tag 的版本,并提交到版本库,然后在 Trunk 上面,按下鼠标右键,选择 Branch/Tag 的项目:



    成功的话,您就在对应的 Tag 目录下面建立了一个 v1.0 的目录。当然,如果您这时到 Tag 的目录下面去,会看不到这个目录,您需要在 Tag 目录下面 update 一下,才能看到它。


     


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。