SVN

简介

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。

互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

SVN两大功能的体现

(1)一个公司一个项目通常会是一个团队一起开发,那么组员开发完了后,如何把代码项目文件等组织到一起来呢?SVN可以解决此问题,组织分工协作的代码,协同多人开发一个项目。

(2)通常一个功能点,可能在实际工作中会根据业务有很多的变更,例如第一期登陆版本开发完毕,又开发了第二期、第三期等等,这时,客户说不想用当前的版本要使用当初第一期的版本。这个时候如何让项目登陆功能回到第一期呢?SVN可以解决此类问题,对于历史存留的文件可访问,可以很好的恢复到之前的版本。

从服务器下载项目组最新代码;
进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)
下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

SVN服务搭建

yum install -y subversion    

svnserve --version //查看版本信息

在这里插入图片描述
在这里插入图片描述ubversion默认以/var/svn作为数据根目录,可以通过/etc/sysconfig/svnserve修改这个默认位置,先查看下svnserve.service文件,发现EnvironmentFile=/etc/sysconfig/svnserve

修改/etc/sysconfig/svnserver将默认目录指定到/opt/svn

使用svnadmin建立版本库

mkdir -p /opt/svn/repo       //创建/opt/svn/repo目录
svnadmin create /opt/svn/repo/    //创建一个版本仓库

在这里插入图片描述s /opt/svn/repo/    
conf db format hooks locks README.txt

注:
conf ——用户认证和权限、配置文件
db ——版本控制信息产生的数据
format ——当前代码库账号数据

hooks:存放版本库子目录,比如我们要实现同步更新的操作,在这里实现
locks:存放库锁目录,用来跟踪库的访问者

调整SVN参数

cd /opt/svn/repo/conf/

vi svnserve.conf      //总体配置
去掉注释,修改以下内容:
anon-access = none      //匿名用户没有任何权限
auth-access = write      //认证用户具有写权限
password-db = /opt/svn/repo/conf/passwd    //用户的密码文件
authz-db = /opt/svn/repo/conf/authz    //用户信息文件
realm =    #指定版本库的认证域,即在登录时提示的认证域名称 

在这里插入图片描述
在这里插入图片描述

注:配置文件分为两部分:
一部分[general]全局配置
一部分[sasl]用于标识是否进行SASL加密处理;
变量min-encryption和max-encryption控制服务器所需要的加密强度

启动SVN服务

svnserve -d -r /opt/svn/repo/     //以守护模式启动SVN服务,关闭用kill pid
netstat -anptu | grep svnserve  //3690端口监听

在这里插入图片描述
为程序员建立账户,配置对repo仓库具有的权限,并将帐号信息及仓库目录信息反馈给程序员。
vi passwd //明文设置用户和密码

tom = abc123 //格式:用户名 = 用户密码

sysadmin = sysadmin

在这里插入图片描述

vi authz //详细权限配置文件

[/] 根目录,也就是/opt/svn/repo

sysadmin = r
alpha = r

[/webphp] //指定目录

sysadmin = r    //运维工程师账户具有读权限,用于部署
tom = rw     //程序员对此目录有读写权限

在这里插入图片描述
mkdir /opt/svn/repo/webphp //创建要被管理的目录

svn import webphp file:///opt/svn/repo/webphp/ -m "init web"   //初始化目录,导入webphp

初始化后,会自动得到一个版本为1 ,再看webphp没有东西,因为没在里面写东西。

在这里插入图片描述

始化后,会自动得到一个版本为1 ,再看webphp没有东西,因为程序员没在里面写东西。

第六部:测试
svn co svn://192.168.80.100/webphp //客户端访问
root的密码:输入虚拟机的root登录密码
alpha的密码:输入写入账户密码文件的账户和密码

保存未加密的密码(yes/no)? yes

Linux下客户端使用SVN
1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co

2、往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)

3、将改动的文件提交到版本库

svn commit -m “LogMessage” [-N] [–no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test” test.php
简写:svn ci

4、加锁/解锁
svn lock -m “LockMessage” [–force] PATH
例如:svn lock -m “lock test file” test.php
svn unlock PATH

5、更新到某个版本
svn update -r m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up

6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st

7、删除文件
svn delete path -m “delete test fle”
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
或者直接svn delete test.php 然后再svn ci -m 'delete test file‘,推荐使用这种
简写:svn (del, remove, rm)

8、查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

9、查看文件详细信息

 svn info path

例如:svn info test.php

10、比较差异

svn diff path(将修改的文件与基础版本比较)
   例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
   例如:svn diff -r 200:201 test.php
   简写:svn di

11、将两个版本之间的差异合并到当前文件

svn merge -r m:n path

例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

12、SVN 帮助

svn help
svn help ci

13、版本库下的文件和目录列表

svn list path

显示path目录下的所有属于版本库的文件和目录
简写:svn ls

14、创建纳入版本控制下的新目录

svn mkdir: 创建纳入版本控制下的新目录。

用法: 1、mkdir PATH...
         2、mkdir URL...

创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。

15、恢复本地修改

svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH...
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录

16、代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。

用法: 1、switch URL [PATH]
        2、switch --relocate FROM TO [PATH...]

1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。

17、解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH...
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。

18、输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值