﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-放在手边-文章分类-original articles</title><link>http://www.blogjava.net/lan4020/category/40347.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Jul 2009 16:05:12 GMT</lastBuildDate><pubDate>Thu, 23 Jul 2009 16:05:12 GMT</pubDate><ttl>60</ttl><item><title>基于Apache Http Server的Subversion的配置.doc</title><link>http://www.blogjava.net/lan4020/articles/287364.html</link><dc:creator>兰兰</dc:creator><author>兰兰</author><pubDate>Sun, 19 Jul 2009 11:56:00 GMT</pubDate><guid>http://www.blogjava.net/lan4020/articles/287364.html</guid><wfw:comment>http://www.blogjava.net/lan4020/comments/287364.html</wfw:comment><comments>http://www.blogjava.net/lan4020/articles/287364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lan4020/comments/commentRss/287364.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lan4020/services/trackbacks/287364.html</trackback:ping><description><![CDATA[&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在正式安装配置Subversion之前我们先来作点准备工作，由于我们以后会经常在命令行下执行命令，每次打开一个新的命令行窗口默认的当前目录都是C:"Documents and Settings"$UserName，这样在执行命令之前都要切换目录，很麻烦，所以我们先来解决这个问题。在&#8220;开始&#8221;－&#8220;运行&#8221;中输入&#8220;regedit&#8221;，打开注册表。找到"HKEY_CLASSES_ROOT"Folder"shell，如果没有shell，可以在Folder下新建一个名为shell的键，在shell下新建一个名为&#8220;命令行(Command Windows)&#8221;的键，在这个键之下再建一个新的名为&#8220;Command&#8221;的键，设置默认值为&#8220;cmd /K cd /d %L&#8221;。这样当我们选中一个目录，在右键上下文菜单里面就多了一个&#8220;命令行(Command Windows)&#8221;的选项，单击这个选项就可以打开一个命令行窗口并且快速切换到当前选中的目录。<br />
<br />
一、软件下载</span>：<br />
apache: <a href="http://www.apache.org/">http://www.apache.org/</a> 下载最新的httpserver（apache2.2.x）<br />
subversion: <a href="http://subversion.tigris.org/">http://subversion.tigris.org/</a> （svn-win32-1.6.3.zip）<br />
Windows常用客户端TortoiseSVN：<a href="http://tortoisesvn.net/downloads">http://tortoisesvn.net/downloads(TortoiseSVN-1.6.3</a>)<br />
<br />
二、软件安装<br />
全部默认安装即可。<br />
解决80端口的问题：修改apache_http_server2.2安装目录下conf目录下的httpd.conf文件，将listen 80 改成listen 81（或其他）。<br />
用浏览器访问：<a href="http://localhost:81">http://localhost:81</a>，显示It Works。<br />
<br />
三、subversion配置<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subversion有两种运行方式，一种是基于Apache Http Server，另外一种是Subversion Standalone Server。Apache Http Server是基于Apache Http Server的Subversion，这样做几个好处：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A.能使用WebDAV协议。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B.通过Apache以HTTP方式穿透防火墙，便于在互联网环境使用，能使用浏览器作为客户端工具浏览源码仓库。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C.可以很容易的支持到SSPI（Windows域认证）和LDAP（AD？），这些都是Apache本身就支持的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.能得到比较完善的Apache安全认证系统，比如SSL加密连接。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一步，打开Apache安装目录下的httpd.conf文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 找到下面的语句：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #LoadModule dav_module modules/mod_dav.so<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #LoadModule dav_fs_module modules/mod_dav_fs.so<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将上面语句前面的#去掉（注：可能已经被注释掉了）<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;第二步，在这句后面追加，如下语句：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; LoadModule dav_svn_module "{svn安装目录}/bin/mod_dav_svn.so"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;LoadModule authz_svn_module "{svn安装目录}/bin/mod_authz_svn.so"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注：{svn安装目录}就是svn-win32-1.6.3.zip解压后你放的目录（注：可能安装SVN时已经替你加上了）<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第三步，在这个文件的最后，追加如下语句：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Location /svn&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DAV svn<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;SVNParentPath d:/mysvnroot （这是svn父目录，创建的svn repository一定要在改目录下，且斜杠不能写反了！）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Location&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 第四步，配置环境变量，以便在命令行下使用apache和svn命令<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将apache安装目录的bin路径和subversion安装目录下的bin路径加到path环境变量中。如：;{apache安装目录}/bin ;{svn安装目录}/bin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第五步，创建仓库<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据apache的配置文件的设置建立目录:d:/mysvnroot，然后用svnadmin create d:/mysvnroot/test命令创建仓库，命令执行成功之后,会在d:/mysvnroot/test下面生成很多的文件和目录。(也可以新建一个文件夹，右击tortoiseSVN&gt;create repository here...)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第六步，运行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重新启动Apache Server<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在浏览器中输入网址:http://localhost/svn/test/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这时候,看到页面显示：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Revision 0: /<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Powered by Subversion version 1.6.3 (r19776).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装成功，接下来将进行权限设置。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第七步，svn使用apache的权限管理对档案库及目录进行读写管理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改上面第三步的内容为：</p>
<fieldset>&lt;Location /svn&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp; DAV svn<br />
&nbsp;&nbsp;&nbsp; #SVNListParentPath on<br />
&nbsp;&nbsp;&nbsp; SVNParentPath d:/mysvnroot<br />
&nbsp;&nbsp;&nbsp; ### apache auth begin<br />
&nbsp;&nbsp;&nbsp; # how to authenticate a user<br />
&nbsp;&nbsp;&nbsp; AuthType Basic<br />
&nbsp;&nbsp;&nbsp; AuthName "Subversion repository"<br />
&nbsp;&nbsp;&nbsp; AuthUserFile d:/mysvnroot/passwd&nbsp;<br />
&nbsp;&nbsp;&nbsp; Require valid-user<br />
&nbsp;&nbsp;&nbsp; ### apache auth end<br />
&nbsp;&nbsp;&nbsp; ### svn auth begin<br />
&nbsp;&nbsp;&nbsp; # our access control policy<br />
&nbsp;&nbsp;&nbsp; AuthzSVNAccessFile d:/mysvnroot/authz&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; # authentication if necessary<br />
&nbsp;&nbsp;&nbsp; #Satisfy Any<br />
&nbsp;&nbsp;&nbsp; ### svn auth end<br />
&lt;/Location&gt;</fieldset>
<p>（passwd保存用户名和密码，这个文件需要用Apache的htpasswd工具创建,authz保存用户访问的权限策略）<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第八步，用htpasswd工具创建passwd 文件，建立保存用户名和密码的文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htpasswd -cm&nbsp;&nbsp;d:/mysvnroot/passwd&nbsp;&nbsp;zx<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zx为用户名，-c 表示创建文件，-m表示对密码用md5加密<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后，会提示输入两次密码，以后再加用户就不需要用-c了，直接用-m即可。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htpasswd -m d:/mysvnroot/ apache_authz yh<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后，会提示输入两次密码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除用户：输入htpasswd -D&nbsp;passwd&nbsp;zx 回车<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面建立控制用户访问权限的文件authz<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在d:/mysvnroot中新建一个记事本文件，文件名为authz，无后缀，输入下面的内容：&nbsp;</p>
<fieldset><legend></legend>
<p>[groups]<br />
admin = zx<br />
test-developers = yh<br />
everyone = @test-developers<br />
[test:/]&nbsp;&nbsp;<br />
@admin=rw&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; //这表示，仓库test的根目录下的访问权限<br />
@test-developers = r<br />
[test:/test]&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; //test仓库下test目录的访问权限<br />
@admin = rw<br />
@test-developers = rw&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// 如果在前面加上@符号，则表示这是个群组权限设置<br />
表示读权限 w表示写权限</p>
</fieldset>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (注意：贴代码时别把//注释贴了)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第九步，配置完成，重新启动Apache server<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在浏览器地址栏中再次输入：<a href="http://localhost/svn/test/">http://localhost/svn/test/</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这次要输入密码才能进入。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第十步，将一个项目文件夹导入到svn中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 右击要导入的文件夹，tortoiseSVN&gt;import...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 键入地址：<a href="http://localhost/svn/test/">http://localhost/svn/test/</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果设置了密码，则会要求输入用户名和密码<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第十一步，从svn中将项目checkout<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任意右击 SVN checkout...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 键入地址 <a href="http://localhost/svn/test/">http://localhost/svn/test/</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择目的地址即可<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第十二步，解决冲突<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当多个人同时提交一个文件的修改时，可能产生冲突。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 冲突时，会生成三个临时文件，同时冲突的文件有感叹号标识。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三个文件分别是：.mine(我的文件） .r版本号-1（前一个版本） .r版本号（当前最新版本）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 右击冲突文件; tortoiseSVN&gt;Edit conflicts...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改后再提交即可。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：基于基于Apache Http Server的Subversion的用户账号管理不同于subversion作为服务器的配置方法，基于apache的用户密码是加密的，应在命令行下创建。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参考网址：<a href="http://bbs.jcwcn.com/viewthread.php?tid=239629">http://bbs.jcwcn.com/viewthread.php?tid=239629</a> </p>
<img src ="http://www.blogjava.net/lan4020/aggbug/287364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lan4020/" target="_blank">兰兰</a> 2009-07-19 19:56 <a href="http://www.blogjava.net/lan4020/articles/287364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>subversion配置及权限管理</title><link>http://www.blogjava.net/lan4020/articles/287136.html</link><dc:creator>兰兰</dc:creator><author>兰兰</author><pubDate>Fri, 17 Jul 2009 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/lan4020/articles/287136.html</guid><wfw:comment>http://www.blogjava.net/lan4020/comments/287136.html</wfw:comment><comments>http://www.blogjava.net/lan4020/articles/287136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lan4020/comments/commentRss/287136.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lan4020/services/trackbacks/287136.html</trackback:ping><description><![CDATA[<p><strong>1、工具准备及安装：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)Subversion下载地址：<a href="http://subversion.tigris.org/">http://subversion.tigris.org</a> 其中setup-Subversion-1.6.31.msi为安装版本，svn-win32-1.6.3为绿色免安装版本。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows常用客户端TortoiseSVN下载地址：<a href="http://tortoisesvn.net/downloads">http://tortoisesvn.net/downloads</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)安装subversion和tortoiseSVN<br />
默认安装即可。<br />
<br />
<strong>2、安装svnservice</strong><br />
　&nbsp;&nbsp;&nbsp; 以前的svnserve要想成为windows服务，必须依赖于svnservice或其他工具。从Subversion1.4开始，Subversion本身就集成Windows服务的工具。<br />
　&nbsp;&nbsp;&nbsp; 在Windows NT中（包括Windows XP, Windows 2000, Windows 2003 Server）本身包含了一个安装服务的工具，叫做"Service Control"，也就是sc.exe。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如我的Subversion安装在"D:"Subversion"，版本库（资源文件存放的总目录）在"D:"svnroot"，而我希望对应的Subversion服务名为svnservice，安装这个svn服务的命令就可以这样写：</p>
<fieldset>sc create svnservice binpath= "D:"Subversion"bin"svnserve.exe --service -r D:"svnroot" displayname= "SVNService" depend= Tcpip</fieldset>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在命令行窗口执行完这个命令之后，服务还没有启动，你可以继续运行"net start svnservice"启动这个服务，然后使用"net stop svnservice"停止服务。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：另外还有两点需要小心处理。首先，如果路径中包括空格，一定要用&#8220;"&#8221;处理&#8220;"&#8221;号，例如上面的例子中如果svnserve.exe在&#8220;c:"program files"subversion"&#8221;中，则命令应该写为&#8220;binpath= """c:"program files"subversion"bin"svnserve.exe""&#8221;（&#8220;&#8221;中的内容），整个命令如下：</p>
<fieldset>sc create svnservice binpath= """D:"program files"Subversion"bin"svnserve.exe"" --service -r D:"svnroot" displayname= "SVNService" depend= Tcpip <br />
</fieldset>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其次，sc对选项的格式还有要求，例如&#8220;depend= Tcpip&#8221;不能写为&#8220;depend = Tcpip&#8221;或&#8220;depend=Tcpip&#8221;，也就是&#8220;=&#8221;前不能有空各，而后面必须有空格。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果服务安装的有问题，你可能需要删除服务。要删除前面添加的服务，只需要运行"net start svnservice"，"svnservice"就是我们创建服务时使用的名字。<br />
<br />
<strong>3、创建资源库</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法一：多资源库：打开命令提示符，输入svnadmin create D:"svnroot " project1，回车；输入svnadmin create D:"svnroot " project2，回车...<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法二：安装好tortoiseSVN后，可以选中资源文件夹，如project1，右键，选择tortoiseSVN---create repository here即可。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 资源库目录如下：<br />
<br />
D:"SVNROOT<br />
├─project1<br />
│ ├─conf<br />
│ ├─dav<br />
│ ├─db<br />
│ │ ├─revprops<br />
│ │ ├─revs<br />
│ │ └─transactions<br />
│ ├─hooks<br />
│ └─locks<br />
└─project2<br />
├─conf<br />
├─dav<br />
├─db<br />
│ ├─revprops<br />
│ ├─revs<br />
│ └─transactions<br />
├─hooks<br />
└─locks<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>导入资源</strong>(可选操作)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如将F:"resources下资源导入到project1中，在resources目录上右键，选择tortoiseSVN&gt;import，之后选择D:"SVNROOT即可。<br />
<br />
<strong>4、Subversion的权限控制</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D:"SVNROOT下有两个目录project1和project2，都已经创建了版本库，所以我们修改每个conf目录下的svnserve.conf，使之指向同一个password-db和authz-db文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password-db = ..".."passwd<br />
　&nbsp;&nbsp;&nbsp; authz-db = ..".."authz<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样，D:"SVNROOT"passwd和D:"SVNROOT"authz就控制了所有版本库的svnserve访问。将任一个conf目录下的passwd和authz文件拷贝到SVNROOT目录下。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外在后面的操作中要关闭匿名访问，应该去掉&#8220;anon-access = none&#8221;前的&#8220;#&#8221;号，保证只有认证用户可以访问。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：还有一点需要注意，那就是svnserve的&#8220;realm&#8221;的值，在上面的设置下，应该保证所有的版本库使用相同的realm值，这样，对版本库的密码缓存可以在多个版本库之间共享，更多细节见客户端凭证缓存。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置用户和组说明：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 假设project2目录下仍有目录111和222目录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root：配置管理管理员，对版本库有完全的管理权限<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; project1_a:对project1有完全权限<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; project1_b:同上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; project1_c:同上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; project2_a:对project2有完全权限<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; project2_b:对project2文件夹下的111目录只有读权限，对222目录没有权限<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改D:"SVNROOT"passwd文件<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前面已经说过了，用户和密码文件应该是在D:"SVNROOT"passwd，所以我们为每一位用户设置权限，文件内容如下：<br />
</p>
<fieldset>[users]<br />
project1_a = project1_a<br />
project1_b = project1_b<br />
project1_c = project1_c<br />
project2_a = project2_a<br />
project2_b = project2_b</fieldset>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 即为每一个用户设置用户名和密码，左侧为用户名，右侧为密码（为方便，密码同用户名）。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>配置授权<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>修改D:"SVNROOT"authz<br />
[groups]<br />
# 定义组信息,左侧为组名，右侧为改组成员的用户名<br />
group_project1 = project1_a, project1_b, project1_c<br />
group_ project2_a = project2_a<br />
group_ project2_b = project2_b<br />
[/]<br />
<br />
# 指定所有的版本库默认只读，root可读写<br />
* = r<br />
root = rw<br />
[project1:/]<br />
# 指定对版本库project1根目录的权限<br />
@ group_project1 = rw<br />
[project2:/]<br />
# 指定对版本库project2根目录的权限<br />
@ group_ project2_a = rw<br />
[project2:/111]<br />
# 指定对版本库project1的/111根目录的权限<br />
@ group_ project2_b = r<br />
[project2:/222]<br />
# 指定对版本库project1的/222根目录的权限<br />
@ group_ project2_b =<br />
<br />
<br />
（注：当没有权限时，该用户将看不到次目录）<br />
<br />
<strong>5、使用tortoiseSVN客户端工具访问</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在某一个目录下右键SVN Checkout即可,路径为svn://127.0.0.1/ project1,确定后输入用户名和密码<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参考网址：http://www.uml.org.cn/pzgl/200611151.htm<br />
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/lan4020/aggbug/287136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lan4020/" target="_blank">兰兰</a> 2009-07-17 13:31 <a href="http://www.blogjava.net/lan4020/articles/287136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>url路径重写</title><link>http://www.blogjava.net/lan4020/articles/283035.html</link><dc:creator>兰兰</dc:creator><author>兰兰</author><pubDate>Thu, 18 Jun 2009 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/lan4020/articles/283035.html</guid><wfw:comment>http://www.blogjava.net/lan4020/comments/283035.html</wfw:comment><comments>http://www.blogjava.net/lan4020/articles/283035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lan4020/comments/commentRss/283035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lan4020/services/trackbacks/283035.html</trackback:ping><description><![CDATA[在web.xml里的&lt;web-app&gt;&lt;/web-app&gt;标签中加入如下代码：<br />
<fieldset>&lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;logLevel&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;WARN&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;</fieldset><br />
<br />
另写一个urlrewrite.xml文件，内容如下：<br />
<fieldset>
<p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://tuckey.org/res/dtds/urlrewrite2.6.dtd"&gt;</p>
<p>&lt;!--</p>
<p>&nbsp;&nbsp;&nbsp; Configuration file for UrlRewriteFilter<br />
&nbsp;&nbsp;&nbsp; http://tuckey.org/urlrewrite/</p>
<p>--&gt;<br />
&lt;urlrewrite&gt;</p>
<p>&nbsp;&lt;rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;note&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/note&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;^/myjsp/([0-9]+).html&lt;/from&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to&gt;/MyJsp.jsp?id=$1&lt;/to&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/rule&gt;</p>
<p>&nbsp; &lt;!--&nbsp; &lt;outbound-rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;note&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the url /rewrite-status will be rewritten to /test/status/.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The above rule and this outbound-rule means that end users should never see the<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in your pages.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/note&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;/rewrite-status&lt;/from&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to&gt;/test/status/&lt;/to&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/outbound-rule&gt;<br />
--&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--</p>
<p>&nbsp;&nbsp;&nbsp; INSTALLATION</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in your web.xml add...</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;logLevel&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;WARN&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;i<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; EXAMPLES</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Redirect one urllink<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;/some/old/page.html&lt;/from&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to type=" href_cetemp&gt;link<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;/some/old/page.html&lt;/from&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to type=" href_cetemp&gt;link<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;/some/old/page.html&lt;/from&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to type="redirect"&gt;/very/new/page.html&lt;/to&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/rule&gt;</p>
<p>&nbsp;&nbsp;&nbsp; Redirect a directory<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;/some/olddir/(.*)&lt;/from&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to type="redirect"&gt;/very/newdir/$1&lt;/to&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/rule&gt;</p>
<p>&nbsp;&nbsp;&nbsp; Clean a url<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;/products/([0-9]+)&lt;/from&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to&gt;/products/index.jsp?product_id=$1&lt;/to&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/rule&gt;<br />
&nbsp;&nbsp;&nbsp; eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing.</p>
<p>&nbsp;&nbsp;&nbsp; Browser detection<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rule&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;condition name="user-agent"&gt;Mozilla/[1-4]&lt;/condition&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;/some/page.html&lt;/from&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to&gt;/some/page-for-old-browsers.html&lt;/to&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/rule&gt;<br />
&nbsp;&nbsp;&nbsp; eg, will pass the request for /some/page.html on to /some/page-for-old-browsers.html only for older<br />
&nbsp;&nbsp;&nbsp; browsers whose user agent srtings match Mozilla/1, Mozilla/2, Mozilla/3 or Mozilla/4.</p>
<p>&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&lt;/urlrewrite&gt;</p>
</fieldset><br />
最后加入urlrewrite-2.6.0 的jar包。 
  <img src ="http://www.blogjava.net/lan4020/aggbug/283035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lan4020/" target="_blank">兰兰</a> 2009-06-18 13:35 <a href="http://www.blogjava.net/lan4020/articles/283035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>