Win7 64位搭建本地SVN服务器 Apache+Subversion_tortoisesvn(64bit)服务端 win7-程序员宅基地

技术标签: 综合  apache  subversion  服务器  svn  tortoisesvn  

Subversion是一个自由/开源版本控制系统,它管理文件和目录可以超越时间。一组文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种“时间机器”。

 

一、工具下载

  • 01.SVN 服务器SubversionSetup-Subversion-1.6.17.msi
  • 02.SVN 客户端TortoiseSVN本文选用版本为(64位)TortoiseSVN-1.6.16.21511-x64-svn-1.6.17.msi
  • 03.TortoiseSVN中文语言包本文选用版本为LanguagePack_1.6.16.21511-x64-zh_CN.msi
  • 04.XAMPP(Apache+MySQL+PHP集成安装包):XAMPP版本为1.7.4

Subversion的版本和TortoiseSVN的版本配合很重要,并不是什么版本之间都可以正常使用的。

二.安装XAMPP:

一路NEXT。本文安装至C:\xampp

三.安装subversion:

一路NEXT。本文将subversion安装至C:\Subversion\

如果本机安装有360安全卫士,则会出现警告,选择允许。

四、配置Apache

01、进入Sibversion的安装目录(本文为C:\Subversion\)。

为了使 Subversion 与 dav 模块通信,需要安装 mod_dav_svn 插件,可以在 Subversion 的安装目录C:\Subversion\bin中找到。将其拷贝到 Apache 安装目录的 modules 文件夹下。接下来就是配置 Apache 的 httpd.conf 文件,让 Apache 在启动的时候加载上述模块。

02、编辑Apache的httpd.conf(C:\xampp\apache\conf)

找到以下内容:

#LoadModule dav_module modules/mod_dav.so

修改为:

LoadModule dav_module modules/mod_dav.so

即去掉前面的注释符号“#”,没有上面这句,请自行添加。完成之后再后面继续添加如下内容:

LoadModule dav_svn_module modules/mod_dav_svn.so

03、设置版本库目录:

本例中我在G盘创建了svn的管理目录,打算将版本库存放在G:\svn\project文件夹下,将如下代码添加进httpd.conf末尾。(复制代码时,注意修改”符号为英文半角)

<Location /svn/>
DAV svn
SVNListParentPath on
SVNParentPath “G:/svn/project”
</Location>

重启Apache,至此本地环境完成。

说明:

  • <Location /svn/>:版本库的url是http://localhost/svn/
  • DAV svn:告诉Apache是哪个模块响应http://localhost/svn/的请求,此刻是Subversion模块。
  • SVNParentPath “G:/svn/project” :告诉Subversion需查看的版本库位于G:/svn/project下,同时project下的每个子目录都是一个版本库。例如在G:/svn/project下有多个版本库 repos1,repos2 等等,可以通过 http://localhost/repos1,http://localhost/repos2 来访问。

04、通过Http访问SVN服务器

Subversion有两种运行方式,一种是基于Apache Http Server,另外一种是Subversion Standalone Server。

Apache Http Server是基于Apache Http Server的Subversion,这样做几个好处:

  • A.能使用WebDAV协议。
  • B.通过Apache以HTTP方式穿透防火墙,便于在互联网环境使用,能使用浏览器作为客户端工具浏览源码仓库。
  • C.可以很容易的支持到SSPI(Windows域认证)和LDAP(AD?),这些都是Apache本身就支持的。
  • D.能得到比较完善的Apache安全认证系统,比如SSL加密连接。

通过浏览器输入http://127.0.0.1/svn/访问版本库(一个初始版本库见下图):

  1. 如 果你按照上文的一步步操作,那么,目前已经可以实现通过浏览器直接访问http://127.0.0.1/svn/ 需要注意的是Location 设置中最后要加上/,应该是<Location /svn/>而不是<Location /svn>
  2. 如果想让“http://localhost/svn”也起作用的话,需要在</Location>的后面增加重定向的设置:RedirectMatch ^(/svn)$ $1/


一个初始版本库

这表示 Apache 的 dav_svn 模块已经可以正常工作了。用户可以使用任何一种 Subversion 的客户端通过 Http 协议访问你的版本库。

现在你的版本库任何人都可以访问,并且有完全的写操作权限。也就是说任何人都可以匿名读取,修改,提交,以及删除版本库中的内容。

五、安装TortoiseSVN:

先安装TortoiseSVN-1.6.16.21511-x64-svn-1.6.17.msi再安装中文语言包LanguagePack_1.6.16.21511-x64-zh_CN.msi

本文所用软件及其版本

注意:如果你的系统安装有卡巴斯基这类杀毒软件,请务必将TortoiseSVN安装目录bin目录下的TortoiseProc.exe设置为信任程序,否则可能导致在使用TortoiseSVN“导入”至版本库功能时发生错误。如图:

卡巴斯基

六、测试SVN

  • 假设在你的D盘有一个项目workspace文件,那么我们在G:\svn\project下创建一个同名文件夹:G:\svn\project\workspace
  • 右键点击G:\svn\project\workspace文件,TortoiseSVN->在此创建版本库(Y)(英文版为Tortoise->Create repository here)
  • 然后你就会看到G:\svn\project\workspace 里面多了conf, db, hooks, lock…等文件,版本库创建成功。
  • 返回D盘的workspace,右键点击该文件夹,执行TortoiseSVN->导入(I)(英文版为Tortoise->Import)
  • 在弹出的对话框中,版本库URL内输入: http://localhost/svn/workspace/trunk/。这里的http://localhost/svn/就相当于G:\svn\project\。
  • 然后把D盘里面的workspace删除,我们好测试是否成功了。
  • 在任何空白文件夹里面,右键点击SVN检出(K)(英文版为SVN Checkout),版本库URL输出http://localhost/svn/workspace/trunk/,将得到workspace的项目源文件。

关于上文提到的trunk:

我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在…(详细介绍

—————————————— END  ————————————————

关于SVN访问权限控制的介绍:

通过上文的相关操作,任何人都可以匿名读取,修改,提交,以及删除版本库中的内容。显然大部分场合这是不符合需求的。那么如何进行权限设置呢,Apache 提供了基本的权限设置:

配置SVN访问权限

一.权限设置

首先需要创建一个用户文件。Apache 提供了一个工具 htpasswd,用于生成用户文件,可以在 Apache 的安装目录下找到。具体使用方法如下:

01.创建passwd文件并添加用户/密码:

svn的访问权限将由passwd文件中的用户名/密码来限制。

运行->cmd进入DOS命令操作窗口,并切换当前目录到C:\xampp\apache\bin,输入如下命令:

htpasswd -c G:\svn\project\conf\passwd username

passwd是文件名,username是你的用户名,根据实际需要自行命名,我们将文件创建到G:\svn\project\conf\目录下(相关目录请自行创建)。–c表示创建,第二次就不需要写–c了。(win平台默认对密码MD5加密)

具体操作如下图:

创建passwd文件并添加用户/密码

关于htpasswd命令更多其他操作请借助Google。

接下来修改 httpd.conf,在 Location 标签中加入如下内容:

AuthType Basic
AuthName “svn repos”
AuthUserFile “G:/svn/project/conf/passwd”
Require valid-user

操作完成之后,重启Apache。 打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了,现在只有 passwd 文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 “Require valid-user” 为 “Require user tony robert” 将只有 tony 和 robert 可以访问该版本库。

说明:

  • AuthType Basic:激活基本认证,用户名/密码。
  • AuthName “Subversion Repositories” :弹出输入认证信息框的说明,支持中文。
  • AuthUserFile “G:/svn/project/conf/passwd” :指定用来存储认证用户名和密码的文件。
  • require valid-user :指定只有输入正确用户名/密码的用户才可以正常访问http://localhost/svn/ 。

有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit 和 LimitExcept 标签。例如可以继续在 Location 标签中添加如下内容:

<LimitExcept GET PROPFIND OPTIONS REPORT>
require valid-user
</LimitExcept>

如上配置将使匿名用户有读取权限,而限制只有 passwordfile 中配置的用户可以使用写操作。如果这还不能满足你的要求,可以使用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。

02. 建立控制用户访问权限的文件authz

首先需要让 Apache 将 mod_authz_svn 模块加载进来。在 Subversion 的安装目录中找到 mod_auth_svn 模块,将其拷贝到 Apache 安装目录的 modules 子目录下。

然后修改 httpd.conf 文件,找到

LoadModule dav_svn_module modules/mod_dav_svn.so

在其后面加上

LoadModule authz_svn_module modules/mod_authz_svn.so

现在可以在 Location 标签中使用 authz 的功能了。一个基本的 authz 配置如下:

<Location /svn/>
DAV svn
SVNListParentPath on
SVNParentPath “G:/svn/project/”
AuthType Basic
AuthName “Subversion Repositories”
AuthUserFile “G:/svn/project/conf/passwd”
AuthzSVNAccessFile “G:/svn/project/conf/authz”
Satisfy Any
Require valid-user
</Location>

说明:AuthzSVNAccessFile “G:/svn/project/conf/authz” :指定用来存储访问版本库控制权限的文件。

这里的Apache配置文件中,不需要加入<Limit>或<LimitExcept>标签。但加入了Satisfy Any的设置,其表示在同时启用了Allow(允许)和Require的情况下,指定相关策略的,一共有两个备选值,All表示用户必须同时满足Allow和Require的条件,而Any则是满足其中之一即可。

这这里,Satisfy Any用于允许先用匿名方式尝试访问,并根据authz对匿名用户的控制给予访问权限。若没有这句话,则无论authz中是否加入了“*=r”的写法,匿名用户都是无法访问的。

AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定,如:

#两个分组:admin组,developers组
[groups]
admin = FUCKGFW  //管理员
developers = jimmy,michel,spark,sean,steven,tony,robert //开发者
#在根目录下指定所有的用户有读权限
[/]
* = r
#追加 committers 组用户有读写权限
@committers = rw
#在 branches/dev 目录下指定 developers 组的用户有读写权限
[/branches/dev]
@developers = rw
#在 /tags 组下给予用户 tony 读写权限
[/tags]
tony = rw
#禁止所有用户访问 /private 目录
[/private]
* =
#给 committers 组用户读权限
@committers= r

在 G:/svn/project/中新建一个记事本文件,文件名为authz,无后缀,输入下面的内容:

[groups]
admin = FUCKGFW
[/]
* = r
@admin = rw

本范例只指定了一个管理员组,和一个管理员用户。

操作完成之后,重启Apache。
以上文章都是转来的,不过有一处不对的地方须在这里指出来,在上文中设置developers的时候,原文是 developers = jimmy michel spark sean steven tony robert ,现改成developers = jimmy,michel,spark,sean,steven,tony,robert 。如果发现其他的问题可以指出来,博主进行修正和完善。

本文固定链接: http://www.xplabs.me/xp/?p=109

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/proglovercn/article/details/7454924

智能推荐

hdu 1229 还是A+B(水)-程序员宅基地

文章浏览阅读122次。还是A+BTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24568Accepted Submission(s): 11729Problem Description读入两个小于10000的正整数A和B,计算A+B。...

http客户端Feign——日志配置_feign 日志设置-程序员宅基地

文章浏览阅读419次。HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息。FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。BASIC:仅记录请求的方法,URL以及响应状态码和执行时间。NONE:不记录任何日志信息,这是默认值。配置Feign日志有两种方式;方式二:java代码实现。注解中声明则代表某服务。方式一:配置文件方式。_feign 日志设置

[转载]将容器管理的持久性 Bean 用于面向服务的体系结构-程序员宅基地

文章浏览阅读155次。将容器管理的持久性 Bean 用于面向服务的体系结构本文将介绍如何使用 IBM WebSphere Process Server 对容器管理的持久性 (CMP) Bean的连接和持久性逻辑加以控制,使其可以存储在非关系数据库..._javax.ejb.objectnotfoundexception: no such entity!

基础java练习题(递归)_java 递归例题-程序员宅基地

文章浏览阅读1.5k次。基础java练习题一、递归实现跳台阶从第一级跳到第n级,有多少种跳法一次可跳一级,也可跳两级。还能跳三级import java.math.BigDecimal;import java.util.Scanner;public class Main{ public static void main(String[]args){ Scanner reader=new Scanner(System.in); while(reader.hasNext()){ _java 递归例题

面向对象程序设计(荣誉)实验一 String_对存储在string数组内的所有以字符‘a’开始并以字符‘e’结尾的单词做加密处理。-程序员宅基地

文章浏览阅读1.5k次,点赞6次,收藏6次。目录1.串应用- 计算一个串的最长的真前后缀题目描述输入输出样例输入样例输出题解2.字符串替换(string)题目描述输入输出样例输入样例输出题解3.可重叠子串 (Ver. I)题目描述输入输出样例输入样例输出题解4.字符串操作(string)题目描述输入输出样例输入样例输出题解1.串应用- 计算一个串的最长的真前后缀题目描述给定一个串,如ABCDAB,则ABCDAB的真前缀有:{ A, AB,ABC, ABCD, ABCDA }ABCDAB的真后缀有:{ B, AB,DAB, CDAB, BCDAB_对存储在string数组内的所有以字符‘a’开始并以字符‘e’结尾的单词做加密处理。

算法设计与问题求解/西安交通大学本科课程MOOC/C_算法设计与问题求解西安交通大学-程序员宅基地

文章浏览阅读68次。西安交通大学/算法设计与问题求解/树与二叉树/MOOC_算法设计与问题求解西安交通大学

随便推点

[Vue warn]: Computed property “totalPrice“ was assigned to but it has no setter._computed property "totalprice" was assigned to but-程序员宅基地

文章浏览阅读1.6k次。问题:在Vue项目中出现如下错误提示:[Vue warn]: Computed property "totalPrice" was assigned to but it has no setter. (found in <Anonymous>)代码:<input v-model="totalPrice"/>原因:v-model命令,因Vue 的双向数据绑定原理 , 会自动操作 totalPrice, 对其进行set 操作而 totalPrice 作为计..._computed property "totalprice" was assigned to but it has no setter.

basic1003-我要通过!13行搞定:也许是全网最奇葩解法_basic 1003 case 1-程序员宅基地

文章浏览阅读60次。十分暴力而简洁的解决方式:读取P和T的位置并自动生成唯一正确答案,将题给测点与之对比,不一样就给我爬!_basic 1003 case 1

服务器浏览war文件,详解将Web项目War包部署到Tomcat服务器基本步骤-程序员宅基地

文章浏览阅读422次。原标题:详解将Web项目War包部署到Tomcat服务器基本步骤详解将Web项目War包部署到Tomcat服务器基本步骤1 War包War包一般是在进行Web开发时,通常是一个网站Project下的所有源码的集合,里面包含前台HTML/CSS/JS的代码,也包含Java的代码。当开发人员在自己的开发机器上调试所有代码并通过后,为了交给测试人员测试和未来进行产品发布,都需要将开发人员的源码打包成Wa..._/opt/bosssoft/war/medical-web.war/web-inf/web.xml of module medical-web.war.

python组成三位无重复数字_python组合无重复三位数的实例-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏13次。# -*- coding: utf-8 -*-# 简述:这里有四个数字,分别是:1、2、3、4#提问:能组成多少个互不相同且无重复数字的三位数?各是多少?def f(n):list=[]count=0for i in range(1,n+1):for j in range(1, n+1):for k in range(1, n+1):if i!=j and j!=k and i!=k:list.a..._python求从0到9任意组合成三位数数字不能重复并输出

ElementUl中的el-table怎样吧0和1改变为男和女_elementui table 性别-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏2次。<el-table-column prop="studentSex" label="性别" :formatter="sex"></el-table-column>然后就在vue的methods中写方法就OK了methods: { sex(row,index){ if(row.studentSex == 1){ return '男'; }else{ return '女'; }..._elementui table 性别

java文件操作之移动文件到指定的目录_java中怎么将pro.txt移动到design_mode_code根目录下-程序员宅基地

文章浏览阅读1.1k次。java文件操作之移动文件到指定的目录_java中怎么将pro.txt移动到design_mode_code根目录下

推荐文章

热门文章

相关标签