svn server 搭建
问题1:
Could not reliably determine the server's fully qualified domain name, using 内网IP for ServerName
云服务器:
内网IP 非127.0.0.1
sudo vim /etc/apache2/sites-available/default
打开default文件后,在default文件顶端加入:
ServerName 内网IP
端口号:80 --》8080
解决方法就是将apache的监听端口从80修改到8080即可。网络上的一些资料是基于旧的apache进行配置或者是windows环境下的apache,与ubuntu环境下的apache2的配置有些不同。下面的配置基于Ubuntu10.10以及apache2:
step1:修改监听端口以及主机端口为8080
- sudo vi /etc/apache2/ports.conf
- NameVirtualHost *:8080
- Listen 8080
step2: 只要修改virtualHost的端口即可
- sudo vi /etc/apache2/sites-available/default
- <VirtualHost *:8080>
step3:重启apache2
- sudo service apache2 stop
- sudo service apache2 start
SubVersion
出自Ubuntu中文
目录[隐藏 ]
|
[编辑 ] SubVersion服务安装设置
原文出处:https://wiki.ubuntu.org.cn/SubVersion
本文档阐述了如何在 Ubuntu 上设置 Subversion(通常也被称为 svn)。我们假设本文的读者是具有一定经验的 Linux 用户和系统管理员。
[编辑 ] 简介
如果您对 Subversion 还比较陌生,本节将给您一个关于 Subversion 的简要介绍。
[编辑 ] 假设
首先我们假设您能够在 Ubuntu 中操作 Linux 的命令、编辑文件、启动和停止服务。当然,我们还认为您的 Ubuntu 正在运行中,您可以使用
[编辑 ] 本文涉及的范围
类似的,要通过 HTTPS 协议访问 SVN 文件仓库,您需要在您的 Apache 2 中安装并配置好数字证书,这也不在本文的讨论范围之中。
[编辑 ] 安装
幸运的,Subversion 已经包含在 main 仓库中。所以,要安装 Subversion,您只需要简单的运行:
$ sudo apt-get install subversion $ sudo apt-get install libapache2-svn
如果系统报告了依赖关系的错误,请找出相应的软件包并安装它们。如果存在其它问题,也请自行解决。如果您是再不能解决这些问题,可以考虑通过 Ubuntu 的网站、Wiki、论坛或邮件列表寻求支持。
[编辑 ] 服务器配置
您应该已经安装了上述的软件包。本节将阐述如何创建 SVN 文件仓库以及如何设置项目的访问权限。
[编辑 ] 创建 SVN 仓库
sudo addgroup subversion sudo usermod -G subversion -a www-data
再或者直接使用命令编辑组文件"sudo vi /etc/group",增加组和成员(不推荐):
$ sudo vi /etc/group
$ cat /etc/group|grep subversion subversion:x:1001:www-data,exp
您需要注销然后再登录以便您能够成为 subversion 组的一员,然后就可以执行签入文件(Check in,也称提交文件)的操作了。
$ sudo mkdir /home/svn $ cd /home/svn $ sudo mkdir myproject $ sudo chown -R root:subversion myproject
$ sudo svnadmin create /home/svn/myproject
$ sudo chmod -R g+rws myproject
如果上面这个命令在创建SVN文件仓库之前运行,你可能在后续Check in的时候遇到如下错误:
Can't open '/home/svn/myproject/db/txn-current-lock': Permission denied
查看txn-current-lock文件的权限和用户以及组信息,应该类似于:
$ ls -l /home/svn/myproject/db/txn-current-lock -rw-rwSr-- 1 root subversion 0 2009-06-18 15:33 txn-current-lock
除了权限以外,用户及其组如果不对,则仍然会遇到上述问题,可以再次运行命令:
$ sudo chown -R root:subversion myproject
[编辑 ] 访问方式
模式 | 访问方法 |
file:/// | 直接访问本地硬盘上文件仓库 |
http:// | 通过 WebDAV 协议访问支持 Subversion 的 Apache 2 Web 服务器 |
https:// | 类似 http://,支持 SSL 加密 |
svn:// | 通过自带协议访问 svnserve 服务器 |
svn+ssh:// | 类似 svn://,支持通过 SSH 通道 |
本节中,我们将看到如何配置 SVN 以使之能够通过所有的方法得以访问。当然这里我们之讨论基本的方法。要了解更高级的用途,我们推荐您阅读《使用 Subversion 进行版本控制》在线电子书 。
[编辑 ] 直接访问文件仓库(file://)
这是所有访问方式中最简单的。它不需要事先运行任何 SVN 服务。这种访问方式用于访问本地的 SVN 文件仓库。语法是:
$ svn co file:///home/svn/myproject 或者 $ svn co file://localhost/home/svn/myproject
注意:如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).
[编辑 ] 通过 WebDAV 协议访问(http:// )
<Location /svn/myproject> DAV svn SVNPath /home/svn/myproject 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
接下来,您需要创建 /etc/subversion/passwd 文件,该文件包含了用户授权的详细信息。要添加用户,您可以执行下面的命令:
sudo htpasswd -c /etc/subversion/passwd user_name
sudo htpasswd /etc/subversion/passwd other_user_name
$ svn co http://hostname/svn/myproject myproject --username user_name
它会提示您输入密码。您必须输入您使用 htpasswd 设置的密码。当通过验证,项目的文件就被签出了。
警告:密码是通过纯文本传输的。如果您担心密码泄漏的问题,我们建议您使用 SSL 加密,有关详情请看下一节。
[编辑 ] 通过具有安全套接字(SSL)的 WebDAV 协议访问(https:// )
通过具有 SSL 加密的 WebDAV 协议访问 SVN 文件仓库(https://)非常类似上节所述的内容,除了您必须为您的Apache 2 Web 服务器设置数字证书之外。
您可以安装由诸如 Verisign 发放的数字签名,或者您可以安装您自己的数字签名。
[编辑 ] 通过自带协议访问(svn://)
当您创建了 SVN 文件仓库,您可以修改 /home/svn/myproject/conf/svnserve.conf 来配置其访问控制。
# [general] # password-db = passwd
现在,您可以在“passwd”文件中维护用户清单。编辑同一目录下“passwd”文件,添加新用户。语法如下:
username = password #(注意行开始不要有多余空格)
现在,您可以在本地或者远程通过 svn://访问 SVN 了,您可以使用“svnserve”来运行 svnserver,语法如下:
$ svnserve -d --foreground -r /home/svn # -d -- daemon mode # --foreground -- run in foreground (useful for debugging) # -r -- root of directory to serve 要了解更多信息,请输入: $ svnserve --help
当您执行了该命令,SVN 就开始监听默认的端口(3690)。您可以通过下面的命令来访问文件仓库:
$ svn co svn://hostname/myproject myproject --username user_name
基于服务器的配置,它会要求输入密码。一旦通过验证,就会签出文件仓库中的代码。
要同步文件仓库和本地的副本,您可以执行 update 子命令,语法如下:
$ cd project_dir $ svn update
要了解更多的 SVN 子命令,您可以参考手册。例如要了解 co (checkout) 命令,请执行:
$ svn co --help 或者这样 $ svn --help commit 或者直接 ☎ svn help co checkout (co): 从版本库签出工作副本。 使用: checkout URL[@REV]... [PATH] 。。。。。
☎ killall svnserve; svnserve -d -r /home/svn/
/home/svn/lj12-source/conf ☎ dog * authz:[groups] authz:lj12 = veexp authz:[lj12-source:/] <-注意写法。 authz:veexp = rw authz:@lj12 = rw authz:* = passwd:[users] <-2个用户和密码。 passwd:veexp = icep passwd:test = test svnserve.conf:[general] svnserve.conf:anon-access = none svnserve.conf:auth-access = write svnserve.conf:password-db = passwd svnserve.conf:authz-db = authz <-如果不启用authz,则test也可以取出。
☎ svn co svn://localhost/lj12-source --username veexp 认证领域: <svn://localhost:3690> a712643f-661e-0410-8ad4-f0554cd88977 用户名: veexp “veexp”的密码: A lj12-source/tim.h A lj12-source/en.c ......
认证失败的密码缓冲记录位置,明文密码。到1.6版本,可能使用keyring管理。如果调试密码,直接删除如下文件就可。
~/.subversion/auth/svn.simple/:
eea34a6f7baa67a3639cacd6a428dba4
[编辑 ] 通过具被SSH隧道保护的自带协议访问(svn+ssh://)
配置和服务器进程于上节所述相同。我们假设您已经运行了“svnserve”命令。
我们还假设您运行了 ssh 服务并允许接入。要验证这一点,请尝试使用 ssh 登录计算机。如果您可以登录,那么大功告成,如果不能,请在执行下面的步骤前解决它。
svn+ssh:// 协议使用 SSH 加密来访问 SVN 文件仓库。如您所知,数据传输是加密的。要访问这样的文件仓库,请输入:
$ svn co svn+ssh://hostname/home/svn/myproject myproject --username user_name
注意:在这种方式下,您必须使用完整的路径(/home/svn/myproject)来访问 SVN 文件仓库
基于服务器的配置,它会要求输入密码。您必须输入您用于登录 ssh 的密码,一旦通过验证,就会签出文件仓库中的代码。
您还应该参考 SVN book 以了解关于 svn+ssh:// 协议的详细信息。
[编辑 ] 参考资料
环境
Ubuntu 10.04
Subversion 1.6.6
1、SVN安装
$ sudo apt-get install subversion
2、添加SVN管理用户及subversion组
# adduser svnuser
# addgroup subversion
# addgroup svnuser subversion
3、创建项目目录
# mkdir /home/svn
# cd /home/svn
# mkdir myProject
# chown -R root:subversion myProject
# chmod -R g+rws myProject
4、创建SVN文件仓库
# svnadmin create /home/svn/myProject
myProject文件夹必须为空
5、修改文件仓库访问权限
# chmod 700 /home/svn/myProject
6、设置访问权限
位于/home/svn/myProject/conf/文件夹下的authz、passwd、svnserve.conf文件
svnserve.conf:svn服务配置文件,该文件版本库目录的conf目录下。
passwd:用户名口令文件,该文件名在文件svnserve.conf中指定,缺省为同目录下的。
authz:权限配置文件,该文件名也在文件svnserve.conf中指定,缺省为同目录下的。
(1)设置svnserve.conf
# vim svnserve.conf
取消一下四行的注释
anon-access = read
auth-access = write
password-db = password
authz-db = authz
并将anon-access = read的read改为none,禁止匿名用户访问。
(2)设置passwd
# vim passwd
[users]
admin = admin
user = user
设置两个用户admin和user
(3)设置authz
# vim authz
[groups]
admin = admin
user = user
[/]
@admin=rw
*=r
admin属于admin组,具有读写权限;
user用户属于user组,具有读权限。
7、启动SVN服务
# svnserve -d -r /home/svn
-d 表示以守护进程模式运行
-r 指定SVN根目录
8、设置SVN开机启动
(1).创建执行脚本svn.sh(/root路径下)
#!/bin/bash
svnserve -d -r /home/svn
(2).添加可执行权限
#chmod ug+x /root/svn.sh
(3).添加自动运行
#vim /etc/init.d/rc.local
在最后添加一行内容如下:
/root/svn.sh
(4).检查
重启服务器,使用ps -aux |grep svn看看svn进程是否启动了。
后记:
1.
版本库的初次导入可以采用多种方式:
(
1
)直接构建好版本库目录,并将源码拷贝的对应的位置,然后
svn import
即可;
(
2
)
先用
svn checkout
取出版本,
然后构建目录和源码,
执行
svn add
且
svn commit
即可。
2.
导入或者提交文件类型的控制
svn
客户端是可以配置忽略哪些些文件,比如说我们不想提交
*.o
之类的文件。那么可
以通过设置
svn:ignore
或者
global-
ignore
来进
行过滤相关的文件。通常默认的情况就会过
滤掉
*.o,
*.so,*.a
等被
svn
认为是中间生成的文件。我本人使用的客服端不管是
WIN
的还是
Linux
的都是这种默认情况。
但是,如果有时基于某种需要,或者是导入一个别人之前维护的工程,里面有些
*.so
,
*.a
文件必须保留,那么如果在第一次
import
的时候全部
导入
呢?曾经问过有些朋友说,
svn
add
或者
svn
import
是可以直接把这种文件导入到版本库的。但是我个人进行测试的时
候,确实导入不进去,除非你直接
svn add
这个文件,然后提交应该就可以了。
如果这样的文件比较多,
而且比较分散,
那么如何解决呢?看一下
svn import
和
svn add
这两个命令的帮助,都有
--no-ignore
选项。这个选项的功能就是执行相应动作的时候,不忽
略任何文件。那么执行以下两条命令:
svn import [source] [repository] --no-ignore
或
svn add [source] --no-ignore
会自动将
source
目录下所有的内容全部
import
或者
add
。
因此,通过
--no-ignore
选项,可以满足提交一些特殊文件的需求。
3.
用一个旧版本的
svnadmin
创建的版本库,直接拷贝到另外一台
svn
版本比较高的
PC
上
使用时,发现提示数据库版本不匹配。
解决的方法:
(
1
)导出旧的版本库内容,包含版本信息
具体使用的命令为
svnadmin dump,
详细使用方法参考手册。该命令的格式为:
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
如果我将版本库完整的信息都倒出来的话,执行如下命令:
# svnadmin dump old_repos > repos.dump
默认版本库
dump
的时候是输出在终端的,通过重定下输出到
repos.dump
文件里面。该文
件实际是文本文件。
(
2
)导入旧版本库的内容
在需要导入的位置,新建一个版本库
# svnadmin create new_repos
然后将
repos.dump
文件导入到新的版本库:
# svnadmin load new_repos < repos.dump
该命令成功执行完毕之后,新的版本库中已经包含了
old_repos
版本库中的所有版本内容。
svnadmin dump
和
svnadmin load
命令都支持导入
/
导出某个指定
revsion
或者某个指定范围的
所有
revision
。
后记:
1.
版本库的初次导入可以采用多种方式:
(
1
)直接构建好版本库目录,并将源码拷贝的对应的位置,然后
svn import
即可;
(
2
)
先用
svn checkout
取出版本,
然后构建目录和源码,
执行
svn add
且
svn commit
即可。
2.
导入或者提交文件类型的控制
svn
客户端是可以配置忽略哪些些文件,比如说我们不想提交
*.o
之类的文件。那么可
以通过设置
svn:ignore
或者
global-
ignore
来进
行过滤相关的文件。通常默认的情况就会过
滤掉
*.o,
*.so,*.a
等被
svn
认为是中间生成的文件。我本人使用的客服端不管是
WIN
的还是
Linux
的都是这种默认情况。
但是,如果有时基于某种需要,或者是导入一个别人之前维护的工程,里面有些
*.so
,
*.a
文件必须保留,那么如果在第一次
import
的时候全部
导入
呢?曾经问过有些朋友说,
svn
add
或者
svn
import
是可以直接把这种文件导入到版本库的。但是我个人进行测试的时
候,确实导入不进去,除非你直接
svn add
这个文件,然后提交应该就可以了。
如果这样的文件比较多,
而且比较分散,
那么如何解决呢?看一下
svn import
和
svn add
这两个命令的帮助,都有
--no-ignore
选项。这个选项的功能就是执行相应动作的时候,不忽
略任何文件。那么执行以下两条命令:
svn import [source] [repository] --no-ignore
或
svn add [source] --no-ignore
会自动将
source
目录下所有的内容全部
import
或者
add
。
因此,通过
--no-ignore
选项,可以满足提交一些特殊文件的需求。
3.
用一个旧版本的
svnadmin
创建的版本库,直接拷贝到另外一台
svn
版本比较高的
PC
上
使用时,发现提示数据库版本不匹配。
解决的方法:
(
1
)导出旧的版本库内容,包含版本信息
具体使用的命令为
svnadmin dump,
详细使用方法参考手册。该命令的格式为:
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
如果我将版本库完整的信息都倒出来的话,执行如下命令:
# svnadmin dump old_repos > repos.dump
默认版本库
dump
的时候是输出在终端的,通过重定下输出到
repos.dump
文件里面。该文
件实际是文本文件。
(
2
)导入旧版本库的内容
在需要导入的位置,新建一个版本库
# svnadmin create new_repos
然后将
repos.dump
文件导入到新的版本库:
# svnadmin load new_repos < repos.dump
该命令成功执行完毕之后,新的版本库中已经包含了
old_repos
版本库中的所有版本内容。
svnadmin dump
和
svnadmin load
命令都支持导入
/
导出某个指定
revsion
或者某个指定范围的
所有
revision
。
后记:
1.
版本库的初次导入可以采用多种方式:
(
1
)直接构建好版本库目录,并将源码拷贝的对应的位置,然后
svn import
即可;
(
2
)
先用
svn checkout
取出版本,
然后构建目录和源码,
执行
svn add
且
svn commit
即可。
2.
导入或者提交文件类型的控制
svn
客户端是可以配置忽略哪些些文件,比如说我们不想提交
*.o
之类的文件。那么可
以通过设置
svn:ignore
或者
global-
ignore
来进
行过滤相关的文件。通常默认的情况就会过
滤掉
*.o,
*.so,*.a
等被
svn
认为是中间生成的文件。我本人使用的客服端不管是
WIN
的还是
Linux
的都是这种默认情况。
但是,如果有时基于某种需要,或者是导入一个别人之前维护的工程,里面有些
*.so
,
*.a
文件必须保留,那么如果在第一次
import
的时候全部
导入
呢?曾经问过有些朋友说,
svn
add
或者
svn
import
是可以直接把这种文件导入到版本库的。但是我个人进行测试的时
候,确实导入不进去,除非你直接
svn add
这个文件,然后提交应该就可以了。
如果这样的文件比较多,
而且比较分散,
那么如何解决呢?看一下
svn import
和
svn add
这两个命令的帮助,都有
--no-ignore
选项。这个选项的功能就是执行相应动作的时候,不忽
略任何文件。那么执行以下两条命令:
svn import [source] [repository] --no-ignore
或
svn add [source] --no-ignore
会自动将
source
目录下所有的内容全部
import
或者
add
。
因此,通过
--no-ignore
选项,可以满足提交一些特殊文件的需求。
3.
用一个旧版本的
svnadmin
创建的版本库,直接拷贝到另外一台
svn
版本比较高的
PC
上
使用时,发现提示数据库版本不匹配。
解决的方法:
(
1
)导出旧的版本库内容,包含版本信息
具体使用的命令为
svnadmin dump,
详细使用方法参考手册。该命令的格式为:
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
如果我将版本库完整的信息都倒出来的话,执行如下命令:
# svnadmin dump old_repos > repos.dump
默认版本库
dump
的时候是输出在终端的,通过重定下输出到
repos.dump
文件里面。该文
件实际是文本文件。
(
2
)导入旧版本库的内容
在需要导入的位置,新建一个版本库
# svnadmin create new_repos
然后将
repos.dump
文件导入到新的版本库:
# svnadmin load new_repos < repos.dump
该命令成功执行完毕之后,新的版本库中已经包含了
old_repos
版本库中的所有版本内容。
svnadmin dump
和
svnadmin load
命令都支持导入
/
导出某个指定
revsion
或者某个指定范围的
所有
revision
。
http://wenku.baidu.com/link?url=ZGHAJwPDIrdEehrN8zrWni0HRxA0YPGtBsrhPXRwRfQb2EpGPmsShVyEHwO6sbOC-QhtBec_hjXhAd0O02Kkg2RGDW0arYAfdVtEpA80Hye
ubuntu下SVN服务器安装配置
一、SVN安装
1.安装包
$ sudo apt-get install subversion
2.添加svn管理用户及subversion组
$ sudo adduser svnuser
$ sudo addgroup subversion
$ sudo addgroup svnuser subversion
3.创建项目目录
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir fitness
$ sudo chown -R root:subversion fitness
$ sudo chmod -R g+rws fitness
4.创建SVN文件仓库
$ sudo svnadmin create /home/svn/fitness
5.访问方式及项目导入:
$ svn co file:///home/svn/fitness
或者
$ svn co file://localhost/home/svn/fitness
* 注意:
如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).
//--
下面的命令用于将项目导入到SVN 文件仓库:
$ svn import -m "New import" /home/svn/fitness file:///home/svnuser/src/fitness
一定要注明导入信息
//--------------------------//
6.访问权限设置
修改 /home/svn/fitness目录下:
svnserve.conf 、passwd 、authz三个文件,行最前端不允许有空格
//--
编辑svnserve.conf文件,把如下两行取消注释
password-db = password
authz-db = authz
//补充说明
# [general]
anon-access = read
auth-access = write
password-db = passwd
其中 anon-access 和 auth-access 分别为匿名和有权限用户的权限,默认给匿名用户只读的权限,但如果想拒绝匿
名用户的访问,只需把 read 改成 none 就能达到目的。
//--
编辑/home/svnuser/etc/passwd 如下:
[users]
mirze = 123456
test1 = 123456
test2 = 123456
//--
编辑/home/svnuser/etc/authz如下
[groups]
admin = mirze,test1
test = test2
[/]
@admin=rw
*=r
这里设置了三个用户mirze,test1,test2密码都是123456
其中mirze和test1属于admin组,有读和写的权限,test2属于test组只有读的权限
7.启动SVN服务
svnserve -d -r /home/svn
描述说明:
-d 表示svnserver以“守护”进程模式运行
-r 指定文件系统的根位置(版本库的根目录),这样客户端不用输入全路径,就可以访问版本库
如: svn://192.168.12.118/fitness
这时SVN安装就完成了.
局域网访问方式:
例如:svn checkout svn://192.168.12.118/fitness --username mirze --password 123456 /var/www/fitness
-----------------------------------------------------------------------
二、HTTP:// [apache]
1.安装包 [已安装subversion]
$ sudo apt-get install libapache2-svn
创建版本仓库:
sudo svnadmin create /目录地址
目录地址必须存在,这个就是保存版本仓库的地方,不同的版本仓库创建不同的文件夹即可,比如:
sudo svnadmin create /home/svn/project
本来/home/svn/project这个目录下什么都没有,执行下面的命令之后再去看一下,多出一些文件和文件夹,我们需要操作的是conf这个文件夹,这个文件夹下有一个文件,叫做passwd,用来存放用户名和密码。
然后把这个版本仓库目录授权给apache读写:
sudo chown -R www-data:www-data /目录地址
然后来到打开apache配置文件:
sudo gedit /etc/apache2/mods-available/dav_svn.conf
加入如下内容:
<Location /project>
DAV svn
SVNPath /home/svn/project
AuthType Basic
AuthName “myproject subversion repository”
AuthUserFile /home/svn/project/conf/passwd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
location说的是访问地址,比如上述地址,访问的时候就是
http://127.0.0.1/project
其中有两行被注释掉了,以保证每次都需要用户名密码。
最后一步就是创建访问用户了,建议将用户名密码文件存放在当前版本仓库下conf文件夹下,这样版本仓库多的时候无至于太乱。
因为conf文件夹下已经存在passwd文件了,所以直接添加用户:
sudo htpasswd -c /home/svn/project/conf/passwd test
然后输入两遍密码,laoyang这个用户就创建好了。
打开/home/svn/project/conf/passwd这个文件,会开到形如如下形式的文本:
test:WEd.83H.gealA //后面是加密后的密码。
创建以后,再次需要往别的版本仓库添加这个用户,直接把这一行复制过去就可以了。
重启apache就可以了。
sudo /etc/init.d/apache2 restart
-----------------------------------------------------------------------
三、同步更新 [勾子]
同步程序思路:用户提交程序到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具体实现细节
post-commit脚本
编辑文件:sudo vim /home/svn/fitness/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/www --username mirze --password 123456
或
#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 server 搭建相关推荐
- Linux 搭建SVN server
一. SVN 简单介绍 Subversion(SVN) 是一个开源的版本号控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository ...
- (0063)iOS开发之SVN server的搭建
转载:http://www.cnblogs.com/claireyuancy/p/7345489.html 目的:了解 SVN 搭建的步骤原理! SVN是Subversion的简称,是一个开放源码的版 ...
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...
- [How TO]-在ubuntu20.10上搭建SVN Server
背景: 做为一名嵌入式工程师,工作了八九年,积攒了大量的学习资料,家里备有3个电脑.好几块硬盘,另外还有百度云盘.阿里云盘等.各种零碎的资料.不知如何分类,导致出现了有的资料只出现在某一个硬盘中,或者 ...
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统【转】
转自:http://www.cnblogs.com/xing901022/p/4399382.html 本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小 ...
- svn 使用TortoiseSVN server搭建本地SVN服务器
使用TortoiseSVN server搭建本地SVN服务器 转载于:https://www.cnblogs.com/fireblackman/p/10799625.html
- win7系统搭建svn服务器,Win7系统如何使用VisualSVN Server搭建SVN服务器?
SVN是程序员常用的一款软件,它可以很好的帮助程序员进行版本控制以及代码管理.但是要使用SVN还需要进行配置,那么今天就由小编替大家讲解一下Win7系统如何使用VisualSVN Server搭建SV ...
- 百度网盘+Visual SVN Server(windows)搭建SVN个人仓库
百度网盘,我买了会员,你懂得,非会员,上传下载速度太慢!! 百度网盘,有"同步空间",(其实,这个也可以作为svn服务器使用,但是 是自动同步,不太好) 下面的内容是我拷贝的:Vi ...
- Linux搭建SVN Server
一. SVN 简介 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository) 中 ...
- SVN服务器搭建--Subversio与TortoiseSVN的配置安装
SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...
最新文章
- 如何正确配置Nginx+PHP
- 无线网络实体图生成工具airgraph-ng
- 学习java的一些笔记(8)
- 软路试--就像一棵树活着
- Ubuntu系统如何安装nodejs及npm
- 电脑屏幕保护怎么取消_怎么监控员工电脑?老板如何知道员工上班在干什么?...
- callapplybind的js实现以及应用
- 验证用户输入的是不是中文名字 淘宝精品案例 元素样式设置的方式 链式编程
- JDG战队与英特尔达成为期两年的冠名合作
- 递推DP URAL 1586 Threeprime Numbers
- Promise 的 9 个提示
- 25年前的预言(转贴一篇,事实胜于雄辩)
- JS中height、clientHeight、scrollHeight、offsetHeight区别
- C# --- WinForm基本知识与绘图(上)
- php小小通讯录,小小通讯录
- mysql 蚂蚁金服_面试蚂蚁金服,首战被MySQL惨虐,熬夜啃透这份阿里面经复盘一个月再战拿下P7offer...
- 沈阳城市建设学院计算机2019,沈阳城市建设学院2019-2020年校历及寒假放假时间安排,什么时候放寒假...
- java kml_当Java遇上KML
- RVIZ 的菜单背景变成黑色
- 张静君的“商脉通”和企业博客