版本控制-svn服务器搭建和常用命令(centos 6.3),-svncentos
版本控制-svn服务器搭建和常用命令(centos 6.3),-svncentos
Svn是比较优秀的版本控制工具,虽然功能和性能上无法和Git媲美,但由于其容易搭建和使用的特性,所以在各个小公司还是很受欢迎的。使用Git可参考《版本控制-Git服务器搭建和常用命令使用》本文介绍svn服务器搭建和常用命令介绍。
服务器搭建
本地服务器
http服务器
命令
常用命令
不常用命令
[root@master data1]# cat /etc/issue CentOS release 6.3 (Final) Kernel \r on an \m [root@master data1]# getconf LONG_BIT 64
一、搭建svn本地服务器
1、安装svn服务器
[root@master data1]# yum install subversion -y
2、新建svn服务器目录并初始化第一个仓库project
mkdir /data1/svn svnadmin create /data1/svn/project
3、新建文件夹并导入服务器作为Svn仓库project的第一个文件夹
cd /data1 mkdir -p test/client test/server svn import test file:///data1/svn/project/ -m 'init svn project' rm -rf test
这样就将test目录下的client和server文件夹导入到仓库project下,然后删掉test文件夹
4、新增用户并设置密码
修改文件 /data1/svn/project/conf/passwd 新增用户 lx、u1、u2、u3,对应的明文密码在 "=" 右边
[users] # harry = harryssecret # sally = sallyssecret lx = lx_passwd u1 = u1_passwd u2 = u2_passwd u3 = u3_passwd
5、添加群组并增加访问控制
修改文件 /data1/svn/project/conf/authz,增加g_lx和g_user两个群组,并对project仓库设置访问控制权限,不同目录允许不同群组的不同操作
[groups] g_lx = lx g_user = u1, u2, u3 [project:/] @g_lx = rw * = [project:/server] @g_lx = rw @g_user = r * = [project:/client] @g_lx = rw @g_user = rw * =
r 表示对该目录有读权限,w 表示对该目录有写权限,rw 表示对该目录有读写权限。最后一行的* =表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录,这点比较重要。
6、修改配置文件
修改文件 /data1/svn/project/conf/svnserve.conf 读取正确的配置
[general] anon-access = None auth-access = write password-db = /data1/svn/project/conf/passwd authz-db = /data1/svn/project/conf/authz
anon-access 控制没注册用户访问版本库的权限。取值范围为write、read和none,默认是read
auth-access 控制已注册用户访问版本库的权限。取值范围为write、read和none,默认是write
password-db 指定用户名口令文件名。没有绝对路径则文件位置为conf目录的相对路径。
authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 没有绝对路径则文件位置为conf目录的相对路径。
realm 指定版本库的认证域,即在登录时提示的认证域名称。
7、启动Svn本地服务器
svnserve -d -r /data1/svn/ ps -ef | grep svn netstat -anp | grep svn
8、在其他机器上check out
svn co svn://master/project Username: lx Password for 'lx':
master为域名,建议直接使用ip地址即可。
遇到Store password unencrypted (yes/no)? 输入yes
遇到Password for 'root': 直接按回车然后输入用户名 lx和密码
测试提交命令
cd project/ cd client/ touch client.sh svn add client.sh svn ci -m 'add client.sh'
二、升级成http认证服务器
一般公司的Svn服务器会搭建成https认证的服务器,密码则是使用ldap认证,所以搭建起来比较麻烦,除了httpd之外还要open-ssl等插件支持,但足够安全和实用。本文只介绍普通的http认证,并且采用本地密码验证。
1、升级http需要安装相关软件
yum install subversion mysql-server httpd mod_dav_svn sendmail wget gcc-c++ make unzip -y
2、http之支持加密的密码,所以需要将svn的明文密码转换
touch webpasswd htpasswd -b webpasswd lx lx_passwd
一步一步转换或者在 /data1/svn/project/conf 目录下新建下面perl脚本 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 输出: Adding password for user lx Adding password for user u1 Adding password for user u2 Adding password for user u3
3、修改 httpd.conf 文件
vim /etc/httpd/conf/httpd.conf 在文件最后添加 <Location /project> DAV svn SVNPath /data1/svn/project/ AuthType Basic AuthName "svn for project" AuthUserFile /data1/svn/project/conf/webpasswd AuthzSVNAccessFile /data1/svn/project/conf/authz Satisfy all Require valid-user </Location>
4、修改文件夹属主为apache
chown -R apache.apache /data1/svn/project/
ps aux | grep httpd 可以看出用户apache apache 26834 0.0 0.0 281608 3788 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26835 0.0 0.0 281840 5072 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26836 0.0 0.0 298372 6644 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26837 0.0 0.0 298372 6644 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26838 0.0 0.0 281680 4816 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26839 0.0 0.0 298360 6512 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND apache 26854 0.0 0.0 281680 4812 ? S 18:30 0:00 /usr/sbin/httpd -DFOREGROUND
5、重启httpd
service restart httpd
6、打开web页面 http://master/project/
建议更换成ip地址。输入账户密码如下:
三、svn常用命令
1、checkout到本地目录
svn -–username=*** --password=*** checkout path
2、往版本库中添加新的文件
svn add file
3、将改动的文件提交到版本库
svn commit -m "LogMessage" [-N] [--no-unlock] PATH
# 如果选择了保持锁,就使用–no-unlock开关 # -m 后面是提交的日志信息,一般情况是必填的。
简写:svn ci
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 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
本文部分内容是参考网上资源,由博主@Lx整理。
原创文章,转载请备注原文地址 http://www.cnblogs.com/lxmhhy/p/6044054.html
知识交流讨论请加qq:1130010617。谢谢合作。
评论暂时关闭