linux 下 svn 服务器搭建

来源:互联网 发布:mac软件 威风 编辑:程序博客网 时间:2024/06/06 02:58

svn配置


1.安装svn服务器端

yum install subversion 从镜像下载安装svn服务器端
cd /usr/local/ //进入目录,准备创建svn目录
mkdir svn //创建一个svn目录
chmod -R 777 svn //修改目录权限为777
svnadmin create /usr/local/svn/sunny //创建一个svn版本仓库sunny(sunny可以随便起名字)
cd svn/sunny/conf //进入sunny版本仓库下的配置文件目录

下面要修改这个目录下的三个配置文件
(1)vi svnserve.conf //配置版本库信息和用户文件和用户密码文件的路径、版本库路径


# anon-access = read
# auth-access = write
# password-db = passwd
//这四行,前面的#号和空格去掉(注意去掉#要顶格写,不要留有多余空格),变成
anon-access = none //改成none
auth-access = write
password-db = passwd
realm = sunny //改成自己的版本库
保存

(2)vi authz //文件,创建svn组和组用户的权限
[group]
sunny = gep,wce //创建一个sunny的组,并指定两个用户gep和wce

[/] //制定根目录下的权限
@sunny = rw //sunny组用户权限为读写
* = r //其他用户只有读权限
保存退出

(3) vi passwd //创建或修改用户密码
[users]
gep = 123456 //用户名为gep的用户的密码为123456
wce = 123456 //。。。
保存退出


启动svn:

svnserve -d -r /usr/local/svn/ //这里采用多版本库的方式启动 如果是单版本库 可以svnserve -d -r /usr/local/svn/sunny
添加一行
然后要设置自启动
vi /etc/rc.local 打开自启动文件添加
/usr/bin/svnserve -d -r /usr/local/svn/

到此为止可以从服务端检出文件了.

svn命令:

netstat -tnl |grep :3690 查看svn是否启动
ps aux |grep 'svn' 查找所有svn启动的进程
kill -9 2505 杀死2505这个查找到的svn进程


svn checkout svn://172.19.5.2/sunny /data0/htdocs/blog //检出一份版本库文件到指定目录
svn up //更新文件

自动更新

在vi /usr/local/svn/sunny/hooks/post-commit中加入

#!/bin/sh
#设置一些变量
SVN=/usr/bin/svn
WEB=/home/testsvn #要更新的目录
export LANG=en_US.UTF-8
$SVN update $WEB --username xxx --password xxx


其中SVN=右边改成 svn 命令位置 一般默认为/usr/bin/svn
WEB=右边改成你实际的web目录
赋予可执行权限
chmod 777 /usr/local/svn/sunny/hooks/post-commit
安装完毕


(自动更新还有待完善)


=========================================================================

其他操作

1.svn提交
#svn commit -m "注释" xxx.php //提交文件

svn ci -m'aaa' test.php //提交文件

svn  ci -m=hqlong//提交所有添加文件

2.svn添加

#svn add file //新建文件并添加到svn

svn add * --force //递归添加

svn add *.php //(添加当前目录下所有的php文件)

svn add *  // 将同一目录下的未加入版本库的文件提交到版本库。只是针对同一目录的文件

svn add */*   //如果目录下还有目录,即二级目录

svn add */*/*  //三目录依次类推。

svn add */**/*  //那么如果里面有很多级目录,或者说根本不清楚究竟有多少级。 这时使用通配符“*”,来解决一切未知的答案。 
3.svn 删除

svn delete test.php //删除test.php
svn log test.php //查看test文件的log信息
svn cleanup //清理当前目录
当很多人同时开发一个项目,项目的配置文件可能在不同的开发人员的机器上,会有不同。当每次更新整个项目时,希望更新全部的文件但除了配置文件以外。 
又如配置文件为config.php. 
这时我们可以使用正则来排除我们所不需要提交的代码。 
提交代码命令如下 

~@bash svn ci !(config.php) -m=hqlong 

表示除了config.php以外的代码,都提交到版本库中。 
更新代码命令如下 

~@bash svn up !(config.php) 

表示除了config.php的所有代码都更新。
 

svn switch --relocate svn://192.168.1.253 svn://172.19.10.250 //重新定位SVN版本库地址
svn switch --relocate --force  旧地址  新地址


SVN版本库起动方式

// SVN版本库起动方式,现在SVN下面有 sunny、test 两个版本库
1:单版本库起动 svnserve -d -r /usr/local/svn/sunny
2:多版本库起动 svnserve -d -r /usr/local/svn
区别在于起动svn时候的命令中的启动参数-r指定的目录。

限制不同的用户对不同的版本库操作权限,修改版本库中的conf目录下的 authz文件

以配置 sunny 版本库为例
vi authz
[groups]
teacher = sunny,sunny1
[sunny:/] //指定版本库跟目录下的权限
@teacher = rw //teacher组用户权限为读写
* = r //其他用户只有读权限
保存退出

vi passwd 设置组中用户的账号和密码
[users]
sunny = 123456

sunny1 = 123456


svn碰到的错误

删除文件夹后点commit提交,但是报错,报错内容如下:

提示 "svn: Commit failed (details follow): svn: '/***/xxx.c' is scheduled for addition, but is missing "

原因:之前用SVN提交过的文件,被标记为"add"状态,等待被加入到仓库。若此时你把这个文件删除了,SVN提交的时候还是会尝试提交这个文件,虽然它的状态已经是 "missing"了。


解决:在命令行下用 "svn revert xxx.c --depth infinity",在图形界面下,右键--Revert,选中那个文件。这样就告诉SVN把这个文件退回到之前的状态 "unversioned",也就是不对这个文件做任何修改