码迷,mamicode.com
首页 > 其他好文 > 详细

搭建svn服务器

时间:2017-08-15 21:47:10      阅读:364      评论:0      收藏:0      [点我收藏+]

标签:svn   版本控制   

一、搭建svn服务器
1、环境检查

[root@linux-node01 ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[root@linux-node01 ~]# getconf LONG_BIT
64
[root@linux-node01 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@linux-node01 ~]# getenforce 
Disabled

2、安装svn服务器

[root@master data1]# yum install subversion -y

如果需要更新 svn 版本可以使用 wandisco 的 yum 源

[root@linux-node01 ~]# rpm -qa | grep subversion # 查找已安装版本
subversion-1.6.11-15.el6_7.x86_64
[root@linux-node01 ~]# yum remove -y subversion-1.6.11-15.el6_7.x86_64  # 卸载安装的1.6版本
[root@linux-node01 ~]# cat /etc/yum.repos.d/wandisco-svn.repo
[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.9/RPMS/$basearch/
enabled=1
gpgcheck=0
[root@linux-node01 ~]# yum clean all
[root@linux-node01 ~]# yum install -y subversion
[root@linux-node01 ~]# rpm -qa | grep subversion
subversion-1.9.7-1.x86_64

3、新建svn服务器目录并初始化第一个仓库project

[root@linux-node01 ~]# mkdir /development/svndata
[root@linux-node01 ~]# svnadmin create /development/svndata/project
[root@linux-node01 ~]# tree /development/svndata/project
/development/svndata/project
├── conf
│   ├── authz
│   ├── hooks-env.tmpl
│   ├── passwd
│   └── svnserve.conf
├── db
│   ├── current
│   ├── format
│   ├── fsfs.conf
│   ├── fs-type
│   ├── min-unpacked-rev
│   ├── revprops
│   │   └── 0
│   │       └── 0
│   ├── revs
│   │   └── 0
│   │       └── 0
│   ├── transactions
│   ├── txn-current
│   ├── txn-current-lock
│   ├── txn-protorevs
│   ├── uuid
│   └── write-lock
├── format
├── hooks
│   ├── post-commit.tmpl
│   ├── post-lock.tmpl
│   ├── post-revprop-change.tmpl
│   ├── post-unlock.tmpl
│   ├── pre-commit.tmpl
│   ├── pre-lock.tmpl
│   ├── pre-revprop-change.tmpl
│   ├── pre-unlock.tmpl
│   └── start-commit.tmpl
├── locks
│   ├── db.lock
│   └── db-logs.lock
└── README.txt
10 directories, 28 files
路径           类型 作用
conf           目录 存放版本库所用配置文件的目录
dav            目录 供mod_dav_svn使用
db             目录 版本数据存储目录
db/fs-type     文件 版本库数据真实存储格式,SVN有fsfs和bdb两种存储格式
db/revprops    目录 记录版本属性
db/revs        目录 版本库数据存储真实目录
db/uuid        文件 存储版本库唯一标识号,参考《svn版本库标识uuid简述》
db/txn-current 文件 记录当前事务
format         文件 存储一个整数的文件,此整数代表库层次结构版本
hooks          目录 存放版本库勾子目录
locks          目录 存储库锁目录,用来跟踪库的访问者

4、在根目录下svnroot目录并在这个目录下创建两个大版本库分别为北京项目、天津项目,在这两个项目下建立分支,由于项目名称不能使用中文,请使用project1代表北京项目,使用project2代表天津项目

[root@linux-node01 ~]# mkdir -p /svnroot/project1/{trunk,branch,age}
[root@linux-node01 ~]# mkdir -p /svnroot/project2/{trunk,branch,age}
[root@linux-node01 ~]# tree /svnroot
/svnroot
├── project1
│   ├── age
│   ├── branch
│   └── trunk
└── project2
    ├── age
    ├── branch
    └── trunk
8 directories, 0 files
[root@linux-node01 ~]# svn import /svnroot file:///development/svndata/project/ -m ‘init svn project‘
Adding         /svnroot/project1
Adding         /svnroot/project1/age
Adding         /svnroot/project1/branch
Adding         /svnroot/project1/trunk
Adding         /svnroot/project2
Adding         /svnroot/project2/age
Adding         /svnroot/project2/branch
Adding         /svnroot/project2/trunk
Committing transaction...
Committed revision 1.

提交后的版本为1
解释一下上面命令的含义
    import 为导入命令,将/svnroot目录下的目录导入到project版本库下,-m 输入日志信息
    import的其他用法请使用svn help import查看具体帮助

[root@linux-node01 ~]# rm -rf /svnroot

这样就将svnroot目录下的文件夹导入到仓库project下,然后删掉svnroot文件夹

5、配置SVN
先进入到project目录下有一个conf目录,里面存放了project版本库的配置文件

[root@linux-node01 ~]# cd /development/svndata/project
[root@linux-node01 project]# ll
total 24
drwxr-xr-x 2 root root 4096 Aug 16 01:31 conf
drwxr-sr-x 6 root root 4096 Aug 16 01:38 db
-r--r--r-- 1 root root    2 Aug 16 01:31 format
drwxr-xr-x 2 root root 4096 Aug 16 01:31 hooks
drwxr-xr-x 2 root root 4096 Aug 16 01:31 locks
-rw-r--r-- 1 root root  246 Aug 16 01:31 README.txt
[root@linux-node01 project]# cd conf/
[root@linux-node01 conf]# ll
total 20
-rw-r--r-- 1 root root 1080 Aug 16 01:31 authz
-rw-r--r-- 1 root root  885 Aug 16 01:31 hooks-env.tmpl
-rw-r--r-- 1 root root  309 Aug 16 01:31 passwd

-rw-r--r-- 1 root root 4371 Aug 16 01:31 svnserve.conf
其中:
    svnserve.conf是SVN版本库的配置文件。里面包含了认证文件的路径以及匿名用户是否用于读取权限等操作
    passwd文件指定了用户的登录名以及对应的密码信息
    authz文件指定了passwd文件中用户的权限
修改svnserver.conf配置文件,在修改之前先备份,备份的目的有两个,一个是便于操作失误能够进行快速还原,另一个就是改完之后可以对比文件修改了那些地方
cp svnserve.conf{,.backup}
开始编辑,过程省略,直接查看编辑完成之后的结果,此文件的修改配置项必须定格,否则配置错误

[root@linux-node01 conf]# diff svnserve.conf{,.backup}
19,20c19,20
< anon-access = none
< auth-access = write
---
> # anon-access = read
> # auth-access = write
27c27
< password-db = passwd
---
> # password-db = passwd
36c36
< authz-db = authz
---
> # authz-db = authz

以<开头的是修改后的配置项信息
以>开头的是修改前的配置项信息
6、新增用户并设置密码
passwd文件定义用户属性,这里的用户分为两个项目组的用户,其中zhangsan、lisi为project1组的成员,有读写权限。liutao、gaoyuanyuan、chenglong为project2组的成员拥有读写权限 ,admin作为管理员对project总版本库拥有rw权限
passwd文件主要定义有哪些用户,格式为:用户名 = 密码 #注意等号两边的空格以及书写必须定格

[root@linux-node01 ~]# cat /development/svndata/project/conf/passwd    
…………省略内容…………
[users]
# harry = harryssecret
# sally = sallyssecret
# 下面都是添加的,前面是用户名,后面是密码
admin = 123456
zhangsan = 123456
lisi = 123456
liutao = 123456
gaoyuanyaun = 123456
chenglong = 123456

7、添加群组并增加访问控制
定义authz文件,定义这些用户的权限,之中里面有组的概念,可以将多个用户定义为一个组,为组定义权限,组内的用户共享这个权限
此文件格式定义组的格式为
[groups]
组名 = 用户 #多个用户使用逗号进行分隔
版本库授权的格式为
[版本库根目录]
@组名 = 权限
用户名 = 权限
[版本库根目录/项目目录]
@组名 = 权限
用户名 = 权限

[root@linux-node01 ~]# cat /development/svndata/project/conf/authz 
…………省略内容…………
[groups]
project1 = zhangsan,lisi
prohect2 = liutao,gaoyuanyaun,chenglong
[/]
admin = rw
[/project1]
@project1 = rw
[/prohect2]
@prohect2 = rw
* =

权限表示:
r 表示对该目录有读权限;
w 表示对该目录有写权限;
rw 表示对该目录有读写权限;
* = 表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录,这点比较重要。
8、启动svn服务

[root@linux-node01 ~]# svnserve -d -r /development/svndata/project

检查启动结果,端口号为3690

[root@linux-node01 ~]# netstat -anptlu | grep svn
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      2950/svnserve       
[root@linux-node01 ~]# ps aux|grep svn|grep -v grep
root       2950  0.0  0.2 151016  1156 ?        Ss   01:52   0:00 svnserve -d -r /development/svndata/project

如果防火墙开启了请建立相关规则

iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
service  iptables save

安装完成之后,在任意地点创建文件夹名称,点击右键会出现一个SVN检出的选项点击一下

9、使用http认证服务器

[root@linux-node01 ~]# yum install httpd mod_dav_svn 
http之支持加密的密码,所以需要将svn的明文密码转换
[root@linux-node01 ~]# touch /development/svndata/project/conf/webpasswd
[root@linux-node01 ~]# htpasswd -b /development/svndata/project/conf/webpasswd admin admin
Adding password for user admin

一步一步转换或者在/development/svndata/project/conf/目录下新建下面perl脚本 pd.pl

[root@linux-node01 conf]# cat pd.pl 
#!/usr/bin/perl
use warnings;
use strict;
open (FILE, "passwd") or die ("Cannot open the passwd file!\n");
open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!\n");
close (OUT_FILE);
foreach (<FILE>) {
    if($_ =~ m/^[^#].*=/) {
        $_ =~ s/=//;
        `htpasswd -b webpasswd $_`;
    }
}

运行 perl pd.pl

[root@linux-node01 conf]# perl pd.pl
Adding password for user admin
Adding password for user zhangshan
Adding password for user lisi
Adding password for user liutao
Adding password for user gaoyuanyaun
Adding password for user chenglong

10、修改httpd.conf文件

vim /etc/httpd/conf/httpd.conf 
在文件最后添加
<Location /project>
     DAV svn
    SVNPath /development/svndata/project/
    AuthType Basic
    AuthName "svn for project"
    AuthUserFile /development/svndata/project/conf/webpasswd
    AuthzSVNAccessFile /development/svndata/project/conf/authz
    Satisfy all
    Require valid-user
</Location>

11、修改文件夹属主为apache

[root@linux-node01 ~]# chown -R apache.apache /development/svndata/project/

12、启动 httpd

[root@linux-node01 conf]# service httpd start 
Starting httpd:                                            [  OK  ]

10、打开web页面 http://192.168.56.11/project/
建议更换成ip地址。输入账户密码如下:

13、如果出现 (13)Permission denied: Could not open password file: /development/svndata... 则是因为SELinux未关闭,授权是无效的,需要修改SVN目录的权限配置。运行下面的命令

chcon -R -h -t httpd_sys_content_t /data1/svn/project

成功运行后删掉 passwd 文件,这样密码就只有你知道了

14、使用https认证服务器
一般公司的Svn服务器会搭建成https认证的服务器,密码则是使用ldap认证,所以搭建起来比较麻烦,除了httpd之外还要open-ssl等插件支持,但足够安全和实用。

[root@linux-node01 ~]# yum install openssl mod_ssl -y
[root@linux-node01 ~]# cd /etc/httpd/conf
[root@linux-node01 conf]# 
[root@linux-node01 conf]# openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
..............................++++++
......++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: # 123123
Verifying - Enter pass phrase for server.key: # 123123

命令运行期间需要用户输入并确认自己的密码

对凭证进行填写必要信息,需要填写国家(CN),邮箱,公司等等,按要求填写即可(后面好像不需要用到)

[root@linux-node01 conf]# openssl req -new -key server.key > server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server‘s hostname) []:
Email Address []:
Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

生成证书

[root@linux-node01 conf]# openssl req -x509 -days 2048 -key server.key -in server.csr > server.crt
Enter pass phrase for server.key:
[root@linux-node01 conf]# ll
total 64
-rw-r--r-- 1 root root 34744 Aug 16 02:25 httpd.conf
-rw-r--r-- 1 root root 13139 Jul 12 21:33 magic
-rw-r--r-- 1 root root   867 Aug 16 02:30 server.crt
-rw-r--r-- 1 root root   599 Aug 16 02:30 server.csr
-rw-r--r-- 1 root root   963 Aug 16 02:29 server.key

修改配置文件 httpd.conf

vim httpd.conf
增加
LoadModule ssl_module modules/mod_ssl.so
在<Location /project>中的最后加上
SSLRequireSSL
在文件最后加上
SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none
ErrorLog /var/log/httpd/SSL.log
LogLevel info
SSLEngine On
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.key

重启httpd,输入密码即可

Stopping httpd:                                            [  OK  ]
Starting httpd: [Wed Aug 16 02:36:25 2017] [warn] module ssl_module is already loaded, skipping
Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
Server 127.0.0.1:80 (RSA)
Enter pass phrase: # 123123
OK: Pass Phrase Dialog successful.
                                                           [  OK  ]

页面上访问 https://192.168.56.11/project/

15、commit的时候提交备注
在hooks目录下面增加pre-commit文件即可,文件内容可以参考pre-commit.tmpl需要注意的是如果是中文在windows下可能会显示不了

#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)
if [ "$LOGMSG" -lt 10 ]; then
echo -e "\n Please submit a comment greater than 10 characters."1>&2        
exit 1
fi

16、密码使用mysql保存验证
首先需要 按照 mod_auth_mysql

yum install mod_auth_mysql -y


配置可参考 http://modauthmysql.sourceforge.net/CONFIGURE
修改 httpd.conf 添加

LoadModule mysql_auth_module modules/mod_auth_mysql.so 
在 <location /project> 中修改
AuthMySQLEnable On
AuthMySQLHost master
AuthMySQLPort 3306
AuthMySQLSocket /data1/mysql/3306/mysql.sock
AuthMySQLUser svn
AuthMySQLPassword xxxx
AuthMySQLDB user
AuthMySQLUserTable user_auth
AuthMySQLNameField user_name
AuthMySQLPasswordField passwd
AuthMySQLNoPasswd Off
AuthMySQLPwEncryption md5   # 密码加密 md5
# AuthMySQLSaltField
AuthMySQLCharacterSet utf8
AuthMySQLAuthoritative On  # 只支持 mysql 验证 取消其他验证方式

在数据库user中新建一个表如下

mysql> show create table user_auth\G
*************************** 1. row ***************************
       Table: user_auth
Create Table: CREATE TABLE `user_auth` (
  `user_name` varchar(32) NOT NULL COMMENT ‘用户英文名‘,
  `passwd` varchar(256) NOT NULL COMMENT ‘用户密码‘,
  `last_modify` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘修改时间‘,
  PRIMARY KEY (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘用户认证‘
1 row in set (0.00 sec)

并新建用户

grant all privileges on user.user_auth to ‘svn‘@‘master‘ identified by ‘xxxx‘;

重启 httpd 即可。
如果遇到MySQL ERROR: Can‘t connect to MySQL server on ‘master‘ (13)
解决方法
1. 查看httpd_can_network_connect的值是否为off(例如:httpd_can_network_connect --> off)

# getsebool -a | grep httpd

2. 修改httpd_can_network_connect的值为on

# setsebool httpd_can_network_connect 1

3. 重新验证httpd_can_network_connect

# getsebool -a | grep httpd

4. 重启http

# service httpd restart

如果遇到 Permission denied: make_sock: could not bind to address [::]:80则使用

semanage port -a -t http_port_t -p tcp 80

但由于我的semanage一直安装失败但要下载一大堆依赖包,太麻烦了,我就使用了下面的方法

setenforce 0     # 宽松模式
service httpd restart
setenforce 1   # 强制模式

shell下求MD5值的方法

echo -n ‘12345‘|md5sum|cut -d ‘ ‘ -f1      
827ccb0eea8a706c4c34a16891f84e7b

17、如果配置办公网访问一般需要关闭iptables或者配置
# 查看规则

iptables -nvL --line-number

# 在第4行插入443端口输入规则

-I INPUT -i eth0 -p tcp -s IP --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

# 第一行插入443端口输出规则

-I OUTPUT 1 -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT



二、建立全量,增量脚本
以下为两个脚本

[root@linux-node01 ~]# mkdir -p /data/scripts

1、    全库备份whole.sh

[root@linux-node01 scripts]# cat whole.sh 
#!/bin/sh
DATE=$(date +%F-%H)
SVN_DIR=/development/svndata/project/    # 定义SVN库目录变量
SVN_BAK_DIR=/backup/                     # 定义备份文件存放目录变量
NUM1=$(cat /data/scripts/jsb_svn_id)     # 取初始化版本号
NUM2=$(svnlook youngest $SVN_DIR)        # 取当前最新的版本号
# 开始备份
svnadmin dump $SVN_DIR  -r $NUM1:$NUM2  --incremental >  $SVN_BAK_DIR/whole_bak_$DATE
# 判断备份是否成功,若成功,则记录当前最新的版本号到临时文件中,用于下次增量备份使用
if [ $? -eq 0 ];
    then
    echo $NUM2 > /data/scripts/jsb_svn_id
    else
    echo "backup fail...."
fi

2、    增量备份increment.sh

[root@linux-node01 scripts]# cat increment.sh
#!/bin/sh
DATE=$(date +%F-%H)
SVN_DIR=/development/svndata/project/      # 定义SVN库目录变量
SVN_BAK_DIR=/backup/                       # 定义备份文件存放目录变量
NUM1=$(cat /data/scripts/jsb_svn_id)       # 取初始化版本号
NUM2=$(svnlook youngest $SVN_DIR)          # 取当前最新的版本号
#开始备份
svnadmin dump $SVN_DIR  -r $NUM1:$NUM2  --incremental >  $SVN_BAK_DIR/whole_bak_$DATE
#判断备份是否成功,若成功,则记录当前最新的版本号到临时文件中,用于下次增量备份使用
if [ $? -eq 0 ];
    then
    echo $NUM2 > /data/scripts/jsb_svn_id
    else
    echo "backup fail...."
fi
[root@linux-node01 scripts]# echo 0 >/data/scripts/jsb_svn_id

在配置计划任务之前请手动执行一次这两个脚本
建立计划任务,实现每周日凌晨1点进行一次全库备份,凌晨2点进行增量备份
最后利用rsync进行同步

rsync -azH /backup  192.168.56.12::SVN_BACKUP
crontab -e
00 1 * * 7 /bin/sh whole.sh
00 2 1 * * /bin/sh increment.sh
00 3 1 * * /usr/bin/rsync -azH /backup 192.168.56.12::SVN_BACKUP

恢复思路:
1、建立全新的svn库
2、使用最近一次的全库备份进行恢复,在进行每天的增量恢复
3、进行结果查看
恢复命令

svnadmin load  要恢复的svn库 < 备份全路径

三、svn常用命令
svn客户端的三种登录方式

svn://ip地址      这种是svn默认的登录方式
http://ip地址     这种是结合了apache实现的 web登录方式
https://ip地址    这种是结合了apache+openssl实现的安全登录方式,.常用于外网svn
file:///绝对路径  本地的登录方式,一般在svn服务端本地操作时会用到

1、checkout到本地目录

svn checkout -–username=*** --password=*** path

简写:svn co
例如:

[root@linux-node01 ~]# svn  checkout svn://192.168.56.11/ --username=admin --password=admin
-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:
   <svn://192.168.56.11:3690> 7db09e79-fb2b-4ec9-88ea-0dc4fd9766e5
can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.
You can avoid future appearances of this warning by setting the value
of the ‘store-plaintext-passwords‘ option to either ‘yes‘ or ‘no‘ in
‘/root/.subversion/servers‘.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes
A    project1
A    project1/age
A    project1/branch
A    project1/trunk
A    project2
A    project2/age
A    project2/branch
A    project2/trunk
Checked out revision 1.

2、往版本库中添加新的文件

svn add file

例如:

[root@linux-node01 age]# svn add test.txt 
A         test.txt

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

svn commit -m "LogMessage" [-N] [--no-unlock] PATH

# 如果选择了保持锁,就使用–no-unlock开关
# -m 后面是提交的日志信息,一般情况是必填的。
简写:svn ci
例如:

[root@linux-node01 age]# svn commit -m "test"      
Adding         test.txt
Transmitting file data .done
Committing transaction...
Committed revision 2.

4、加锁/解锁

svn lock -m "LockMessage" [--force] PATH

5、本地更新到某个版本

svn update -r * path  # *为版本号
svn update       # 整个文件夹
svn update file     # 单独一个文件

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://master/project/test.php -m “delete test file”

或者分步骤(推荐使用这种)

svn delete test.php
svn ci -m ‘delete test file‘

简写:svn  [del, remove, rm]
8、查看日志

svn log file

显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息

svn info file

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 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 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

本文出自 “炫维” 博客,请务必保留此出处http://xuanwei.blog.51cto.com/11489734/1956565

搭建svn服务器

标签:svn   版本控制   

原文地址:http://xuanwei.blog.51cto.com/11489734/1956565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!