您的位置:首页 > 其它

svn详解

2016-06-29 19:05 483 查看
Svn 全称 subversion。是一个开源版本控制系统。Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。通过她,开发者可以很容易的将数据恢复到以前的版本,并且可以查看数据的修改细节等。可以将其称为一种“时间机器”。
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 = 333333
authz配置:

[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
111
log:查看全部
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: