- 浏览: 226483 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (105)
- java (30)
- linux unix (19)
- 版本控制 (15)
- ajax (2)
- 开发工具及辅助工具 (3)
- database (2)
- flex (10)
- 其它 (2)
- windows (1)
- 开源企业应用 (6)
- 开源erp (4)
- 开源cms (0)
- 开源门户 (0)
- php (1)
- ofbiz&opentaps (4)
- 运维管理 (0)
- MOQUI (3)
- linux unix mysql (0)
- mysql (2)
- hadoop (3)
- android (0)
- 微信公众号 (1)
- java cassandra nosql (0)
- Nosql (1)
- socket (1)
- tcp (1)
- udp (1)
- 十六进制 (1)
- ofbiz (1)
- docker (1)
- 虚拟化 (0)
- 分布式 (0)
最新评论
-
w87848608:
用phpunit --coverage-html命令一样出现了 ...
关于phpunit与Selenium取coverage的配置(原创) -
surpass_li:
好久没来这了,不好意思,你参照Deploying OFBiz ...
ofibz10.04部署到 jboss5.1.0成功 -
tide2046:
求部署文档。谢谢。
ofibz10.04部署到 jboss5.1.0成功 -
Romotc:
征文 +1,1楼的方法还是有点问题。
eclipse编译时过滤SVN版本控制信息方法 -
我改名了:
谢谢,收 藏 了,备用。
Java获取客户端真实IP地址的两种方法(转)
为了统一进行文档与程序的版本管理,更好的使团队进行协同工作。对版本管理软件定为Subversion(一款开源的项目管理工具)。<o:p></o:p>
以下关于apache与subversion相结合的服务器的安装与配置<o:p></o:p>
一.windows上安装apache<st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">2.0.59</st1:chsdate>+Subversion-1.3.1 <o:p></o:p>
OS: Windows XP SP2
1) 安装Apache Server
2) 安装SVN
3) 配置邮件通知
<!---->1. <!---->安装apache_<st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">2.0.59</st1:chsdate>-win32-x86-no_ssl.msi
安装过程中设置以下参数:
Network Domain: svn.company.com
Server name: svn.company.com
Administrator's Emai Address: admin@company.com
安装到默认路径为D:\devtools\Apache2
<!---->2. <!---->安装svn-<st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">1.3.1</st1:chsdate>-setup.exe,安装到默认路径为D:\devtools\Subversion默认安装后,在apache的配置文件httpd.conf中会自动加入以下两行。
LoadModule dav_svn_module "D:/devtools/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module " D:/devtools/Subversion/bin/mod_authz_svn.so"
把这行的注释去掉
LoadModule dav_fs_module modules/mod_dav_fs.so
拷贝D:\devtools\Subversion\bin下的libdb43.dll到这个目录下Apache2\modules
打开apache的配置文件httpd.conf在末尾处加入以下参数:
<location svn=""></location>
<location svn=""></location>
<location svn=""></location>
< L*ocat*ion /s*vn>
DAV svn
SVNListParentPath on
SVNParentPath E:\svn-repository
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile E:/svn-repository/test/passwd
#AuthzSVNAccessFile svnaccessfile
Require valid-user
< /L*oc*at*ion **>
保存。(在这里权限文件我不多讲了,大家多做实验就明白了)
建立仓库
打开CMD命令行界面,"开始" -> "运行" -> "cmd" -> "回车"
C:\ > d: //进入d盘(因为我们要在d盘下创建仓库)
e:\> md svn-repository //创建一个名叫svn-repository的目录
e:\> c: //进入C盘
C:\> cd\ //退到C盘根目录
C:\ > cd D:\devtools\Subversion\bin //进入subversion/bin目录
D:\devtools\Subversion\bin> svnadmin create E:\svn-repository\test //用svnadmin命令创建名为test的仓库(这条命令成功后,在test下会出现很多文件夹和文件)
D:\devtools\Subversion\bin> cd D:\devtools\Apache2\bin //进入apache\bin目录
D:\devtools\Apache2\bin> htpasswd -cm E:\svn-repository\test\passwd user1 //用htpasswd命令创建第一个用户(user1),同时生成密码认证文件,c参数为create,m参数为MD5加密方式
New password: ****** //输入密码
Re-type new password: ****** //再次输入密码
Adding password for user test //加入用户成功
D:\devtools\Apache2\bin> htpasswd -m E:\svn-repository\test\passwd user2 //用htpasswd命令创建第二个用户(user2),注意如果在这时加入c参数会覆盖掉之前创建的用户及文件。
New password: ******
Re-type new password: ******
Adding password for user test 2 //加入用户成功
重复以上述操作,添加所有用户。
重新启动apache,进行测试。
用IE打开http://svn.company.com/svn,这时应该可以看到
Revision 0: /
--------------------------------------------------------------------------------
Powered by Subversion version <st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">1.3.1</st1:chsdate> . //说明我们已经配置成功了
<!---->3. <!---->关于权限的配置
<!---->4. <!---->更改apache的配置文件httpd.conf在末尾处“AuthzSVNAccessFile”行的注释去掉,后边的参数使用绝对路径如:E:\svn-repository\svnaccessfile。:
<location svn=""></location><o:p></o:p>
<location svn=""></location>
< L*ocat*ion /s*vn>
DAV svn
SVNListParentPath on
SVNParentPath E:\svn-repository
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile E:/svn-repository/test/passwd
AuthzSVNAccessFile E:\svn-repository\svnaccessfile
Require valid-user
< /L*oc*at*ion **>
(以上有关< /L*oc*at*ion **>的,去掉*使用)
各级目录的访问与修改权限参见下E:\svn-repository\svnaccessfile 如下:
#对用户进行分组,然后把组分配给每一个目录进行权限控掉。
[groups]
admin = admin
devteam1 = user1
devteam2 = user2,user3
docs = user4
<o:p> </o:p>
#admin组的成员对HealthPlatform库根目录有读的权限有读和写的权限,
# docs ,devteam1和devteam2组的成员对HealthPlatform库根目录有读的权限,
#其它用户对HealthPlatform库没有读与写权限。
#其它目录的权限类同
[HealthPlatform:/]
@admin = rw
@devteam1 = r
@devteam2 = r
@docs = r
* =
<o:p> </o:p>
[HealthPlatform:/docs]
@docs = rw
* = r
<o:p> </o:p>
[HealthPlatform:/project]
@devteam1 = rw<o:p></o:p>
@devteam2 = rw<o:p></o:p>
@admin = r<o:p></o:p>
* = <o:p></o:p>
<o:p> </o:p>
[test:/]<o:p></o:p>
@devteam1 = rw
@devteam2 = rw
@admin = rw
* =
规划完权限后要重启apache.
<o:p> </o:p>
<!---->a) <!---->代码库初使化
D:\tmp>svn import tp http://svn.surpass.org/svn/test / --username admin --message "t
est"
认证领域: <st1:chmetcnv w:st="on" tcsc="0" unitname="F" sourcevalue="893" numbertype="1" negative="False" hasspace="False">893f</st1:chmetcnv><st1:chmetcnv w:st="on" tcsc="0" unitname="C" sourcevalue="93" numbertype="1" negative="False" hasspace="False">93c</st1:chmetcnv>3-004e-fc<st1:chmetcnv w:st="on" tcsc="0" unitname="F" sourcevalue="4" numbertype="1" negative="False" hasspace="False">4f</st1:chmetcnv>-a<st1:chmetcnv w:st="on" tcsc="0" unitname="a" sourcevalue="38" numbertype="1" negative="False" hasspace="False">38a</st1:chmetcnv>-7db494922394
“admin”的密码:**********
新增 tp\test-dev
新增 tp\test-dev\readme.txt
新增 tp\readme.txt
新增 tp\test-test
新增 tp\test-test\readme.txt
<o:p> </o:p>
提交后的修订版为 1。
看到以上信息代码库初始化完成.
<o:p> </o:p>
<!---->b) <!---->从代码库中取出一个版本
D:\tmp>svn checkout http://svn.surpass.org/svn/test / --no-auth-cache --username admin
r
A test\readme.txt
A test\test-dev
A test\test-dev\readme.txt
A test\test-test
A test\test-test\readme.txt
取出修订版 1。
评论
版本控制最关键的一件事是保证数据的安全性,不能因为磁盘损坏,程序故障造成版本库无可挽回的错误,为此必须制定较完备的备份策略。在Subversion中,我们有三种备份方式:完全备份,增量备份
1, 完全备份
最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上,就可以了。但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造成备份的结果不够准确,失去备份的作用,为此Subversion提供了“svnadmin hotcopy”命令,可以防止这种问题。
如果要把project1备份到d:\svnrootbak目录下,只需要运行:
svnadmin hotcopy d:\svnroot\project1 d:\svnrootbak\project1
但是我们作为配置管理员,必须想办法优化这个过程,如果我们这个目录下有许多版本库,需要为每个版本库写这样一条语句备份,为此我写了下面的脚本,实现备份一个目录下的所有版本库。我们在D:\SVNROOT下创建了两个文件,simpleBackup.bat:
@echo 正在备份版本库%1......
@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
@echo 版本库%1成功备份到了%2!
这个文件仅仅是对“svnadmin hotcopy”的包装,然后是backup.bat:
echo off
rem Subversion的安装目录
set SVN_HOME="D:\Subversion"
rem 所有版本库的父目录
set SVN_ROOT=D:\svnroot
rem 备份的目录
set BACKUP_SVN_ROOT=D:\svnrootbak
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%
if exist %BACKUP_DIRECTORY% goto checkBack
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nI
goto end
:checkBack
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
goto end
:end
你在使用的时候,只需要修改backup.bat开头的三个路径,将两个脚本拷贝到“SVN_ROOT”下就可以了。根据以上的配置,你只需要运行 backup.bat,就可以把“SVN_ROOT”下的版本库都备份到“BACKUP_SVN_ROOT”里,并且存放在备份所在日的目录里,例如 “D:\svnrootbak\2006-10-22”。
虽然这部分工作很简单,可是必须有人定时地去执行这个操作(例如每周一凌晨),为了避免发生遗忘的情况,我们可以将这个操作加入到系统的at任务当中去,例如还是上面的环境,为了安装at任务,我们运行:
at 1:00 /every:M D:\svnroot\backup.bat这样在每周一凌晨1:00都会执行这个备份过程。当然备份在本机也是不安全的,你也许需要上传到别的机器,这个就要靠你自己去实现了。
2, 增量备份
尽管完全备份非常简单,但是也是有代价的,当版本库非常巨大时,经常进行完全备份是不现实的,也并不必要,但是一旦版本库在备份之间发生问题,该如何呢,这里我们就用到了增量备份。
增量备份通常要与完全备份结合使用,就像oracle数据库的归档日志,记录着每次Subversion提交的变化,然后在需要恢复时能够回到最新的可用状态。在我们这个例子中我们使用的是,svnadmin dump命令进行增量的备份,使用方法是:
svnadmin dump project1 --revision 15 --incremental > dumpfile2
上面的命令实现了对修订版本15进行增量的备份,其中的输出文件dumpfile2只保存了修订版本15更改的内容。
为了记录每次提交的结果,我们需要使用一项Subversion的特性--钩子(hook),看看我们的project1目录:
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
其中的hooks目录里存放的就是钩子脚本,我们在此处只使用post-commit钩子,这个钩子会在每次提交之后执行,为了实现我们的备份功能,我们在hooks下建立一个文件post-commit.bat,内容如下:
echo on
set SVN_HOME="D:\devtools\Subversion"
set SVN_ROOT=E:\svn-repository
set UNIX_SVN_ROOT=E:\svn-repository
set DELTA_BACKUP_SVN_ROOT=E:\bak\delta
set LOG_FILE=%1\backup.log
echo backup revision %2 >> %LOG_FILE%
for /r %SVN_ROOT% %%I in (.) do if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2
goto end
:end
通过这个脚本,可以实现D:\svnroot下的版本库提交时自动增量备份到D:\svnrootbak\delta(确定这个目录存在),其中使用的deltaBackup.bat其实可以放在任何地方,只是对脚本的svnadmin dump的包装,内容如下:
@echo 正在备份版本库%2......
%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%\%1.dump
@echo 版本库%2成功备份到了%3!
以上两个脚本可以直接拷贝到project2的hooks目录下,不需要修改就可以实现project2的自动备份。
以上的操作已经OK了,现在需要做的是将完全备份和增量备份结合起来,也就是在完全备份后清理增量备份的结果,使之只保存完全备份后的结果。
当果真出现版本库的故障,就要求我们实现版本库的恢复操作了,这是用要使用svnadmin load命令,同时也需要上次的完全备份例如要把上次完全备份backuprepo,和之后的增量备份dumpfile:
svnadmin load project1 < project1.dump
1、 本文档适用于对Subvesion的自带服务svnserve进行权限配置,全部在authz.conf文件中完成。
2、 如果要对含有中文的目录或文件进行管理或分配时,需要将该文件保存为UTF-8格式,微软的记事本保存为UTF-8格式无效,所以不要用。可用如UltraEdit或EditPlus等软件完成,保存时,格式应选择UTF-8 NO BOM。
3、 权限分配时,应遵守从根目录到子目录、从设置最广泛权限到最精细权限、从只读权限到读写权限设置原则,即从根目录开始设置最广泛的访问权限,然后逐步设置下属子目录的访问权限。提示:目录的访问权限既可以分配给组,也可以分配指定用户。
Svn协议下的登录验证与权限控制,分别在版本库的conf目录下,svnserve.conf总配置文件; passwd.conf存用户名与密码的配置文件; authz.conf存权限配置的文件
现举例进行说明:
启动服务:服务应指向所有版本库的根目录,本例中为D:\SVN,所有版本库都在D:\SVN目录下;
命令如下:
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:/SVN" displayname= "SVNService" depend= Tcpip start= auto
项目情况:D盘根目录下有一个文件夹SVN,在该文件夹中有jsyxv3、svntest两个版本库(可以有更多个),这些版本库共享使用同一个权限配置文件,目录结构如下:
D:\SVN
|---jsyxv3 (项目一,子目录略)
|---svntest (项目二,子目录略)
|---authz (共享的权限配置文件)
|---passwd (共享的密码文件)
#=====配置开始=====
#分组:
[groups]
group_admin = admin
group_ user1 = user1
group_ user2 = user2,user3
group_user3 = user4
#设置对根(即SVN)目录下,所有版本库的访问权限
[/]
* = r #所有登录用户默认权限为只读
@group_admin = rw #可以分配给组,该组有读写权限
wws = rw #也可以像这样分配给指定用户
#以下将对各版本库的及其目录进行权限分配
[jsyxv3:/] #设置对jsyxv3版本库中,所有项目的访问权限
* = #未授权用户没有任何权限
@group_user1 = rw
[jsyxv3:/程序管理] #设置对jsyxv3版本库中程序管理目录的访问权限
* = #未授权用户没有任何权限
@group_user2 = rw
[jsyxv3:/项目管理] #设置对jsyxv3版本库中项目管理目录的访问权限
* = #未授权用户没有任何权限
@group_user3 = rw
[svntest:/] #设置对svntest版本库中,所有项目的访问权限
* = #未授权用户没有任何权限
@group_user1 = rw
[svntest:/程序管理] #设置对svntest版本库中程序管理目录的访问权限
* = #未授权用户没有任何权限
@group_user2 = rw
@group_user3 = rw
[svntest:/项目管理] #设置对svntest版本库中项目管理目录的访问权限
* = #未授权用户没有任何权限
@group_user4 = rw
#=====配置结束=====
4、 最后重要提示:
4.1启动的服务与客户端检出的关系:
4.1.1 如果启动的服务指向一个具体的版本库,如红字部分描述:
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:/SVN/svntest" displayname= "SVNService" depend= Tcpip start= auto
则客户端检出的地址应为:svn://192.168.3.7/
4.1.2 如果启动的服务指向的是多个版本库的父目录,如红字部分描述:
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:/SVN" displayname= "SVNService" depend= Tcpip start= auto
则客户端检出的地址应为:svn://192.168.3.7/svntest
发表评论
-
svn钩子脚本,检查提交时日志填写情况
2011-07-07 15:31 1942版本库生成后,hooks目录下就存在一些钩子脚本的模板,用 ... -
git服务器gitolite安装与简单配置
2011-05-20 23:41 6804说到Git,作为Linus的另一大著名作品,目前已经成熟,与C ... -
解决Msysgit的中文乱码问题
2010-05-31 15:47 2719解决Msysgit的中文乱码问题 Git的Windows版本 ... -
对比SVN学习GIT版本管理工具(转)
2010-05-15 08:07 1577因为近期工作 ... -
git 使用http代理
2010-05-13 15:50 2027由于公司使用代理上网,使用git时需要走http proxy。 ... -
如何在svn系统中使用git(转)
2009-12-12 21:18 1689如果正在使用svn,打 ... -
Windows下subversion强制写日志钩子脚本
2008-03-07 09:03 7498Windows下subversion强制写日志强制写日志钩子脚 ... -
svn 命令行 faq(转)
2007-07-30 20:57 6341svn 命令行 faq 作者 willem ... -
Subversion之路--实现精细的目录访问权限控制(转)
2007-07-20 20:17 1598----- Original Subversion之路--实现 ... -
VSS使用手册 (转)
2007-03-20 22:06 16671 VSS概述 版本控制是工作组软件开发中的重要方 ... -
搭建svn+apache+trac平台(一)-安装 (转)
2007-03-20 22:00 2661我们的团队开始要进行前期的开发了,还有公司也有可能开始转到.N ... -
svnserver配置和使用
2006-12-02 23:40 5314svnserver配置和使用 svnserver 是个 ... -
subversion配置学习笔记
2006-12-02 20:32 2764subversion 工具已经安装完成.进行以下配置(环境fc ... -
利用模版生成CVS注释
2006-12-02 10:55 2622在Java源文件中添加下面用红色标记的一行 /** * @ ...
相关推荐
2. **Apache在Windows上的安装**: - 下载`apache_2.0.59-win32-x86-no_ssl.msi`安装文件,运行安装程序。 - 配置安装路径,一般默认为`C:\Program Files\Apache Software Foundation\Apache2.0`。 - 设置端口...
Apache HTTP Server,简称Apache,是世界上最流行的Web服务器...通过以上步骤,你就可以在Windows系统上成功配置并运行Apache_2.0.59服务器。随着对Apache配置的深入理解和实践,你将能够更好地管理和维护你的Web服务。
Apache是全球广泛使用的开源Web服务器软件,其在Windows平台上的安装相对直接。在本案例中,使用的是Apache 2.0.59版本,下载地址为:http://apache.justdn.org/httpd/bin32-x86-no_ssl.msi。安装过程中需设置网络域...
这个名为"Apache2.0.59.msi"的文件是Apache HTTP Server 2.0.59版本的安装程序,适用于Microsoft Windows操作系统。它采用MSI(Microsoft Installer)格式,这是一种由微软开发的安装包标准,用于在Windows系统上...
apache_2.0.59-win32-x86-no_ssl.msi
Apache 2.0.59在Windows上的配置和管理是一个良好的学习过程,可以帮助初学者理解Web服务器的工作原理和网络服务的部署。随着技能的提升,你可以尝试更高级的配置,如负载均衡、缓存优化等,进一步提升Apache的功能...
Apache HTTP Server,通常简称为Apache,是世界上最流行的Web服务器软件之一。这个超精简的Apache 2.0.59版本是由个人优化过的,旨在在保持功能的同时减少资源占用,使其更加轻巧,适合资源有限的环境或者快速部署的...
安装Apache 2.0.59后,安装Subversion。确保在Apache的`modules`目录下有以下模块文件:`mod_dav_svn.so`,`mod_authz_svn.so`以及可能根据Subversion版本变化的`libdb4x.dll`。如果这些文件缺失,可以从Subversion...
在本安装指南中,我们将详细介绍如何在Windows 2000/2003/XP操作系统上安装Apache Web服务器、Subversion (svn) 版本控制系统以及Trac项目管理工具,并完成它们之间的集成配置。为了确保所有步骤都能顺利进行,我们...
python库。 资源全名:kodexa-2.0.59-py3-none-any.whl
1. 运行Apache安装程序apache_2.0.59-win32-x86-no_ssl.msi。 2. 按照向导进行安装,包括接受许可协议,设置服务器信息(如NetworkDomain、Server Name、管理员邮箱),选择安装类型(典型或自定义)以及安装目录。 ...
1. **安装前准备**:下载 `apache_2.0.59-win32-x86-no_ssl.msi` 文件并运行安装程序。 2. **用户协议**:同意用户协议。 3. **基本配置**: - 主机名称设置为 `localhost`。 - 输入管理员的电子邮件地址。 - ...
本文将详细介绍如何在Windows环境下配置Apache2.0.59与Subversion(SVN)进行集成,实现一个简单但功能完整的版本控制系统。 ##### 环境准备 1. **操作系统**: Windows XP SP2。 2. **软件需求**: - Apache Server ...
本文将详细介绍如何在Linux系统上安装和配置这四个组件。 首先,我们来看MySQL的安装与配置: 1. **安装MySQL**: - 解压缩下载的MySQL源码包,例如`Mysql-5.0.21.tar.gz`,将其移动到/home目录并解压。 - 使用`...
Java 使用 Apache+Resin 实现负载均衡设置 Java 使用 Apache+Resin 实现负载均衡设置是一种常见的解决方案,旨在提高系统的可用性和可扩展性。下面是该方案的详细说明: 一、为什么需要负载均衡? 在实际应用中,...
- **跨平台性**:Apache可以在多种操作系统上运行,包括Windows、Linux等,而IIS主要针对Windows系统。 - **开源免费**:Apache是开源项目,意味着它可以免费使用并且有一个庞大的开发者社区支持。 - **灵活性**:...
以下将详细介绍如何在Linux上安装配置MySQL、Apache和PHP。 ### 一、安装MySQL 1. **下载与解压**: 首先,下载MySQL的源码包,例如`Mysql-5.0.21.tar.gz`,然后将其移动到`/home`目录并解压。 ``` cp Mysql-...
本文将详细阐述如何在Linux系统上安装和配置这四个组件。 首先,我们来看MySQL的安装。MySQL是一款流行的开源关系型数据库管理系统,它的安装步骤如下: 1. 将下载的MySQL源代码包(如Mysql-5.0.21.tar.gz)复制到...