简述:
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,采用分支管理模式。即Subversion 管理着随时间改变的数据,而这些数据放置在一个中央资料档案库(repository) 中。
几个概念:
repository(源代码库):源代码统一存放的地方。
Checkout(提取):若手上没有源代码,则需从repository checkout一份。
Commit(提交):若已修改了代码,就需要Commit到repository。
Update (更新):若已经Checkout了源代码, Update一下便可与Repository上的源代码同步,手上的代码也会有最新的变更。
系统:Fedora 30 64bit
1、安装svn
安装之前,可以先检查系统是否已安装。
svn --version
若没有安装,则使用命令安装即可。
dnf install subversion -y
安装完成后,再次输入svn --version检查是否安装成功。
2、检出文件(checkout)
svn checkout 目录
如:svn co https://svn.shiwan.com/svn/shiwan/branches/program/
svn checkout https://svn.shiwan.com/svn/shiwan/branches/program/
3、创建分支(copy)
trunk:主干线,my_branch:分支
svn copy trunk/ branches/my_branch
查看状态:svn status
4、提交文件(commit)
svn commit -m "add my_branch"
svn ci -m "add my_branch"
注意:提交之前要先更新,即 svn up
5、更新文件(update)
svn up
6、添加新文件/目录
svn add 文件名/目录
注:告诉SVN服务器要添加文件了,还要用svn commint -m才真实的上传上去!
7、查看历史信息
svn log: 用来展示svn 的版本作者、日期、路径等等。
svn diff: 用来显示特定修改的行级详细信息。
svn cat: 取得在特定版本的某文件显示在当前屏幕。
svn list: 显示一个目录或某一版本存在的文件
①svn log
可以显示所有的信息。
若查看特定的某两个版本之间的信息,可以使用:
svn log -r 6:8
若查看某一个文件的版本修改信息,可以使用 :
svn log 文件路径/文件
若查看目录的信息要加 -v。
若显示限定N条记录的目录信息,使用 svn log -l N -v。
svn log -l 8 -v
②svn diff
用来检查历史修改的详情。
a. 对比当前本地的工作拷贝文件(working copy)和缓存在.svn下的版本库文件的区别:
svn diff
b. 对比当前本地的工作拷贝文件(working copy)和任意版本A的差异
svn diff -rA
比如,以下将对比本地的工作拷贝文件(working copy)和版本94239的差异
svn diff -r94239
c. 对比任意历史版本A和任意历史版本B的差异
svn diff -rA:B
比如,以下命令将显示版本94127相对于版本94239的差异
svn diff -r94239:94127
③svn cat
若只检查一个过去版本,不查看区别,可使用svn cat
svn cat -r 版本号 文件
④svn list
svn list可以在不下载文件到本地目录的情况下来察看目录中的文件。
svn list 目录
8、解决冲突
9、版本回退(revert)
// 放弃当前修改
svn revert -R .
// 更新
svn up
// 查看最近5条svn log日志
svn log -l 5
// 从r608回滚到r602
svn merge -r 608:602 ""
10 合并(merge)
svn merge -rA:B
比如,下面这个命令的含义是,把94127版本相对于94239版本的差异merge到当前版本,注意冒号前后的版本的顺序是会带来区别的
svn merge -r94239:94127
merge完成之后,记得提交本地的修改到版本库
svn ci -m"restore to version 94127"
cd .../trunk
svn copy psBar ../branches/psBar_#function
cd .../trunk/psBar
svn merge https://***/branches/psBar_#function
11、标签(tag)
12、
1> 删除
svn rm --force myBar_cx
2> 显示本地或远程条目的信息
svn info
用法: info [TARGET[@REV]...]
显示每个 TARGET 的信息 (默认: ".")。
TARGET 可以是工作副本中的路径或版本库中的URL。
REV 指定从哪个版本开始查找目标。
有效选项:
-r [--revision] ARG : ARG (一些命令也接受ARG1:ARG2范围)
版本参数可以是如下之一:
NUMBER 版本号
'{' DATE '}' 在指定时间以后的版本
'HEAD' 版本库中的最新版本
'BASE' 工作副本的基线版本
'COMMITTED' 最后提交或基线之前
'PREV' COMMITTED的前一版本
例子:
svn info -r BASE:显示当前工作副本的基线版本的信息
svn info -r HEAD:显示版本库中最新的版本的信息
注意:svn info中的Revision和Last Changed Rev有时可能一样,这时表示当前工作副本是版本库中的最新版本。但一般情况下,Revision和Last Changed Rev是不一样的,Last Changed Rev表示当前Path最后一次更改的revision,而Revison表示整个Repository的最新revision。
获取当前工作副本的版本号:svn info -r HEAD . | grep "Changed Rev" | cut -b 19-
cut -b 19- : 只显示行中19到最后位置的字节
其他用法详情请在终端输入“svn info --help” 查看。
3 > svn cleanup
4> svn help
其他:
1> 安装svn
安装之前,可以先检查系统是否已安装。
svn --version
若没有安装,则使用命令安装即可。
yum install subversion
yum install mod_dav_svn
安装完成后,再次输入svn --version检查是否安装成功。
2> 创建项目仓库,修改拥有者给apache
sudo mkdir /opt/svn
sudo mkdir /opt/svn/repos
sudo chown apache:apache /opt/svn/repos
3> 创建工作空间
sudo svnadmin create /opt/svn/repos/工作空间
4> 修改svn服务配置文件svnserve.conf
svn服务配置文件为版本库目录中的文件conf/svnserve.conf。
cd /opt/svn/repos/工作空间
cd conf/
vi /opt/svn/repos/工作空间/conf/svnserve.conf
①修改前:
#anon-access = read
#auth-access = write
修改后:
anon-access = none (如果此处不设置为none的话,则连结SVN时会出现错误“Read access denied for root of edit”)
auth-access = write
②修改前:
#password-db = passwd
修改后:
password-db = passwd
③修改前:
#authz-db = authz
修改后
authz-db = authz
注意:subversion读取配置文件svnserve.conf时,无法识别有前置空格的配置,因此前面不能有空格
5> 增加用户及密码,并设置访问权限
① 用户名口令文件由svnserve.conf的配置项password-db指定,缺省为conf目录中的passwd。
该文件仅由一个[users]配置段组成。
vi /opt/svn/repos/工作空间/conf/passwd (用户名口令文件passwd)
如[users]
#user = password
svnuser = svnpassword
② 权限配置文件由svnserve.conf的配置项authz-db指定,缺省为conf目录中的authz。
该配置文件由一个[groups]配置段和若干个版本库路径权限段组成。
[groups]配置段中配置行格式如下:
<用户组> = <用户列表>
版本库路径权限段的段名格式如下:
[<版本库名>:<路径>]
vi /opt/svn/repos/工作空间/conf/authz
[/]
svnuser = rw
6> 启动svnserve服务
cd ..
svnserve -d -r /opt/svn/repos --listen-port 端口号
-r: 配置方式决定了版本库访问方式。
--listen-port: 指定SVN监听端口,不加此参数,SVN默认监听3690。