c4rt1y

svn使用大全

0x01 svn介绍

Subversion是一个自由/开源版本控制系统,它管理文件和目录可以超越时间。一组文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种“时间机器”。
版本控制是管理信息变化的艺术,它很早就成为了程序员重要的工具,程序员经常会花时间做一点小修改然后第二天又把它改回来。但是版本控制的作用不仅在软件开发领域,任何需要管理频繁信息改变的地方都需要它,这就是Subversion发挥的舞台。

0x02 安装配置

#安装
[root@localhost ~]# yum install -y subversion

#创建
[root@localhost ~]# svnadmin create /opt/demo

#设置配置文件模式(可写,权限管理文件authz,账号管理文件passwd,svn主目录 demo)
[root@localhost ~]# grep  -vE '^#|^$' /opt/demo/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = demo
[sasl]

# 设置账号和密码
[root@localhost ~]# grep  -vE '^#|^$' /opt/demo/conf/passwd
[users]
admin = 123456
demo = 654321

# 设置admin账号为可读写,设置用户组user可读,demo账号在user下面。用户组用@前缀
[root@localhost ~]# grep  -vE '^#|^$' /opt/demo/conf/authz
[aliases]
[groups]
user = demo
[/]
admin = rw
@user = r

#启动svn
[root@localhost ~]# svnserve -d -r  /opt/demo/

0x03 使用大全

#客户端需要安装svn(安装就可以使用)
yum install -y subversion

1、将文件checkout到本地
svn checkout 服务器目录 本地目录 --username 账号 --password 密码
#当前目录下的demo目录,输入账号密码
svn checkout svn://10.10.10.10/demo demo --username demo --password 654321
#当前目录下的demo目录,密码隐藏输入
svn checkout svn://10.10.10.10/demo demo --username demo
#指定为当前目录下,密码隐藏输入
svn checkout svn://10.10.10.10/demo  --username demo 
#服务器只需要经过一次密码验证,下次则不需要输入密码
svn checkout svn://10.10.10.10/demo

2、往版本库中添加新的文件
svn add filename
例如:svn add test.cpp

3、将改动的文件提交到版本库
svn commit -m "注释" [-N] [--no-unlock] PATH(如果选择了保持锁,就使用--no-unlock开关)
例如:svn commit -m "注释" test.cpp
简写:svn ci

4、加锁/解锁
svn lock -m "注释" path
例如: svn lock -m "注释" test.cpp
svn unlock path

5、更新到某个版本
svn update -r 版本号 path
svn update 更新当前目录以及子目录下的所有文件到最新版本
svn upate -r 200 test.cpp 将版本库中的test.cpp还原到版本200
简写 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 "注释"
例如: svn delete svn://192.168.1.1/pro/domain/test.cpp -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

10、比较差异
svn diff path(将修改的文件与基础版本比较)
svn diff -r m:n (将修改的文件m版本和n版本比较)
简写 svn di

11、将两个版本的文件的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 20:25 test.cpp(将版本20与25之间的差异合并到当前文件,但一般会发生冲突,需要处理一下)
     svn merge branchA branchB  // 把对branchA的修改合并到分支branchB

12、SVN帮助
svn help

13、查看版本库下的文件和列表
svn list path (显示path目录下的所属于版本的文件和目录)
简写: svn ls

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

15、恢复本地修改
svn revert:恢复原始未改变的工作副本文件(恢复大部分的本地修改)revert用法:revert path
注意:本子命令不会存储网络,并且会解除冲突的情况。但它不会恢复被创建的目录

16、代码库URL变更
svn switch(sw): 更新工作副本到不同的URL。
#更新工作副本,映射到一个新的URL,会将服务上的文件与本地文件合并。这是将工作副本对应到同一创库的某个分支或者标记的方法。
1、switch URL [PATH]
#改写工作副本URL元数据,以反映URL的变更,创库URL变动但工作副本仍旧对映同一创库的同一目录时使用该命令更新工作副本与创库的对应关系。
2、switch --relocate FROM TO [PATH]

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

18、输出指定文件的URL内容
svn cat 目标[@版本] 如果指定了版本将从指定的版本开始查找。
#查看readme.txt
svn cat http://localhost/test/readme.txt

19、新建拷贝分支
svn copy branchA branchB  -m "make B branch" // 从branchA拷贝出一个新分支branchB

0x04 资料来源

https://www.cnblogs.com/liwanggui/archive/2016/06/28/5624147.html
https://www.kancloud.cn/i281151/svn/
http://blog.csdn.net/liuchong_lch/article/details/78192755
GoTop