在浏览器查看svn中代码的解决方案(转)_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > 在浏览器查看svn中代码的解决方案(转)

在浏览器查看svn中代码的解决方案(转)

 2011/9/20 12:58:50  skanion  http://skanion.iteye.com  我要评论(0)
  • 摘要:重新安装svn+apache以后,发现一个问题,比如java源代码,现在是通过浏览器下载,而不是直接在浏览器中展示了。以前是怎么做的呢?想不起来了。文档啊文档,很重要的。现在重新想办法吧。最简单的办法:apache强制mime类型其实最简单的办法,是借助apache核心模块的指令ForceType,见:http://httpd.apache.org/docs/2.2/mod/core.html#forcetype可以强制配置mime类型,比如:<Location/svn>
  • 标签:解决方案 解决 浏览 代码 浏览器
重新安装svn+apache以后,发现一个问题,比如java源代码,现在是通过浏览器下载,而不是直接在浏览器中展示了。

以前是怎么做的呢?想不起来了。文档啊文档,很重要的。现在重新想办法吧。

最简单的办法:apache强制mime类型
其实最简单的办法,是借助apache 核心模块的指令ForceType,见:

http://httpd.apache.org/docs/2.2/mod/core.html#forcetype

可以强制配置mime类型,比如:

<Location /svn>
    …
    ForceType text/plain
</Location>



这样就可以在浏览器看源代码文本了,但是也有副作用,比如二进制文件怎么办,比如html页面,应该在浏览器中展示而不是显示代码。




subversion hook:在提交的时候触发服务器端程序写mime类型
subversion提供了hook,钩子,可以在比如提交前执行钩子脚本

利用这个特性,可以在提交前,比如发电子邮件,比如检查是否写log message了。

当然,也可以在提交前,改mime type,可以按照这个python脚本改写:

http://pear.reversefold.com/dokuwiki/svn:pre-commit

但是,subversion不建议这样做,因为,所有hook操作,最好不再修改提交的文本,只做只读的操作。如果做写文本或者属性的操作,svn用户的local work copy,将和服务器端不一致。比如我提交一个java文件,没有设置mime type,提交到svn,将触发svn hook,比如修改为text/plain,然后提交到svn库中,这时库中的记录和该用户的work copy不一致。可能会带来很多其他不可预知的问题。

svn自带的手动设置mime类型方式
svn可以为提交的文件定义mime类型,比如这样:

$ svn propset svn:mime-type image/jpeg foo.jpg
property 'svn:mime-type' set on 'foo.jpg'

如果是在tortoiseSVN客户端,可以通过交互界面实现类似的功能,而且还可以递归操作:



缺点是,无法根据扩展名做区分。比如目录下有jpg,也有java文件,这个操作将所有文件都增加了text/plain mime类型。

eclipse的svn插件,subclipse也有类似功能。

svn提供的自动设置mime类型方式
在svn客户端,有个config文件,在windos xp,路径应该是:

C:\Documents and Settings\user_name\Application Data\Subversion\config

如果想让java代码的mime类型是text,可以这样写:

enable-auto-props = yes

[auto-props]

*.java=svn:mime-type=text/plain



这样,每次提交代码的时候,svn会自动将mime-type设置为text。不需要上面的手工设置了。

缺点是,需要维护一个config配置文件,比如很多开发人员,各种不同的环境,都需要事先做这样一个配置。

希望有这样的解决方案
比如,google code,用户提交上去的代码,自动就以text方式在浏览器端展示,不需要设置svn的配置文件。而且,用户可以手工设置mime type,比如有个html页面,如果设置成text/plain,则在浏览器中显示的是html源代码,如果设置为text/html,则显示的是页面的效果。

目前还没有找到这样的办法,估计要在apache设置方面做些工作。

发表评论
用户名: 匿名