svn详解
2016-06-29 19:05
483 查看
Svn 全称 subversion。是一个开源版本控制系统。Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。通过她,开发者可以很容易的将数据恢复到以前的版本,并且可以查看数据的修改细节等。可以将其称为一种“时间机器”。
Subversion 允许不同的用户在各自的电脑上以多线程的模式修改和管理同一组位于中心版本库的数据,因此可以促进团队协作。另外,它是一个通用系统,可以管理任何类型的文件集。 其它常见版本控制系统:VSS,Visual Source Save,微软公司的版本控制器软件;CVS,Concurrent Versions System,开源免费的另外一款版本控制系统;ClearCase,IBM公司的。
安装:
创建版本库在仓库中创建
重启svn:
svn操作
第一次在checkout时候需要账号密码 后面都可以不需要
从版本库中拷贝:checkout (co)
远程:
还原:
未提交之前
假如文件冲突后 延迟处理了
若想创建了一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容:
Subversion 允许不同的用户在各自的电脑上以多线程的模式修改和管理同一组位于中心版本库的数据,因此可以促进团队协作。另外,它是一个通用系统,可以管理任何类型的文件集。 其它常见版本控制系统:VSS,Visual Source Save,微软公司的版本控制器软件;CVS,Concurrent Versions System,开源免费的另外一款版本控制系统;ClearCase,IBM公司的。
安装:
[root@martin ~]# rpm -qa subversion #如果没有安装 [root@martin ~]# yum install subversion
[root@martin /]# cd /mydata/ #创建存储根目录 [root@martin mydata]# mkdir svn/svndata -pv #创建用户密码权限目录 [root@martin mydata]# mkdir svn/svnpasswd -pv启动:
[root@martin mydata]# svnserve -d -r /mydata/svn/svndata/ #进程 [root@martin mydata]# ps -ef |grep svn root 84614 1 0 11:00 ? 00:00:00 svnserve -d -r /mydata/svn/svndata/ #端口 [root@martin mydata]# lsof -i :3690 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME svnserve 84614 root 3u IPv4 1988994 0t0 TCP *:svn (LISTEN)
创建版本库在仓库中创建
[root@martin mydata]# svnadmin create /mydata/svn/svndata/demo
[root@martin mydata]# ll /mydata/svn/svndata/ total 4 drwxr-xr-x 6 root root 4096 Jun 28 11:12 demo
[root@martin svndata]# cd demo/ [root@martin demo]# ls README.txt conf db format hooks locks配置文件:更改svnserve.conf时需要重启svn 更改passwd authz不需要重启
[root@martin conf]# pwd /mydata/svn/svndata/demo/conf [root@martin conf]# ls authz passwd svnserve.conf [root@martin conf]# cp svnserve.conf{,.bak} [root@martin conf]# ls authz passwd svnserve.conf svnserve.conf.bak
[root@martin conf]# vim svnserve.conf anon-access = none 12行 匿名用不禁止 auth-access = write 13行 认证用户写 password-db = /mydata/svn/svnpasswd/passwd 18行 用户密码管理 authz-db = /mydata/svn/svnpasswd/authz 27行 用户管理
[root@martin conf]# diff svnserve.conf svnserve.conf.bak 12,13c12,13 < anon-access = none < auth-access = write --- > # anon-access = read > # auth-access = write 20c20 < password-db = /mydata/svn/svnpasswd/passwd --- > # password-db = passwd 27c27 < authz-db = /mydata/svn/svnpasswd/authz --- > # authz-db = authz权限管理:
[root@martin conf]# cp authz passwd /mydata/svn/svnpasswd/
[root@martin svnpasswd]# pwd /mydata/svn/svnpasswd [root@martin svnpasswd]# chmod 700 * [root@martin svnpasswd]# ll total 8 -rwx------ 1 root root 1080 Jun 28 11:28 authz -rwx------ 1 root root 309 Jun 28 11:28 passwd [root@martin svnpasswd]#passwd设置:
[root@martin svnpasswd]# vim passwd [users] # harry = harryssecret 用户民 =密码 密码是明文的 所以要设置700权限 # sally = sallyssecret martin = 222222 lucia = 333333authz配置:
[groups]
# [<版本库>:/项目/目录]
# @<用户组名>=<权限>
# <用户名>=<权限>
#其中,括号内部可以有很多写法
#[/]表示根目录及以下,根目录是sevserve启动时候指定
#[repos:/]表示对版本库repos设置权限
#[repos:/demo]表示对版本库repos中的demo项目设置权限
#[repos:/demo/test]表示对版本库repos中的demo项目的test目录设置权限
#权限设置可以是用户组 用户 或 * 用户在前面加@ *表示全部用户
#权限可以是w r wr和空 空表示没有任何权限
#authz中的每个参数都是定格写,开头不能有空格
#对于组,要以@开头
[root@martin svnpasswd]# vim authz
[groups] a-team = martin,lucia,sherry [demo:/] martin = rw lucia = r @a-team = r
重启svn:
[root@martin svnpasswd]# pkill svnserve [root@martin svnpasswd]# svnserve -d -r /mydata/svn/svndata/解决中文编码: 客户端
export LC_CTYPE="en_US.UTF-8" export LC_ALL=常用钩子脚本:
[root@martin demo]# cd /mydata/svn/svndata/demo/hooks/ [root@marvin hooks]# vim post-commit #!/bin/sh REPOS="$1" REV="$2" export LANG=en_US.UTF-8 #LOGPATH='/var/log' #[ ! -d ${LOGPATH} ] && mkdir $[LOGPATH] -p svn=/usr/bin/svn $svn update --username=marvin --password=222222 /www/web/demo/test #if [ $? -eq 0 ] # then # /usr/bin/rsync -az --delete #fi
[root@marvin hooks]# chmod 700 post-commit
svn操作
第一次在checkout时候需要账号密码 后面都可以不需要
从版本库中拷贝:checkout (co)
[root@lucia testsvn]# svn co svn://192.168.1.222/demo ./ --username=martin --password=222222 Checked out revision 0.linux本地 指服务器那台:
[root@martin demo]# svn co file:///mydata/svn/svndata/demo A demo/aa A demo/bb Checked out revision 2.添加:add
[root@marvin test]# touch gg [root@marvin test]# svn add gg A gg更新:uodate
[root@marvin test]# svn up At revision 7.更新到某个版本:
[root@marvin test2]# svn up -r 41 a U a Updated to revision 41.提交commit (ci)
[root@lucia testsvn]# svn add * [root@lucia testsvn]# svn ci -m 'from lucia'
[root@marvin test2]# svn commit hh -m 'form linux' Adding hh Transmitting file data . Committed revision 9.查看文件:
远程:
[root@lucia testsvn]# svn list svn://192.168.1.222/demo --username=martin --password=222222 --verbose aa/ bb/ 新建文本文档.txt当前:
[root@marvin test2]# svn ls查看文件或者目录状态:
[root@marvin test2]# svn status [root@marvin test2]# svn st比较差异diff:
[root@marvin test2]# svn diff -r 40:41 a Index: a =================================================================== --- a (revision 40) +++ a (revision 41) @@ -1,6 +1,2 @@ -<<<<<<< .mine jj -======= -22 ->>>>>>> .r39 111log:查看全部
[root@marvin test2]# svn log查看某文件
[root@marvin test2]# svn log a
还原:
未提交之前
[root@marvin test2]# echo 99999 > aa.txt [root@marvin test2]# svn revert aa.txt Reverted 'aa.txt' [root@marvin test2]# svn status提交后回滚:
[root@marvin test2]# svn log ------------------------------------------------------------------------ r13 | marvin | 2016-06-29 09:42:13 +0800 (Wed, 29 Jun 2016) | 1 line aaaaaaa ------------------------------------------------------------------------ r12 | marvin | 2016-06-29 09:39:35 +0800 (Wed, 29 Jun 2016) | 1 line aaaaaaa [root@marvin test2]# svn diff -r 12:13 svn://192.168.1.220/demo/a Index: a =================================================================== --- a (revision 12) +++ a (revision 13) @@ -0,0 +1 @@ +99 [root@marvin test2]# svn merge -r 13:12 svn://192.168.1.220/demo/a --- Reverse-merging r13 into 'a': U a [root@marvin test2]# svn status M a [root@marvin test2]# svn ci -m 'bbbb' Sending a Transmitting file data . Committed revision 14.del
[root@marvin test2]# svn del svn://192.168.1.220/demo/demo2/a -m ' del a' [root@marvin test2]# svn up D demo2/a Updated to revision 17.冲突:
p 推迟
df 显示差异
e 编辑文件
m 合并
r 解决差异 r之前必须先df 有些版本也是合并 冲突合并 需要自己手动改代码
mc 我这边的冲突 返回本地代码
tc 他们的冲突 返回远程代码
s 显示全部
假如文件冲突后 延迟处理了
svn resolved file_name加锁解锁:
[root@marvin test2]# svn lock a -m 'lock a' 'a' locked by user 'marvin'. [root@marvin test2]# svn unlock a 'a' unlocked.忽略:
若想创建了一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容:
[root@marvin test2]# mkdir demo3 [root@marvin test2]# svn add demo3 [root@marvin test2]# svn ci -m 'add demo3' [root@marvin test2]# svn propset svn:ignore '*' demo3 property 'svn:ignore' set on 'demo3'若想创建一个文件夹,但不加入版本控制,即忽略这个文件夹:
[root@marvin test2]# mkdir demo5 [root@marvin test2]# svn propset svn:ignore demo5 . [root@marvin test2]# svn ci -m 'add'若已经创建了文件夹,并加入了版本控制,现在想忽略这个文件夹,但要保持文件夹的内容:
[root@marvin test2]# svn export demo2 demo2-tmp [root@marvin test2]# svn rm demo2 [root@marvin test2]# svn ci -m 'del demo2' [root@marvin test2]# mv demo2-tmp demo2 [root@marvin test2]# svn propset svn:ignore 'demo2' . [root@marvin test2]# svn ci -m 'ignoring a directory demo2' [root@marvin test2]# svn st忽略某些文件
[root@marvin test2]# vim .svnignore #根目录下 demo4/bb
相关文章推荐
- 在linux下如何使用yum查看安装了哪些软件包
- AFNetworking的简单POST使用
- storm坑之---同步问题
- 4-1 简单输出整数 (10分)
- 对XStream的实例应用1
- Android 多渠道打包
- 拦截器的使用
- 设置VIM的配色方案
- Android 短信发送器
- HTML 使用CSS 设置透明度Opacity
- 解决 C/C++ 程序执行一闪而过的方法
- xenserver监控vm中的docker容器
- gradle编译问题:Cause: peer not authenticated
- jenkins2 groovy语法
- 1Z0-051-Oracle的 HR 样例用户的建立
- Python ctype sizeof incorrect!
- JavaSE 基础 第40节 内部类概述
- SQLite-创建、附加、分离数据库
- 语法树学习总结
- Python 函数和模块