教程说明
- 本系列教程目录大纲:《SVN系列教程-目录大纲》
《SVN系列教程-第二章-SVN命令的使用》
1.1 项目库配置
1.1.1 创建项目库
svn可以通过命令行的方式帮我们创建一个项目的版本库,在一个空白文件夹中打开cmd窗口,输入命令:
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文件,文件内容:
11111
22222
33333
44444
然后执行add命令:
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)直接提交:
PS D:\workspace\xiaohui\test_oa> svn commit -m "xiaohui第一次提交abc.txt" abc.txt
svn: E200009: Commit failed (details follow):
svn: E200009: 'D:\workspace\xiaolan\test\_oa\abc.txt' is not under version control
PS D:\workspace\xiaolan\test_oa>
提示:文件没有被纳入到版本控制,不可提交;
1)将abc.txt纳入到版本控制:
svn add abc.txt
2)提交:
svn commit -m "xiaohui第一次提交abc文件" abc.txt
1.2.4 更新操作
作用:将服务器的最新文件(版本)更新到本地
- 格式:
svn update 文件名
- 示例:
使用xiaolan用户更新hello.txt文件:
PS D:\workspace\xiaolan\test_oa> svn update hello.txt
Updating 'hello.txt':
A hello.txt
Updated to revision 2.
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命令添加到版本库控制
svn add test.txt
3)提交到服务器
svn commit -m "初始化test.txt" test.txt
4)查看svn服务器文件列表:
PS D:\workspace\xiaohui\test_oa> svn list svn://localhost:8888/test_oa
5)xiaolan执行update操作(执行完毕后,小蓝的工作目录下多了一个test.txt):
svn update test.txt
6)删除文件:
svn delete test.txt
7)再次svn服务器文件列表:
PS D:\workspace\xiaohui\test_oa> svn list svn://localhost:8888/test_oa
发现test.txt文件依旧存在
8)提交删除操作:
svn commit -m "删除test.txt" test.txt
9)此时查看svn服务器文件列表发现test.txt不存在了
10)xiaolan用户更新当前文件夹(会发现删除了test.txt)
svn update test_oa
1.3 冲突
1.3.1 旧版本冲突
我们在提交前,必须保证当前版本是最新的版本,不可使用旧版本提交;
1)演示冲突
- 案例:
1)xiaohui在hello.txt文件中编辑某行记录,文件内容如下:
11111aaa
22222
33333
44444
2)然后提交:
PS D:\workspace\xiaohui\test_oa> svn commit -m "xiaohui update" hello.txt
Sending hello.txt
Transmitting file data .done
Committing transaction...
Committed revision 3.
PS D:\workspace\xiaohui\test_oa>
文件版本已经更新到了3;
3)xiaolan也在hello.txt文件中编辑某行记录,文件内容如下:
11111
22222bbb
33333
44444
4)然后提交(注意:没有更新到最新版本,此时文件版本还是2)
PS D:\workspace\xiaolan\test_oa> svn commit -m "xiaolan update" hello.txt
Sending hello.txt
Transmitting file data .done
Committing transaction...
svn: E160028: Commit failed (details follow):
svn: E160028: File '/hello.txt' is out of date
出现错误,使用了过时的版本提交;
2)解决冲突
我们在提交代码时,必须保证我们当前代码的版本是最新的才能提交;
1)首先更新一下代码,保证代码是最新的:
PS D:\workspace\xiaolan\test_oa> svn update hello.txt
Updating 'hello.txt':
G hello.txt
Updated to revision 3.
查看文件内容:
2)再进行提交
PS D:\workspace\xiaolan\test_oa> svn commit -m "xiaolan update" hello.txt
Sending hello.txt
Transmitting file data .done
Committing transaction...
Committed revision 4.
1.3.2 代码编辑冲突
在"旧版本编辑冲突"案例中,xiaohui和xiaolan两个用户编辑的不是同一行记录,万一两个用户编辑的是同一行记录,那么这个时候就会出现代码编辑冲突
1)演示冲突
首先将xiaohui的hello.txt更新到最新版本:
PS D:\workspace\xiaohui\test_oa> svn update hello.txt
Updating 'hello.txt':
U hello.txt
Updated to revision 4.
1)xiaohui编辑hello.txt文件如下:
11111aaa
22222bbb
33333ccc
44444
2)xiaohui提交hello.txt文件:
PS D:\workspace\xiaohui\test_oa> svn commit -m "xiaohui修改第三行数据" hello.txt
Sending hello.txt
Transmitting file data .done
Committing transaction...
Committed revision 5.
此时文件的版本变为了5
3)xiaolan编辑hello.txt文件如下:
11111aaa
22222bbb
33333ddd
44444
提交前首先更新到最新版本:
PS D:\workspace\xiaolan\test_oa> svn update hello.txt
Updating 'hello.txt':
C hello.txt
Updated to revision 5.
Summary of conflicts:
Text conflicts: 1
Conflict discovered in file 'hello.txt'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
(mc) my side of conflict, (tc) their side of conflict,
(s) show all options:
出现代码冲突:
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!