Ubuntu下SVN安装和配置
一、SVN安装 
1.安装包 
1.$ sudo apt-get install subversion
2.创建项目目录
$ sudo mkdir /home/xiaozhe/svn
$ cd /home/xiaozhe/svn/
$ sudo mkdir mypro
3.创建svn文件仓库
$ sudo svnadmin create /home/xiaozhe/svn/mypro
4.导入项目到svn文件仓库 (可有可无)
$ sudo svn import -m "" 你的文件夹路径 file:///home/xiaozhe/svn/mypro
5.访问权限设置 
修改 /home/xiaozhe/svn/mypro/conf目录下: 
svnserve.conf 、passwd 个文件,行最前端不允许有空格
编辑svnserve.conf文件,把如下面行取消注释,并需要顶格
anon-access = read
auth-access = write
password-db = passwd
编辑passwd  如下: 
[users] 
andy = andy
配置允许访问的svn用户vi /opt/svn/conf/pwd.conf
为了简化配置,2个版本库共用1个用户配置文件。如有必要,也可以分开。
注意:对用户配置文件的修改立即生效,不必重启svn。
文件格式如下:
[users]
<用户1> = <密码1>
<用户2> = <密码2>
其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示例:
[users]
alan = password
king = hello
配置svn用户访问权限vi /home/svn/project/conf/authz.conf
为了简化配置,3个版本库共用1个权限配置文件/home/svn/project/conf/pwd.conf。如有必要,也可以分开。文件中定义用户组和版本库目录权限。
注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。
用户组格式:
[groups]
<用户组名> = <用户1>,<用户2>
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
其中,方框号内部分可以有多种写法:
/,表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/opt/svndata。这样,/就是表示对全部版本库设置权限。
repos1:/,表示对版本库1设置权限
repos2:/abc, ,表示对版本库2中的abc项目设置权限
repos2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。
示例:
[groups]
admin = alan
[/]
@admin = rw
[repos1:/abc/aaa]
king = rw
[repos2:/pass]
king =
6. 开启svnserve,以SVN根目录开启: 
$ svnserve -d -r /home/xiaozhe/svn
7.检查是否正常启动
$ netstat -ntlp
可以看到有一个端口为3690的地址,表示启动成功
(如果使用Apache连接,则跳过下步)
8.局域网访问,checkout出来SVN库的文件
svn checkout svn://SvnIp地址/mypro 
或者简写为: 
svn co svn://SvnIp地址/mypro
二、在Ubuntu下使用Apache配置Subversion
1.安装必要软件
$ sudo apt-get install subversion libapache2-svn apache2
2.修改apache配置文件/etc/apache2/mods-available/dav_svn.conf
<Location /svn/mypro>
DAV svn
SVNPath /home/xiaozhe/svn/mypro
AuthType Basic
AuthName "myproject subversion repository"
AuthUserFile /etc/subversion/passwd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
如果需要用户每次登录时都进行用户密码验证,请将<LimitExcept GET PROPFIND OPTIONS REPORT>与</LimitExcept>两行注释掉。
当您添加了上面的内容,您必须重新起动 Apache 2 Web 服务器,请输入下面的命令:
$ sudo /etc/init.d/apache2 restart
3.创建 /etc/subversion/passwd 文件,该文件包含了用户授权的详细信息
$ sudo htpasswd -c /etc/subversion/passwd user_name
它会提示您输入密码,当您输入了密码,该用户就建立了。“-c”选项表示创建新的/etc/subversion/passwd文件,所以user_name所指的用户将是文件中唯一的用户。如果要添加其他用户,则去掉“-c”选项即可:$ sudo htpasswd /etc/subversion/passwd other_user_name
4.您可以通过下面的命令来访问文件仓库:
$ svn co http://hostname/svn/myproject myproject --username user_name
或者通过浏览器:http://hostname/svn/myproject
三、ubuntu SVN命令大全
1、将文件checkout到本地目录 svn checkout path(path 是服务器上的目录) 
 例如:$ svn checkout svn://192.168.1.1/pro
简写:$ svn co svn://192.168.1.1/pro
2、往版本库中添加新的文件
$ svnadd file 
 $ svn add test.php(添加test.php) 
 $ svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
$ svn commit -m "LogMessage" [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no- unlock开关) 
 例如:$ svn commit -m 'add test file for my test' test.php 
 简写:$ svn ci
4、更新到某个版本
$ svn update -rm path 
 例如:$ svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。 
$ svn update -r 200 test.php(将版本库中的文件test.php还原到版本200) 
$ svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文 件,然后清除$ svn resolved,最后再提交commit) 简写:svn up
5、删除文件
$ svn delete path -m 'delete test fle'
例如:$ svn delete test.php 然后再$ svn ci -m 'delete test file'
简写:svn (del, remove, rm)
6、比较差异
$ svn diff path(将修改的文件与基础版本比较) 
 例如:$ svn diff test.php 
 $ svn diff -r m:n path(对版本m和版本n比较差异) 
 例如:svn diff -r 200:201 test.php 
 简写:svn di
7、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示) 
 【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】 
 2)svn status -v path(显示 文件和子目录状态) 
 第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。 
 注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。 
 简写:svn st
8、解决冲突
$ svn resolved: 移除工作副本的目录或文件的“冲突”状态。 
 用法: $ resolved PATH… 
 注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的 
 相关文件,然后让 PATH 可以再次提交。
四、同步更新 [勾子]
同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。
知识点: 
1、SVN的hooks 
# start-commit 提交前触发事务 
# pre-commit 提交完成前触发事务 
# post-commit 提交完成时触发事务 
# pre-revprop-change 版本属性修改前触发事务 
# post-revprop-change 版本属性修改后触发事务 
通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大。
2、同步命令rsync的具体参数使用
3、具有基个语言的编程能力bash python perl都可以实现 
post-commit脚本
编辑文件:sudo vim /home/xiaozhe/svn/mypro/hooks/post-commit
注意:编辑完成post-commit后,执行:$ sudo chmod 755 post-commit
内容:
#!/bin/sh 
export LANG=zh_CN.UTF-8 
sudo /usr/bin/svn update /var/www/myblog --username xiaozhe --password xiaozhe
或更加复杂的同步更新
#Set variable 
SVN=/usr/bin/svn 
WEB=/home/test_nokia/ 
RSYNC=/usr/bin/rsync 
LOG=/tmp/rsync_test_nokia.log 
WEBIP="192.168.0.23" 
export LANG=en_US.UTF-8 
  
#update the code from the SVN 
$SVN update $WEB --username user --password  password 
#If the previous command completed successfully, to continue the following 
if [ $? == 0 ] 
then 
    echo ""     >> $LOG 
    echo `date` >> $LOG 
    echo "##############################" >> $LOG 
    chown -R nobody:nobody /home/test_nokia/ 
    #Synchronization code from the SVN server to the WEB server, notes:by the key 
    $RSYNC -vaztpH  --timeout=90   --exclude-from=/home/svn/exclude.list $WEB root@$WEBIP:/www/ >> $LOG 
fi
以上是具体的post-commit程序 
注意事项: 
1、一定要定义变量,主要是用过的命令的路径。因为SVN的考虑的安全问题,没有调用系统变量,如果手动执行是没有问题,但SVN自动执行就会无法执行了。 
2、SVN update 之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码如果只是手动一样会更新,但自动一样的不行。 
3、加上了对前一个命令的判断,如果update的时候出了问题,程序没有退出的话还会继续同步代码到WEB服务器上,这样会造成代码有问题 
4、记得要设置所属用户,因为rsync可以同步文件属性,而且我们的WEB服务器一般都不是root用户,用户不正确会造成WEB程序无法正常工作。 
5、建议最好记录日志,出错的时候可以很快的排错 
6、最后最关键的数据同步,rsync的相关参数一定要清楚,这个就不说了。注意几个场景: 
这里的环境是SVN服务器与WEB服务器是开的 
把SVN服务器定义为源服务器 WEB服务器为目的服务器 
场景一、如果目的WEB服务器为综合的混杂的,像只有一个WEB静态资源,用户提交的,自动生成的都在WEB的一个目录下,建议不要用–delete这个参数 
上面这个程序就是这样,实现的是源服务器到目的服务器的更新和添加,而没有删除操作,WEB服务器的内容会多于源SVN的服务器的 
场景二、实现镜像,即目的WEB服务器与源SVN服务器一样的数据,SVN上任何变化WEB上一样的变化,就需要–delete参数 
场景三、不需要同步某些子目录,可能有些目录是缓存的临时垃圾目录,或者是专用的图片目录(而不是样式或者排版的)要用exclude这个参数 
注意:这个参数的使用不用写绝对路径,只要目录名称就行 aa代表文件 aa/ 代表目录 ,缺点就是如果有多个子目录都是一样的名称那么这些名称就都不会被同步 
建议用–exclude-from=/home/svn/exclude.list 用文件的形式可以方便的添加和删除 
exclude.list
.svn/ 
.DS_Store 
images/
利用SVN的钩子还可以写出很多的程序来控制SVN 如代码提交前查看是否有写日志,是否有tab,有将换成空格,是否有不允许上传的文件,是否有超过限制大小的文件等等。
一台服务器两个svn
在原来那个svn目录下面继续插件一个项目
svnadmin taobao
svnserve -d --listen-port 3691 -r /home/svn/taobao
注明:两个svn不能同时指向同一个项目 因为里面.svn可能会重复
Ubuntu下SVN安装和配置的更多相关文章
- 【转载】Ubuntu下SVN安装和配置
		
一.SVN安装 1.安装包 1.$ sudo apt-get install subversion 2.创建项目目录 $ sudo mkdir /home/xiaozhe/svn $ cd /home ...
 - [转]:Ubuntu 下Apache安装和配置
		
[转]:Ubuntu 下Apache安装和配置_服务器应用_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2013-06/85827.htm ...
 - Torch7在Ubuntu下的安装与配置
		
Torch7的本系列教程的主要目的是介绍Torch的入门使用.今天首先分享一下Torch7的安装.(在Ubuntu14.04安装torch7) 为什么选择Torch Torch的目标是在建立科学算法的 ...
 - LINUX环境下SVN安装与配置(利用钩子同步开发环境与测试环境)
		
安装采用YUM一键安装: 1.环境Centos 6.6 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve ...
 - Ubuntu 下Apache安装和配置
		
在Ubuntu上安装Apache,有两种方式:1 使用开发包的打包服务,例如使用apt-get命令:2 从源码构建Apache.本文章将详细描述这两种不同的安装方式. 方法一:使用开发包的打包服务—— ...
 - MySQL在Win10与Ubuntu下的安装与配置
		
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 近段时间把自己电脑(win).虚拟机(Ubun ...
 - ubuntu下Pycharm安装及配置
		
从知乎里看到了Pycharm的介绍,感觉还不错,记录下今天的安装过程 1.从http://www.jetbrains.com/pycharm/download/下载最新的Pycharm 2.在终端中进 ...
 - Ubuntu 下Apache安装和配置2
		
在Ubuntu上安装Apache,有两种方式:1 使用开发包的打包服务,例如使用apt-get命令:2 从源码构建Apache.本文章将详细描述这两种不同的安装方式. 方法一:使用开发包的打包服务—— ...
 - eclipse(1)----ubuntu下的安装与配置
		
eclipse的安装与配置 1.eclipse官网下载,最新版本eclipse-jee-oxygen-3-linux-gtk-x86_64.tar.gz 2.tar包存在~/Download/下,解压 ...
 
随机推荐
- 终于搞定Fastreport2.x PDF输出,相信其他版本也差不多
			
这个版本有powerpdf可以支持,但有bug, 经过反复摸索,终于搞定. 基本可用. 主要是中英文混合在一起,如果按中文输出,会有英文宽度也是中文的宽度了,格式变化,不可 接受. 而按英文输出,又是 ...
 - url下载文件到本地
			
$url = 'http://czd.111.net/extra/car2.jpg'; function download($url, $path = './huahua.jpg') { $ch = ...
 - c++智能指针(2)
			
追加一个shared_ptr指针 #include <memory> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { ...
 - 如何烧写BIOS到SD卡里面
			
针对TINY6410 ADK型号 1.SD卡格式化为FAT32或者FAT格式 2.将SD卡插入USB接口的读卡器,并插在PC的USB口 3.“以管理员身份运行”SD-Flasher.exe(在tiny ...
 - SQL 中的Begin...End语句
			
Begin...End通常用来表示一个语句块,其内部的代码可以包含一组T-SQL语句,可以理解为高级语言中的{},这样在使用while循环时才知道判断什么时候结束.
 - 2016年3月31日_应化所群体Review
			
Review目的: Phonegap的ble插件可以接收到设备发送的信息,但接收并在控制台显示的数据夏一鸣不知道是正确的数据,还是由于编码解码问题导致的乱码问题.此次Review要解决的问题即判断接收 ...
 - 【Web】网页清除浮动的方法
			
网页中,经常用浮动的div来布局,但是会出现父元素因为子元素浮动引起内部高度为0的问题,为了解决这个问题,我们需要清除浮动,下面介绍4中清除浮动的方法. 在CSS中,clear属性用户清除浮动,语法: ...
 - spring学习 十 schema-based 前置后后置通知
			
spring 提供了 2 种 AOP 实现方式:(1)Schema-based ,(2)AspectJ Schema-based:每个通知都需要实现接口或类,配置 spring 配置文件时在<a ...
 - 各种 on事件触发js代码
			
[转]各种 on事件触发js代码 1.onmouseenter:当鼠标进入选区执行代码 <div style="background-color:red" onmouseen ...
 - 栈(NOIP2003&水题测试2017082501)
			
题目链接:栈 这题不难. 我们看一下,其实可以发现是卡特兰数. 不知道卡特兰数?没事,给你简单讲一下. 卡特兰数的递推式f(n)=f(0)*f(n-1)+f(1)*f(n-2)+-+f(n-2)*f( ...