手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Software

Google Sitemap Generator更新

看起来很美的一个东西,生成sitemap的XML文件,这是CB上的某人投稿,第一遍我没看懂它的作用,再看还是没看懂,再看一遍发现有点懂了。但是我没有发现他究竟有什么好处,唯一让我感到的就是它应该会有点耗CPU吧?即使它是一个插件。。。

原文地址:http://www.cnbeta.com/articles/74798.htm

原文内容:新闻来源:http://www.sanliangfan.com/archives/974.html
网站地图对于搜索引擎索引网站是很 有帮助的,网上也有很多这样的软件、工具。比如 WordPress 平台的 Google XML Sitemaps 插件就是这方面的佼佼者,不过今天 Google 发布了他们自己制作的 Google  Sitemap Generator (谷歌网站地图制作工具),帮助站长制作更好的网站地图文件。

关于 Google Sitemap Generator

Google Sitemap Generator 基于开源软件精神制作,完全免费。它能够通过分析网站流量、服务器文件和网站日志发现新的和修改过的网址。

通 过这些方法 Google Sitemap Generator 能够快速地找到这些网址并计算有关数据,从而使您的 Sitemaps 文件尽可能有效。一旦 Google Sitemap Generator 生成器完成网站网址收集任务,就可以为你的网站创建以下的网站地图文件:


1、XML Sitemaps :基于 sitemaps.org 标准的搜索引擎索引文件

2、Mobile Sitemaps :优化后的网站对于手机用户更加友好

3、Code Search Sitemaps :让你网站上的开源代码能够被使用者搜索到


此外 Google Sitemap Generator 还可以发送 Ping 到谷歌博客搜索,恩,这个功能我很是欣赏。虽然 WordPress 后台加一条 Ping 地址也能够完成同样的任务,但是对于其它类型的网站就会增加上谷歌博客搜索的机会。

当然还不止这些,有时候你更改了以前博客文章的链接, Google Sitemap Generator 会帮助你通知谷歌博客搜索修正数据库里的链接,这样就可以减少很多404错误的出现了。

Google Sitemap Generator 的博客 Ping 服务不仅仅只支持自家的博客搜索,同样也支持所有符合标准的其它博客搜索引擎。

使用 Google Sitemap Generator

Google Sitemap Generator 是一个服务器插件,可以同时安装在 Linux 的 Apache 和微软 IIS 服务器。与其他服务器端插件一样,安装的时候需要你拥有管理权限。更多的安装细节可以看这里 Google Sitemap Generator documentation

Tags: google, sitemap, generator, sprider

ZZ:IIS7在Windows Server 2008 R2中的新改进

IIS团队刚刚发表了IIS7在Window Server 2008 R2 beta中的新改进.Windows Server 2008 R2包括对IIS7 Web服务器的增补,对已经是史上最好的IIS平台进行修正、完善、添加。 今天在Windows Server 2008 R2 Beta中IIS7改进的主要亮点:
内容发布扩展(FTP, WebDav)集成进Web服务器OS/集成Administration Pack扩展到Windows Server OS
新的IIS7  PowerShell Provider和Commandlet支持/丰富的Server Core应用程序托管
改进的FastCGI支持/IIS核心更改/IIS Best Practice Analyzer

过去的一年半中,IIS产品团队在IIS7平台上辛勤编写扩展,发布了beta、TC和RTW们来新增对优化媒体托管、Web内容发布、站点和服务器管理、部署和迁移、请求处理的支持。 没有我们在Windows Server 2008上IIS7中引入的架构变更,我们根本无法在12~18个月中进行创新,并构建面向生产环境、完全受支持的微软软件。现在在Windows Server 2008 R2, 我们对这个IIS7平台再做了一些改进、修正和完善。

今天在Windows Server 2008 R2 Beta中IIS7改进的主要亮点:


内容发布扩展(FTP, WebDav)集成进Web服务器OS

继承内容发布扩展 (FTP, WebDav)进Windows Server OS
在Windows Server 2008发布前很久,我们就开始研发完全重写的FTP服务器和我们的WebDav实现。08年早些时候,我们发布了Windows Server 2008 FTP发布服务下载,具有FTPS安全内容发布、IPv6支持、IIS管理器集成管理FTP/HTTP站点、更强大的日志和认证支持的特性。跟我们所有的扩展一样,Windows Server 2008 FTP发布服务受到微软产品支持的完全支持及由专家用户和产品团队提供的论坛支持。我们在Windows Server 2008 R2中已经做到的是将FTP发布服务集成到服务器操作系统。

从客户角度,这意味着:

    1. 当Windows Server 2008上已经安装了FTP发布服务,你必须在安装新FTP服务前移除旧版。在R2中,你可以作为IIS组件的一部分来安装新的FTP服务器,IIS setup会替换升级旧的FTP服务。

    2. 你可以得到FTP发布服务自2008年2月发布后的bug修复。

    3. 你可以使用新增的认证、日志、授权和home目录扩展性,这些在MSDN上会有文档。

我们也会在2009年5月发布一个更新过的Windows Server 2008 FTP发布服务下载,所以这部分客户也能利用这些bug修复和扩展性。或者说:

(2009年5月版FTP下载 + Windows Server 2008) == (Windows Server 2008 R2中的FTP特性)

但有如下例外:

Windows Server 2008 FTP发布服务始终是一个下载安装,而Windows Server 20008 R2和以后会集成FTP。

2008年7月发布的WebDav也是一样。WebDav for Windows Server 2008提 供了HTTP协议WebDAV扩展的全新实现(直至spec)。我们在Windows Server 2008 R2安装中包含了WebDav。WebDav大的新特性是支持locks。我们也会为Windows Server 2008发布一个支持lock的WebDav,同样是2009年5月。同样地:

(2009年5月版WebDav下载 + Windows Server 2008) == (Windows Server 2008 R2中的WebDav特性)

如下例外:

WebDav for Windows Server 2008 始终是一个下载安装,而Windows Server 20008 R2和以后会集成WebDav。

集成Administration Pack扩展到Windows Server OS

我们把IIS7 Administration Pack集成到Windows Server 2008 R2,为客户提供:

  1. 在IIS Manager中集成管理ASP.NET authorization,自定义错误,FastCGI,和and Request Filtering。

  2. 配置管理器,提供管理IIS7配置系统的可视化编辑器。如果你想试用一下,我们的IIS开发经理Carlos Aguilar Mares撰写了comprehensive blog on the Config Editor's capabilities一文。我最爱的配置管理器部分是脚本生成功能——对做演示非常管用:) 

我们并未将IIS Reports特性集成进Windows Server OS,如果你需要这个功能,你可以在IIS Administration Pack下载中得到。同样的,我们也会为Windows Server 2008用户提供更新的IIS Administration Pack,包括Windows Server 2008 R2种所有的修复和变更(除了集成安装)。

Windows Server 2008版的Administration Pack会和Windows Server 2008 R2一起发布,以确保功能和Windows Server 2008 R2一致。

新的IIS7  PowerShell Provider和Commandlet支持

IIS PowerShell provider,同样有Windows Server 2008版下载,允许用户使用PowerShell编程环境管理IIS,ASP.NET和自定义错误配置。是的,传说是真的——我们有为PowerShell用户们提供IIS:/>。我们的PowerShell支持提供了3个等级的支持:

  1. PowerShell provider: 如果你熟悉IIS配置系统,想直接用PS编程环境来管理配置。

  2. Low-level commandlets: 用我们的low-level commandlets集合来管理每个IIS设置,如果你需要这个程度的细粒度控制。

  3. Task-oriented commandlets: 用我们的面向任务commandlets来管理网站(例如:New-WebSite创建一个站点),备份和恢复web服务器配置及其他常见任务。

集成到Windows Server 2008 R2中,你可以使用Windows Server setup来安装PowerShell provider和60+个commandlets。

和FTP、WebDav一样:

(2009年5月版PowerShell下载 + Windows Server 2008) == (Windows Server 2008 R2中的PowerShell特性)

例外是:

PowerShell for Windows Server 2008 始终是一个下载安装,而Windows Server 20008 R2和以后会集成PowerShell 

更多的PowerShell支持信息,可以查看Group Program Manager和PowerShell大牛Thomas Deml的博客(http://blogs.iis.net/thomad)。

丰富的Server Core应用程序托管

Windows Server 2008 R2上,你可以在Server Core的IIS上跑ASP.NET应用。ASP.NET/CLR做了一些重构工作来确保ASP.NET网页的托管代码环境可以在Server Core上运行。哇!我们不仅能在Server Core上支持图片、媒体、PHP、传统ASP网页,也能跑ASP.NET应用。

Windows Server 2008 R2中的PowerShell 2.0版本处理远程管理,对Server Core安装和新的PowerShell provider很便利。你不仅能在Server Core IIS上托管你的所有应用,本地或远程通过新的IIS PowerShell Provider和commandlets来管理它们也更容易了。在Windows PowerShell blog上有PowerShell大法供参考。

改进的FastCGI支持

IIS7通过我们的FastCGI实现来支持PHP托管,我们在Windows Server 2008 R2 IIS7中持续翻新和提高FastCGI。增强的支持包括:

  1. 支持在IIS Manager中管理FastCGI设置。

  2. 当php.ini变化时自动刷新php-cgi.exe。这个版本中,IIS为每个进程池监视一个文件,如果文件被修改就会recycle这个进程池的FastCGI进程。此特性默认关闭,如果你(通过用户界面的一个设置)打开它,你可以指定监视的文件路径。

  3. FastCGI的FREB支持,你可以更有效的排错PHP和其他FastCGI相容应用。

  4. MaxInstance可以是动态——如果maxInstance设置为0,IIS自动监测系统负载并调整maxInstances。这允许我们优化PHP的性能。

  5. 基于特定错误的控制FastCGI错误行为的支持。

IIS核心更改

基于客户反馈和我们自己在IIS7平台开发扩展的体验,我们也对IIS7平台核心做了一些修改:

  1. 支持配置系统的自定义追踪。

  2. 通过配置轮询来审核或追踪配置变更的能力——这是来自托管商们的要求,特别是想要监视客户们更改配置系统。

  3. ASP.NET支持不同的CLR版本(例如,CLR4.0),随着多个CLR版本的使用,这个特性对开发者切换版本很重要。我们也将此功能向后移植到Windows Server 2008 SP2。

  4. Application pools的更好控制,可以为每应用程序池指定CLR设置,可以用新的Application Pool性能计数器监视性能。

  5. 可委派自定义错误,这是来自开发者的最多要求,他们想让非管理员在本地或远程改变自定义错误。

  6. IP restriction list的IPv6支持。

  7. Request filtering的更细粒度控制,特别对query strings来帮助防止SQL注入式攻击。Request filtering现在也支持请求特定的规则,使SQL注入规则仅对特定请求适用。

  8. Nego2支持,将允许内置支持LiveID providers,FedSSP,和更小粒的Kerberos/NTLM使能。

  9. 支持不要求密码的Managed Service Accounts域账号。

  10. AppPool identity支持——这个太复杂了,以后单独帖子会另行讲。

  11. 支持application pool预热,大型应用程序会需要"起动"一个应用程序池,这样最初的请求们会有更好的性能。

IIS Best Practice Analyzer
Windows Server 2008 R2在Server Manager里引入了一个新特性叫做Best Practice Analyzer。 BPA在Server Manager里提供单一控制台体验来管理跨不同服务器角色的配置的最优实践规则,如Exchange、AD和IIS。在Server Manager里,你可以对一些IIS规则运行BPA针对安全和性能的最优实践——例如,检查确认基本验证不会没有加SSL就启用。针对IIS的BPA规 则并不是巨细无遗,但它确实给予一组良好的核心提示作为起步。我们也会通过Server Manager来更新和增加这些规则。注意这个功能在Server Manager中,不在IIS Manager中。


当然,我们也修复了bugs。

你的反馈帮助了我们修炼IIS7,至今最好的Web服务器平台。今天你可以在这里下载Windows Server 2008 R2 beta,这不失为开始2009年的好办法!

译自:IISBlog
原文来自:http://www.cnbeta.com/articles/74751.htm

Tags: iis, windows, server, changelog

CodeGear RAD 2009 Studio CHM 格式帮助文件下载[官方]

 一直以来delphi的手册就是开发人员的最爱,也被认为是最全最强大的。但最近几年,MS在MSDN上的投入是越来越多,也让MSDN成为了最全最强大的在线手册了。

不过,delphi并没有放弃大家,于是:

-------------------------

BlackfishSQL 帮助

Tags: delphi, codegear, manual, chm

Web通信分析工具(ZZ)

身为一名WEB开发人员,对于WEB通信当然是非常关心的,对于每一个POST甚至都有可能要抓包 进行分析,但究竟怎么做,用什么做,如何去做,还是有点讲究的。我个人是习惯用fireBug和webdeveloper还有IE下的httpwatch等进行分析。看到这篇文章的介绍,也可以看看别人是怎么做,取别人的之长补自己之短才能有进步嘛。。

原文链接:http://tech.idv2.com/2008/12/30/web-comm-analyzer/

原文作者:charlee

内容如下:(图片下载到了本地了)

在抓虾上看到一篇Web开发分析工具的文章(链接就免了),怎么远没有我用的东西好用呢? 还是介绍介绍我用的吧。由于平常开发只用FireFox,完成后再去调试IE, 所以这些工具绝大部分是针对FireFox的。

如果把Web通信从上到下分为许多层——XMLHttpRequest层,HTTP层,TCP层, 那么这些工具可以分别抓取每个层的通信数据进行分析,结合使用极其强大。

2008/12/31:另外可以参考daniel同学的Web开发常用工具一文,相信会大有帮助哦。

 

XMLHttpRequest层:Firebug

适用范围 Ajax应用程序
优点 使用方便,数据截取完整
缺点 只能分析XMLHttpRequest请求,其他类型的请求无能为力

Firebug应该是尽人皆知了。 它的控制台能监视XMLHttpRequest请求,能看到完整的请求和应答的数据。 用它来调试Ajax程序是最好不过了。

大小: 11.65 K
尺寸: 500 x 230
浏览: 2224 次
点击打开新窗口浏览全图

HTTP层:Tamper Data

适用范围 普通网页,Ajax应用程序,Flash
优点 使用方便,适用范围广,任何HTTP请求都能截获
缺点 只能截获请求头、请求内容、应答头,得不到应答内容;涉及文件下载时效率大幅度降低

Tamper Data比Firebug进了一步, 只要是HTTP请求,它都能抓下来,可惜的是看不到应答内容。 适用于分析请求流程、请求参数、请求数据、重定向URL。 对于非Ajax程序如普通网页、Flash、ActiveX等程序,用Tamper Data来分析十分方便。

大小: 19.78 K
尺寸: 473 x 376
浏览: 1984 次
点击打开新窗口浏览全图

HTTP层:burpsuite

适用范围 普通网页,Ajax应用程序,Flash
优点 适用范围广,截取数据完整,不挑网卡
缺点 使用稍稍麻烦

burpsuite中的proxy功能用于分析Web通信十分好用。 它的原理是架设一个代理服务器,让浏览器通过代理来发送请求,代理就可以截获数据了。

大小: 18.76 K
尺寸: 283 x 376
浏览: 2036 次
点击打开新窗口浏览全图

使用方法为:

  1. 配置proxy,然后设置浏览器使用它的proxy
  2. 访问想要抓取的那个网页
  3. burp suite的proxy中就会看到请求内容,在这里即可详细地分析请求。
  4. 如果想继续分析应答,可以右键点击请求内容,选send to repeater
  5. 切换到repeater标签,点【go】按钮发送请求,在下方就可以看到应答

TCP层:wireshark

适用范围 任何网络程序
优点 适用范围广,截取数据完整
缺点 使用麻烦;不能使用loopback网卡

如果以上方法都不管用,就要祭出终极武器wireshark(原名ethereal)了。 它从网络的最底层入手,可以截获任何类型的网络通信,而不仅仅是HTTP协议。 比如要开发一个邮件程序,需要分析服务器端脚本与POP3服务器之间的通信, 那就非得wireshark出马不可了。

大小: 131.38 K
尺寸: 500 x 371
浏览: 1993 次
点击打开新窗口浏览全图

使用方法:

  1. 在wireshark中选择抓取物理网卡;
  2. 让应用程序发请求;
  3. 在wireshark中停止抓取;
  4. 从抓到的包一览中找出刚才应用程序发出的请求,右键点击选择 Follow TCP Stream,就能看到该请求的完整内容。

这个工具的不足之处是它不能抓取loopback的网卡,也就是说, 如果你的程序连接的是位于localhost或127.0.0.1的服务器, 那wireshark是抓不到的。解决方法是,让程序通过真实物理网卡去连别的机器, 或是使用虚拟机的虚拟网卡也行。

 

Tags: web, developer, analyzer, tools

Windows下SVN服务器的架设

看完这篇文章后,两个字:郁闷。
理由是我刚刚装完visualSVN,结果就看到这篇文章了,由于已经有三个人在用这个SVN,想再更换也不方便,所以就不再更换了。不过文章还是要转一下的,作个备份还是很重要的,下次再换成标准的SVN服务器。
原文链接:http://www.phpweblog.net/fuyongjie/archive/2009/01/05/6265.html(由于原文也是转摘的,但我不知道最初的地址,只能用这个地址了)
原文如下:
作者: rocksun  来源:Subversion

Subversion安装成service

以前的svnserve要想成为windows服务,必须依赖于svnservice或其他工具。从Subversion1.4开始,Subversion本身就集成Windows服务的工具。

1,安装svnservice

在Windows NT中(包括Windows XP, Windows 2000, Windows 2003 Server)本身包含了一个安装服务的工具,叫做"Service Control",也就是sc.exe。

例如我的Subversion安装在"D:\Subversion",版本库在"D:\svnroot",而我希望对应的Subversion服务名为svnservice,安装这个svn服务的命令就可以这样写:

sc create svnservice
binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\svnroot"
displayname= "SVNService"
depend= Tcpip

请注意,因为便于察看,上面的命令分为多行,但在实际执行时应该在一行里。另外,在以前启动svnserve时会使用"-d"选项,也就是守护进程模式,在这里不能使用,会导致服务无法启动。同样,"-i"和"-t"选项也不能使用。

在命令行窗口执行完这个命令之后,服务还没有启动,你可以继续运行"net start svnservice"启动这个服务,然后使用"net stop svnservice"停止服务。

另 外还有两点需要小心处理。首先,如果路径中包括空格,一定要用“\”处理“"”号,例如上面的例子中如果svnserve.exe在“c: \program files\subversion\”中,则命令应该写为“binpath= "\"c:\program files\subversion\bin\svnserve.exe\"”(“”中的内容),整个命令如下,红色部分是改变部分:

sc create svnservice
binpath= "\"D:\program files\Subversion\bin\svnserve.exe\" --service -r D:\svnroot"
displayname= "SVNService"
depend= Tcpip

其次,sc对选项的格式还有要求,例如“depend= Tcpip”不能写为“depend = Tcpip”或“depend=Tcpip”,也就是“=”前不能有空各,而后面必须有空格。

2,删除服务

如果服务安装的有问题,你可能需要删除服务。要删除前面添加的服务,只需要运行"net start svnservice","svnservice"就是我们创建服务时使用的名字。

3,配置服务是自动启动

默认情况下安装的服务不会随Windows的启动而启动,为了使svn服务能够随Windows启动而启动,需要修改一下"sc create"命令(首先要删除),增加"start= auto"选项:

sc create svnservice
binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\svnroot"
displayname= "SVNService"
depend= Tcpip
start= auto

当然你也可以使用图形化的工具修改服务的属性,你可以在“开始->运行...”中执行"services.msc",然后在界面中修改。

Subversion的权限控制

1,认证(Authentication)和授权(Authorization)


这两个术语经常一起出现。其中认证的意思就是鉴别用户的身份,最常见的方式就是使用用户名和密码,授权就是判断用户是否具备某种操作的权限,在 Subversion里提供了“authz-db”文件,实现了以路径为基础的授权,也就是判断用户是否有操作对应路径的权限,在Subversion 1.3之后,svnserve和Apache一样都可以使用“authz-db”文件。

2. svnserve下的配置文件

因为本文是以svnserve为例的,所以先介绍一下版本库目录的结构:

D:\SVNROOT\PROJECT1
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks

其中conf下面有三个文件:

authz
passwd
svnserve.conf

其中的“svnserve.conf”是这个版本库的配置文件,当使用svnserve时,这个配置文件决定了使用什么认证和授权文件:

password-db = passwd
authz-db = authz

上面的配置说明使用“svnserve.conf”同目录的passwd和authz,其中的password-db指定了用户密码文件,authz-db是我们的授权文件,也就是我们本文主要介绍的文件。

注意:使用Apache作为服务器时,根本就不会参考“svnserve.conf”文件的内容,而是会参考Apache的配置。

3,基于svnserve的版本库文件布局

使用svnserve时,为了管理的方便,应该使用相同的认证和授权文件,所以应该让所有版本库的配置文件svnserve.conf指向同一个password-db和authz-db文件。下面是一个多版本库的目录:

D:\SVNROOT
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
└─project2
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks

D:\SVNROOT下有两个目录project1和project2,都已经创建了版本库,所以我们修改每个conf目录下的svnserve.conf,使之指向同一个password-db和authz-db文件。

password-db = ..\..\passwd

authz-db = ..\..\authz这样,D:\SVNROOT\passwd和D:\SVNROOT\authz就控制了所有版本库的svnserve访问。另外在 后面的操作中要关闭匿名访问,应该去掉“anon-access = none”前的“#”号,保证只有认证用户可以访问。

注意:还有一点需要注意,那就是svnserve的“realm”的值,在上面的设置下,应该保证所有的版本库使用相同的realm值,这样,对版本库的密码缓存可以在多个版本库之间共享,更多细节见客户端凭证缓存。

4,测试用户和组说明

版本库禁止任何匿名用户的访问,只对认证用户有效。

root:配置管理管理员,对版本库有完全的管理权限。

p1_admin1:project1的管理员,对project1有完全权限。
p1_d1:project1的开发者,对project1的trunk有完全的权限,但是对其中的/trunk/admin目录没有任何权限。
p1_t1:project1的测试者,对project1的trunk有完全的读权限,但是对其中的/trunk/admin目录没有任何权限。

p2_admin1:project2的管理员,对project2有完全权限。
p2_d1:project2的开发者,对project2的trunk有完全的权限,但是对其中的/trunk/admin目录没有任何权限。
p2_t1:project2的测试者,对project2的trunk有完全的读权限,但是对其中的/trunk/admin目录没有任何权限。

对应的组及组的用户:

p1_group_a:p1_admin1
p1_group_d:p1_d1
p1_group_t:p1_t1
p2_group_a:p2_admin1
p2_group_d:p2_d1
p2_group_t:p2_t1

5,修改D:\SVNROOT\passwd文件

前面已经说过了,用户和密码文件应该是在D:\SVNROOT\passwd,所以我们为每一位用户设置权限,文件内容如下:

[users]
p1_admin1 = p1_admin1
p1_d1 = p1_d1
p1_t1 = p1_t1

p2_admin1 = p2_admin1
p2_d1 = p2_d1

p2_t1 = p2_t1为了便于验证,所有密码和用户名一致,如果你使用的是其他认证方式,这一步可能不同,但是用户名应该都是一样的。

6,配置授权,修改D:\SVNROOT\authz

[groups]
# 定义组信息

p1_group_a = p1_admin1
p1_group_d = p1_d1
p1_group_t = p1_t1

p2_group_a = p2_admin1
p2_group_d = p2_d1
p2_group_t = p2_t1

[/]
# 指定所有的版本库默认只读,root可读写
* = r
root = rw

[project1:/]
# 指定对版本库project1根目录的权限
@p1_group_a = rw
@p1_group_d = rw
@p1_group_t = r

[project1:/trunk/admin]
# 指定对版本库project1的/trunk/admin根目录的权限,
# p1_group_a读写,p1_group_d和p1_group_t没有任何权限。
@p1_group_a = rw
@p1_group_d =
@p1_group_t =

[project2:/]
# 指定对版本库project2根目录的权限
@p2_group_a = rw
@p2_group_d = rw
@p2_group_t = r

[project2:/trunk/admin]
# 指定对版本库project1的/trunk/admin根目录的权限
@p2_group_a = rw
@p2_group_d =
@p2_group_t =

经过以上设置以后,你会发现一些有趣的事情。当使用用户“p1_d1”,检出project1的trunk时,目录是空的,好像admin目录根本不存在一样,当使用p1_d1用户浏览版本库时,能够看到admin目录,但是其中的内容却无法看到。

关 于中文目录,也是没有问题的,只是注意要把authz文件转化为UTF-8格式,在我的WINXP的UltraEdit里显示的文件格式为U8-DOS, 具体的做法是用UltraEdit打开authz文件,然后选择“文件->转换->ASCII转UTF-8”,然后保存。

再复杂的情况也不过如此,在实际的工作中要首先规划好权限,只赋给用户最小的权限,保证以最小的配置实现最复杂的权限控制。

Subversion备份

版本控制最关键的一件事是保证数据的安全性,不能因为磁盘损坏,程序故障造成版本库无可挽回的错误,为此必须制定较完备的备份策略。在Subversion中,我们有三种备份方式:完全备份,增量备份和同步版本库。

1, 完全备份

最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上,就可以了。但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会 造成备份的结果不够准确,失去备份的作用,为此Subversion提供了“svnadmin hotcopy”命令,可以防止这种问题。

还记得我们的版本库目录吗?

D:\SVNROOT
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
└─project2
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks

如果要把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 off
set SVN_HOME="C:\Program Files\Subversion"
set SVN_ROOT=D:\svnroot
set UNIX_SVN_ROOT=D:/svnroot
set DELTA_BACKUP_SVN_ROOT=D:\svnrootbak\delta
set LOG_FILE=%1\backup.log
echo backup revision %2 >> %LOG_FILE%
for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %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 backuprepo < dumpfile

最后的结果,可以下载svnroot.rar,将之解压缩到d:\下,然后修改几个bat文件的SVN_HOME就可以使用了。

3, 版本库同步

Subversion 1.4增加了同步机制,可以实现一个版本库同另一个版本库的同步(但好像只是单向的),我们可以用来实现版本库的备份或镜像。

3.1. 对目标库初始化

svnsync init svn://localhost/project2 svn://localhost/project1
其中project2是目标的版本库,而project1是源版本库。其中的目标版本库必须为空,而且必须允许修订版本属性的修改,也就是在目标的版本 库的hooks目录里添加一个文件pre-revprop-change.bat,内容为空即可。

3.2. 同步project2到project1

svnsync sync svn://localhost/project2
这时候你update一下你的project2的一个工作拷贝,就会发现有了project1的所有内容。如果project1又有提交,这时候 project2的版本库无法看到最新的变化,还需要再运行一遍sync操作,这样才能将最新的变化同步。需要注意的是,目标版本库只能做成只读的,如果 目标版本库发生了变更,则无法继续同步了。

3.3. 同步历史属性的修改

因为同步不会更新对历史属性的修改,所以svnsync还有子命令copy-revprops,可以同步某个版本的属性。

3.4. 钩子自动同步

希望在每次提交时同步,则需要在源版本库增加post-commit脚本,内容如下:

echo off
set SVN_HOME="D:\Subversion"
%SVN_HOME%\bin\svnsync sync --non-interactive svn://localhost/project2

把以上内容存放为post-commit.bat,然后放到版本库project1下的hooks目录下,这样project1每次提交,都会引起project2的同步。

Tags: svn, windows, subversion, svnservice