SVN版本管理工具入门教程(一)

简介: SVN版本管理工具入门教程(一)

1.SVN中的基础概念


  • repository:源代码库,源代码统一存放的地方
  • checkout:当手上没有源代码时,可以从源代码库中checkout一份
  • commit:当你已经修改了代码,就需要commit到源代码仓库
  • update:当你已经checkout了一份源代码后,update一下就可以和源代码仓库上的源代码同步,手上的代码就会有最新的变更。日常使用流程:假设你已经在几天前checkout,update获取最新的代码->自己进行修改并调试成功源代码->commit(大家就可以看到你的修改)
  • 如果两个程序员同时修改了同一个文件, SVN可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,即两个程序员只要不是修改同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN 会提示文件 Conflict, 冲突,需要手动确认。

1.jpg


2.linux系统下安装SVN


  • yum install subversion(Centos下安装)
  • sudo apt-get install subversion(Ubuntu下安装)
  • 查看SVN的版本:subversion --version


cdl@cdl-Inspiron-5421:~$ svn --version
svn,版本 1.9.3 (r1718519)
编译于 Jul 26 2019,15:51:17 在 x86_64-pc-linux-gnu


3.SVN启动模式


  • 在服务端进行SVN版本库的相关配置,手动创建版本库目录:


cdl@cdl-Inspiron-5421:~$ sudo mkdir /opt/svn
[sudo] cdl 的密码:


  • 利用SVN命令创建版本库


svnadmin create /opt/svn/CurryCoder


  • 使用命令svnserve启动服务


  • authz配置文件中对版本库的配置:


[groups]
admin=user1
dev=user2
[CurryCoder:/]
@admin=rw
user2=r
[CurryCoder01:/]
@admin=rw
user2=r
  • 使用svn://192.168.0.1/CurryCoder即可访问CurryCoder版本库


  • authz配置文件中对版本库权限的配置为:


[groups]
admin=user1
dev=user2
[/]
@admin=rw
user2=r


  • 使用svn://192.168.0.1/即可访问CurryCoder版本库
  • -r:决定了版本库的访问方式;
  • --listen-port:指定svn监听端口,不加此参数,默认为3690


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


  • 单库svnserve方式:一个svnserve只能为一个版本库工作;


svnserve -d -r /opt/svn/CurryCoder


  • 多库svnserve方式:指定到版本的上级目录,一个svnserve可以为多个版本库工作。


svnserve -d -r /opt/svn


3.创建版本库


  • 使用svnadmin create 目录进行创建版本库。


cdl@cdl-Inspiron-5421:~$ sudo svnadmin create /opt/svn/CurryCoder01
[sudo] cdl 的密码:
cdl@cdl-Inspiron-5421:~$ ll /opt/svn/CurryCoder01/
总用量 32
drwxr-xr-x 6 root root 4096 5月 26 11:19 ./
drwxr-xr-x 4 root root 4096 5月 26 11:19 ../
drwxr-xr-x 2 root root 4096 5月 26 11:19 conf/
drwxr-sr-x 6 root root 4096 5月 26 11:19 db/
-r--r--r-- 1 root root   2 5月 26 11:19 format
drwxr-xr-x 2 root root 4096 5月 26 11:19 hooks/
drwxr-xr-x 2 root root 4096 5月 26 11:19 locks/
-rw-r--r-- 1 root root 246 5月 26 11:19 README.txt


  • 进入/opt/svn/CurryCoder01/conf目录,修改默认配置参数,包括svnserve.conf、passwd、authz等信息。


  • svn服务配置文件为版本库目录中的文件conf/svnserve.conf,该文件仅由一个[general]配置字段组成:


[general]
anon-access = none     # 控制非授权用户访问版本库的权限
auth-access = write   # 控制授权用户访问版本库的权限。
password-db = /home/svn/passwd
authz-db = /home/svn/authz # 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。默认值:authz
realm = tiku # 指定版本库的认证域,即在登录时提示的认证域名称。


  • 用户名口令文件passwd:用户名口令文件由svnserve.conf的配置项password-db指定,默认为conf目录中的passwd。该文件仅由一个[users]配置段组成:


[users]  
admin = admin # <用户名> = <口令>
CurryCoder = 123456


  • 权限配置文件:权限配置文件由svnserve.conf的配置项authz-db指定,默认为conf目录中的authz。该配置文件由一个[groups]配置段和若干个版本库路径权限段组成:


[groups]   # <用户组> = <用户列表>
g_admin = admin,CurryCoder
[admintools:/] # [<版本库名>:<路径>]
@g_admin = rw
* =
[test:/home/CurryCoder]
CurryCoder = rw
* = r


4.checkout(克隆副本)操作


  • 通过svn://192.168.0.1(具体的svn服务器地址)/CurryCoder01 --username=user01,如下所示:


cdl@cdl-Inspiron-5421:~$ svn checkout svn://192.168.0.1/CurryCoder01 --username=user01
A   CurryCoder01/trunk
A   CurryCoder01/branches
A   CurryCoder01/tags
Checked out revision 1.


  • checkout成功后在当前目录下生成CurryCoder01副本目录,如下所示:


root@cdl-Inspiron-5421:/home/cdl# ll CurryCoder01/
total 24
drwxr-xr-x 6 root root 4096 Jul 21 19:19 ./
drwxr-xr-x 3 root root 4096 Jul 21 19:10 ../
drwxr-xr-x 2 root root 4096 Jul 21 19:19 branches/
drwxr-xr-x 4 root root 4096 Jul 21 19:19 .svn/
drwxr-xr-x 2 root root 4096 Jul 21 19:19 tags/
drwxr-xr-x 2 root root 4096 Jul 21 19:19 trunk/


5.解决版本冲突


  • 版本冲突的产生原因:假设A和B两个程序员都在版本号为100时,修改了HelloWorld.html文件。程序员A在修改完成后提交HelloWorld.html文件到服务器。此时,提交成功后HelloWorld.html文件的版本号变为101。同时,B程序员在版本号为100的HelloWorld.html文件上修改。修改完成后,提交到服务器时,由于不是在当前最新的101版本上修改的,所以提交时会失败。


  • 查看修改后的文件内容:
root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# cat HelloWorld.html
HelloWorld! http://www.runoob.com/


  • 查看更改:


root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn diff
Index: HelloWorld.html
===================================================================
--- HelloWorld.html     (revision 5)
+++ HelloWorld.html     (working copy)
@@ -1,2 +1 @@
-HelloWorld! http://www.runoob.com/
+HelloWorld! http://www.runoob.com/!
  • user01提交会出现失败:
root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn commit -m "change HelloWorld.html first"
Sending       HelloWorld.html
Transmitting file data .svn: E160028: Commit failed (details follow):
svn: E160028: File '/trunk/HelloWorld.html' is out of date
  • 提交失败的原因:HelloWorld.html已经被user02修改并提交到了仓库。svn不会允许user01提交更改,因为user02已经修改了仓库,所以user01的工作副本已经失效。为了避免两人的代码被互相覆盖,svn不允许进行这样的操作。所以user01在提交更改之前必须先更新工作副本。所以使用update命令,如下:


root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn update
Updating '.':
C   HelloWorld.html
Updated to revision 6.
Conflict discovered in file 'HelloWorld.html'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
      (mc) my side of conflict, (tc) their side of conflict, # 输入mc表示以本地文件为主,也可以使用其他选项对冲突文件进行不同的操作。
      (s) show all options: mc
Resolved conflicted state of 'HelloWorld.html'
Summary of conflicts:
Text conflicts: 0 remaining (and 1 already resolved)
  • 默认是更新到最新的版本,也可以指定更新到哪个版本:
svn update -r6
  • 工作副本已经与仓库同步,可以进行提交
root@cdl-Inspiron-5421:~/svn/CurryCoder01/trunk$# svn commit -m "change HelloWorld.html second"


相关文章
|
8月前
|
存储 安全 开发工具
版本管理工具git 与 svn 的区别具体有哪些?
版本管理工具git 与 svn 的区别具体有哪些?
81 0
|
存储
SVN版本管理工具入门教程(二)
SVN版本管理工具入门教程(二)
247 0
SVN版本管理工具的使用
一、svn下载 https://tortoisesvn.net/downloads.html 下载网站 http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.
1080 0
|
1月前
|
存储 网络协议 Ubuntu
Linux环境下的SVN服务器搭建并结合内网穿透实现远程连接
Linux环境下的SVN服务器搭建并结合内网穿透实现远程连接
|
3月前
|
Ubuntu 安全 网络安全
百度搜索:蓝易云【Ubuntu系统SVN服务器搭建教程】
现在,你已经成功在Ubuntu系统上搭建了SVN服务器。其他用户可以通过SVN客户端连接到你的SVN服务器,进行代码版本管理和协作开发。注意,为了安全起见,建议配置SSL加密以保护数据传输。
39 1
|
3月前
|
Apache 项目管理 数据安全/隐私保护
【cpolar】TortoiseSVN如何安装并实现公网提交文件到本地SVN服务器
【cpolar】TortoiseSVN如何安装并实现公网提交文件到本地SVN服务器
46 0
|
7月前
|
IDE Linux 开发工具
从旧服务器迁移svn到另一台新服务器中(linux系统)|遇到诸多坑,已解决
从旧服务器迁移svn到另一台新服务器中(linux系统)|遇到诸多坑,已解决
|
1月前
|
网络协议 Ubuntu Linux
如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问
如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问
|
2月前
|
存储 网络协议 Ubuntu
Linux环境下SVN服务器的搭建与公网访问:使用cpolar端口映射的实现方法
由于文档资料越来越多,将所有资料都存放在自己的电脑上容易混淆,并且也不利于分享。这种情况下,考虑将资料上传SVN统一管理,这样一来其他人也能很方便的查略各种资料。