《SVN系列教程-第二章-SVN命令的使用》

r囧r小猫 2022-09-10 09:27 485阅读 0赞

教程说明

  • 本系列教程目录大纲:《SVN系列教程-目录大纲》

《SVN系列教程-第二章-SVN命令的使用》

1.1 项目库配置

1.1.1 创建项目库

svn可以通过命令行的方式帮我们创建一个项目的版本库,在一个空白文件夹中打开cmd窗口,输入命令:

  1. svnadmin create ./test_crm

在这里插入图片描述

在当前目录下创建test_crm项目版本库;

查看完整项目版本库目录:

在这里插入图片描述

  • conf:版本库配置文件目录
  • db:版本数据存储目录
  • hooks:存放版本库勾子目录
  • locks:存储库锁目录,用来跟踪库的访问者
  • format:存储一个整数的文件,此整数代表库层次结构版本

1.1.2 开启服务仓库监听

服务器监听:

  • 语法:

    svnserve -d -r 目录 —listen-port 端口号

  • 示例:

    svnserve -d -r d:\000 —listen-port 8888

服务端口默认是3690

1.1.3 权限配置

修改版本库中conf目录下的svnserver.conf文件:

D:\000\test_oa\conf\svnserver.conf

在这里插入图片描述

  • anon-access:匿名用户拥有的权限;
  • auth-access:认证后的用户拥有的权限;

权限可选值有:

  • read:默认值,只允许读
  • write:允许读/写
  • none:不可读,不可写

1.2 SVN的命令操作

我们前面配置好了项目库,接下来我们就模拟多个用户协同开发的情况;

创建两个空目录(模拟两个用户):

在这里插入图片描述

1.2.1 检出操作

  • checkout:检出操作;在SVN中,检出操作会将版本库中的内容复制到本地一份,同时建立与版本库之间的关系,纳入到版本库体系中进行监管;

在cmd窗口中执行:

  • xiaohui:

    D:\workspace\xiaohui> svn checkout svn://localhost:8888/test_oa ./test_oa

./test_oa:代表检出到当前目录下的test_oa目录

  • xiaolan:

    D:\workspace\xiaolan> svn checkout svn://localhost:8888/test_oa ./test_oa

检出完成后,当前目录会出现一个.svn文件夹,该文件夹默认是隐藏状态,.svn所在的目录就是副本目录,也叫工作副本;我们以后要进行版本控制相关的操作都需要在工作副本目录执行;

1.2.2 添加操作

我们首次提交任何文件到服务器之前都应该先使用add命令将其添加到版本控制体系中,让svn服务器对其进行版本的控制管理;

在当前目录下新建一个hello.txt文件,文件内容:

  1. 11111
  2. 22222
  3. 33333
  4. 44444

然后执行add命令:

  1. PS D:\workspace\xiaohui\test_oa> svn add hello.txt

在这里插入图片描述

1.2.3 提交操作

作用:提交操作用于将已经被纳入到版本控制的文件提交到svn服务器;

  • 格式:

    svn commit -m ‘日志信息’ 文件名

注意:提交时必须写日志信息,否则不能提交;

  • 示例:

    PS D:\workspace\xiaohui\test_oa> svn commit -m “xiaohui第一次提交hello.txt” hello.txt
    Adding hello.txt
    Transmitting file data .done
    Committing transaction…
    Committed revision 1.
    PS D:\workspace\xiaohui\test_oa>

在这里插入图片描述

注意:只有当执行了add操作后,才可以进行提交到服务器,例如我们在目录下创建一个abc.txt,直接提交将会出现错误:

1)在当前目录新建一个abc.txt文件;

2)直接提交:

  1. PS D:\workspace\xiaohui\test_oa> svn commit -m "xiaohui第一次提交abc.txt" abc.txt
  2. svn: E200009: Commit failed (details follow):
  3. svn: E200009: 'D:\workspace\xiaolan\test_oa\abc.txt' is not under version control
  4. PS D:\workspace\xiaolan\test_oa>

在这里插入图片描述

提示:文件没有被纳入到版本控制,不可提交;

1)将abc.txt纳入到版本控制:

  1. svn add abc.txt

2)提交:

  1. svn commit -m "xiaohui第一次提交abc文件" abc.txt

在这里插入图片描述

1.2.4 更新操作

作用:将服务器的最新文件(版本)更新到本地

  • 格式:

    svn update 文件名

  • 示例:

使用xiaolan用户更新hello.txt文件:

  1. PS D:\workspace\xiaolan\test_oa> svn update hello.txt
  2. Updating 'hello.txt':
  3. A hello.txt
  4. Updated to revision 2.
  5. PS D:\workspace\xiaohui\test_oa>

在这里插入图片描述

1.2.5 删除操作

当我们需要删除svn服务器中的文件时不能使用windows进行删除,那样只是删除工作副本的文件,当我们执行更新操作时,被删除的文件又会被重新下载下来;因为我们并没有删除svn服务器中的文件,要删除svn服务器中的文件,必须使用svn提供的命令来删除;

  • 格式:

    svn delete 文件名

    svn commit -m 日志 删除的文件

tips:删除文件之后,需要提交删除的文件,代表更新到服务器;

测试:

1)xiaihui创建一个test.txt文件

2)使用add命令添加到版本库控制

  1. svn add test.txt

3)提交到服务器

  1. svn commit -m "初始化test.txt" test.txt

4)查看svn服务器文件列表:

  1. PS D:\workspace\xiaohui\test_oa> svn list svn://localhost:8888/test_oa

在这里插入图片描述

5)xiaolan执行update操作(执行完毕后,小蓝的工作目录下多了一个test.txt):

  1. svn update test.txt

6)删除文件:

  1. svn delete test.txt

7)再次svn服务器文件列表:

  1. PS D:\workspace\xiaohui\test_oa> svn list svn://localhost:8888/test_oa

发现test.txt文件依旧存在

8)提交删除操作:

  1. svn commit -m "删除test.txt" test.txt

9)此时查看svn服务器文件列表发现test.txt不存在了

10)xiaolan用户更新当前文件夹(会发现删除了test.txt)

  1. svn update test_oa

1.3 冲突

1.3.1 旧版本冲突

我们在提交前,必须保证当前版本是最新的版本,不可使用旧版本提交;

1)演示冲突

  • 案例:

1)xiaohui在hello.txt文件中编辑某行记录,文件内容如下:

  1. 11111aaa
  2. 22222
  3. 33333
  4. 44444

2)然后提交:

  1. PS D:\workspace\xiaohui\test_oa> svn commit -m "xiaohui update" hello.txt
  2. Sending hello.txt
  3. Transmitting file data .done
  4. Committing transaction...
  5. Committed revision 3.
  6. PS D:\workspace\xiaohui\test_oa>

在这里插入图片描述

文件版本已经更新到了3;

3)xiaolan也在hello.txt文件中编辑某行记录,文件内容如下:

  1. 11111
  2. 22222bbb
  3. 33333
  4. 44444

4)然后提交(注意:没有更新到最新版本,此时文件版本还是2

  1. PS D:\workspace\xiaolan\test_oa> svn commit -m "xiaolan update" hello.txt
  2. Sending hello.txt
  3. Transmitting file data .done
  4. Committing transaction...
  5. svn: E160028: Commit failed (details follow):
  6. svn: E160028: File '/hello.txt' is out of date

在这里插入图片描述

出现错误,使用了过时的版本提交;

2)解决冲突

我们在提交代码时,必须保证我们当前代码的版本是最新的才能提交;

1)首先更新一下代码,保证代码是最新的:

  1. PS D:\workspace\xiaolan\test_oa> svn update hello.txt
  2. Updating 'hello.txt':
  3. G hello.txt
  4. Updated to revision 3.

查看文件内容:

在这里插入图片描述

2)再进行提交

  1. PS D:\workspace\xiaolan\test_oa> svn commit -m "xiaolan update" hello.txt
  2. Sending hello.txt
  3. Transmitting file data .done
  4. Committing transaction...
  5. Committed revision 4.

在这里插入图片描述

1.3.2 代码编辑冲突

在”旧版本编辑冲突”案例中,xiaohui和xiaolan两个用户编辑的不是同一行记录,万一两个用户编辑的是同一行记录,那么这个时候就会出现代码编辑冲突

1)演示冲突

首先将xiaohui的hello.txt更新到最新版本:

  1. PS D:\workspace\xiaohui\test_oa> svn update hello.txt
  2. Updating 'hello.txt':
  3. U hello.txt
  4. Updated to revision 4.

1)xiaohui编辑hello.txt文件如下:

  1. 11111aaa
  2. 22222bbb
  3. 33333ccc
  4. 44444

2)xiaohui提交hello.txt文件:

  1. PS D:\workspace\xiaohui\test_oa> svn commit -m "xiaohui修改第三行数据" hello.txt
  2. Sending hello.txt
  3. Transmitting file data .done
  4. Committing transaction...
  5. Committed revision 5.

此时文件的版本变为了5

3)xiaolan编辑hello.txt文件如下:

  1. 11111aaa
  2. 22222bbb
  3. 33333ddd
  4. 44444

提交前首先更新到最新版本:

  1. PS D:\workspace\xiaolan\test_oa> svn update hello.txt
  2. Updating 'hello.txt':
  3. C hello.txt
  4. Updated to revision 5.
  5. Summary of conflicts:
  6. Text conflicts: 1
  7. Conflict discovered in file 'hello.txt'.
  8. Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
  9. (mc) my side of conflict, (tc) their side of conflict,
  10. (s) show all options:

出现代码冲突:

在这里插入图片描述

注意:文件版本变为5了;

可选值如下:

  • p:推迟处理
  • df:显示差异
  • e:编辑文件
  • m:合并
  • mc:显示我的版本
  • tc:显示他人的版本
  • s:其他选项

2)解决冲突

我们选择p,表示推迟处理,在出现冲突的文件同级目录中出现如下几个文件:

在这里插入图片描述

  • hello.txt:出现冲突的文件内容

    11111aaa
    22222bbb
    <<<<<<< .mine
    33333ddd
    ||||||| .r4

    33333

    33333ccc

    .r5
    44444

  • hello.txt.mine:我们的文件内容

    11111aaa
    22222bbb
    33333ddd
    44444

  • hello.txt.r4:4版本的文件内容

    11111aaa
    22222bbb
    33333
    44444

  • hello.txt.r5:5版本的文件内容

    11111aaa
    22222bbb
    33333ccc
    44444

我们可以选择自己需要的内容填充到hello.txt中,然后直接提交:

  1. PS D:\workspace\xiaolan\test_oa> svn commit -m "xiaolan update" hello.txt
  2. Sending hello.txt
  3. Transmitting file data .done
  4. Committing transaction...
  5. Committed revision 6.
  6. PS D:\workspace\xiaolan\test_oa>

注意:文件版本变为5了

1.4 svn其他操作命令

1.4.1 log命令

  • 作用:log命令用于查看svn版本库的版本变更日志:
  • 格式:

    svn log [-r 起始版本:终止版本] 仓库地址

  • 示例:

    svn log -r 5:10 svn://localhost:8888/test_oa

    svn log svn://localhost:8888/test_oa

在这里插入图片描述

1.4.2 list命令

  • 作用:查看当前服务器文件列表:

    svn list svn://localhost:8888/test_oa

在这里插入图片描述

1.4.3 diff命令

diff命令有多种用法,主要用于比较两个版本的不同

  • 1)用法1:对比两个版本的不同

    • 格式:
    • svn diff -r版本1:版本2
    • 示例:
    • svn diff -r14:13 111.txt
    • 在这里插入图片描述
  • 2)用法2:对比当前工作副本中的文件内容与svn服务器文件内容

    • 格式:
    • svn diff -rhead 文件名
    • 示例:
    • svn diff -rhead 111.txt
    • 在这里插入图片描述

1.4.4 merge命令

merge命令用于版本的回退

  • 格式:

    svn merge -r 当前最新版本:需要回退到的版本 文件名

  • 示例:

    svn merge -r 15:14 111.txt

    回退后需要重新提交到svn服务器

    svn commit -m “回退到14版本” 111.txt

1.4.5 revert命令

revert命令用于撤销一系列动作,例如文件被执行了删除可以撤销、提交后出现冲突也可以撤销,回退到了指定版本也可以撤销;

  • 格式:

    svn revert 文件名

1.4.5.1 删除撤销

1)删除hello.txt文件:

  1. svn delete hello.txt

2)撤销删除:

  1. svn revert hello.txt

1.4.5.2 冲突撤销

说明:此时xiaohui和xiaolan都是最新版本的abc.txt文件,内容如下:

  1. aaa
  2. bbb
  3. ccc

1)xiaohui编辑abc.txt:

  1. aaa111
  2. bbb
  3. ccc

2)xiaohui提交文件:

  1. PS D:\workspace\xiaohui\test_oa> svn commit -m "在第一行添加111" abc.txt
  2. Sending abc.txt
  3. Transmitting file data .done
  4. Committing transaction...
  5. Committed revision 21.

3)xiaolan编辑abc.txt:

  1. aaa222
  2. bbb
  3. ccc

4)xiaolan更新到最新版本(产生冲突,出现冲突文件):

  1. PS D:\workspace\xiaolan\test_oa> svn update abc.txt
  2. Updating 'abc.txt':
  3. C abc.txt
  4. Updated to revision 21.
  5. Summary of conflicts:
  6. Text conflicts: 1
  7. Conflict discovered in file 'abc.txt'.
  8. Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
  9. (mc) my side of conflict, (tc) their side of conflict,
  10. (s) show all options: p
  11. Summary of conflicts:
  12. Text conflicts: 1

出现冲突文件:

在这里插入图片描述

5)撤销冲突:

  1. svn revert abc.txt

tips:撤销冲突后,abc.txt文件版本变为21,也就是xiaohui提交的内容;

图解:

在这里插入图片描述

1.4.5.3 回退撤销

1)xiaohui新建222.txt:

2)添加到版本库进行版本管理:

  1. svn add 222.txt

3)提交到svn服务器:

  1. PS D:\workspace\xiaohui\test_oa> svn commit -m "初始化222文件" 222.txt
  2. Adding 222.txt
  3. Transmitting file data .done
  4. Committing transaction...
  5. Committed revision 22.

3)xiaolan进行update:

  1. PS D:\workspace\xiaolan\test_oa> svn update 222.txt
  2. Updating '222.txt':
  3. A 222.txt
  4. Updated to revision 22.

4)xiaolan编辑文件,然后提交:

  1. PS D:\workspace\xiaolan\test_oa> svn commit -m "新增一行bbb" 222.txt
  2. Sending 222.txt
  3. Transmitting file data .done
  4. Committing transaction...
  5. Committed revision 23.

5)xiaohui进行更新:

  1. PS D:\workspace\xiaohui\test_oa> svn update 222.txt
  2. Updating '222.txt':
  3. U 222.txt
  4. Updated to revision 23.

6)xiaohui进行版本回退:

  1. PS D:\workspace\xiaohui\test_oa> svn merge -r 23:22 222.txt
  2. --- Reverse-merging r23 into '222.txt':
  3. U 222.txt
  4. --- Recording mergeinfo for reverse merge of r23 into '222.txt':
  5. U 222.txt
  6. --- Eliding mergeinfo from '222.txt':

发表评论

表情:
评论列表 (有 0 条评论,485人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SVN使用教程

    [SVN使用教程总结][SVN] SVN简介: 为什么要使用SVN?   公司多人协同开发有需要,类似于GIT, 关于git可以看我之前的博客[git的使用\[转\]