Mercurial(HG)版本控制服务用户名验证

在之前的文章中,在Windows使用apache搭建Mercurial版本控制服务,并没有说到如何验证用户,而是允许所有人都提交。当时还不会怎么配置。

以下就是配置方法:

1,用htpasswd.exe建立用户密码文件

htpasswd.exe在apache的bin目录可以找到,使用方法主要有

htpasswd -c 文件名 用户名               //参数-c创建密码文件,输入后会提示你输入密码

htpasswd 文件名 用户名                 //如果用户名一样会更新密码

举个例子,我现在要建两个用户

htpasswd -c hguser fatkun.com
htpasswd hguser aaaa

这时会得到一个hguser的文件,把它拷贝到conf目录下

2,修改httpd.conf配置

在httpd.conf配置最末尾加入,注意路径改为你的

<Location /hg>
    AuthType Basic
    AuthName "Mercurial repositories"
    AuthUserFile "D:/Program Files/Apache2.2/conf/hguser"
	<LimitExcept GET>
        Require valid-user
    </LimitExcept>
</Location>

这样就可以了,重启apache服务以后,试试从浏览器访问hg的网页?会提示你输入用户名和密码。

3,针对某些项目的权限设置

在服务器存放项目的文件中,在.hg目录新建一个hgrc文件,里面可以配置为
这里是配置单个项目的,如果需要对所有项目配置,可以修改hgweb.config文件

[web]
allowpull = false //不允许所有人下载该项目
allow_read = "John Doe, PhD", fatkun//允许哪些人可以下载,如果有空格或特殊字符用引号""括起来
//还有deny_read,allow_push 等等

更多的配置可以查看这里http://www.selenic.com/mercurial/hgrc.5.html




fatkun

69条评论

感觉wordpress官方的svn服务器好慢的说,嘿嘿 ~
最近一直在用你那个插件来抓论坛帖子里面的漫画,赞一下!

苦苦研究了很久windows下mercurial+apache的配置,看英文的文档看到想吐,因为我刚刚接触版本控制,也刚刚接触分布式版本控制,网上大部分(包括官网)都是基于unix的配置,我又没接触过unix,看不太懂,只能照葫芦画瓢,也没能配置成功。后来google找到你的这两篇日志时,如找到救命稻草。真心感激你的分享!!!

不过我按照你写的步骤配置,用浏览器访问hg页面,却没有提示我输入用户名和密码,直接就是:
Access Forbidden
You don’t have permission to access the requested directory. There is either no index document or the directory is read-protected.

是不是除了你写下来的这些配置,还要些其它的基本配置你觉得很简单没有写下来呢?能不能留下您的email或者QQ。老板让我这个星期就搞定,我还一头雾水,麻烦您帮帮我!

我又重新配置了一遍,进行到你上一篇“在Windows使用apache搭建Mercurial版本控制服务”为止,访问http://localhost:8080/hg/,出现了你所说的错误:Premature end of script headers: hgwebdir.cgi。遗憾的是,我没有接触过python,所以不知道怎么调试啊!您会吗?能不能帮忙调试下?

我python也不懂的
1。确认你安装了Python2.6并且路径为C:/Python26/python.exe和配置中一致
2。把.cgi文件改名为.py然后右键有个菜单Edit_with_IDLE,在编辑代码那里可以按F5运行python
3。试试在第二行加入print file(‘hgweb.config’).read() ,看能不能读hgweb.config文件
4。确保路径中没有空格,路径中的“\”改为“/”
5。注意templates目录也要复制到lib目录
6。hgweb.config的路径必须是存在的!!你可以改为你的。两个路径名是一样的
如果还不可以,请把python错误提示贴上来。。最后可能有个KeyError: ‘SCRIPT_NAME’错误,没关系的。

感谢啊感谢,不知道怎么就折腾好了。在本地访问hg网页,会提示用户名和密码了。
不过我又有新的问题了:
1)如果我在mercurial版本库中add一些文件,并commit。那打开网页的时候应该会显示出来吧?怎么还是空白呢?
2)在同一局域网内可不可以打开这个网页呢?比如我是在IP地址为10.224.51.195配置的apache+Mercurial,我在IP地址为10.224.51.185的客户端用浏览器访问:http://10.224.51.195:8080/hg/,却提示Access Forbidden.
3)同样我在地址为10.224.51.185的客户端向服务器push的时候,输入用户名和密码,却提示重新输入,反复输入三次后得到:
‘http://10.224.51.195:8080/hg/’ does not appear to be an hg repository

是不是我还有什么地方没配置好呢?

我具体是这样配置的,/xampp/htdocs/hg/hgwebdir.cgi:

#!c:/Python26/python.exe
#
#An example CGI script to export multiple hgweb repos, edit as necessary
#adjust python path if not a system-wide install
import sys
sys.path.insert(0,”c:/xampp/mlib”)
from mercurial import demandimport
demandimport.enable()
import cgitb
cgitb.enable()
#import os
#os.environ[“HGENCODING”]=”UTF-8″
from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi
CONFIG = ‘c:/xampp/htdocs/hg/hgweb.config’
application = hgwebdir(‘hgweb.config’)
wsgicgi.launch(applicaiton)

/xampp/htdocs/hg/hgweb.config文件是这样配置的:

[collections]
/hg = e:/workspace/hg/*
[web]
allow_push = *
push_ssl = false
style = gitweb

/xampp/apache/conf/httpd.conf文件是这样配置的:
ScriptAliasMatch ^/hg(.*) c:/xampp/htdocs/hg/hgwebdir.cgi$1

Options ExecCGI FollowSymLinks
AllowOverride None
Order allow, deny
Allow from all

AuthType Basic
AuthName “Mercurial Repositories”
AuthUserFile “C:/xampp/apache/conf/hguser”
Require valid-user

/xampp/apache/conf/httpd.conf文件是这样配置的:
ScriptAliasMatch ^/hg(.*) c:/xampp/htdocs/hg/hgwebdir.cgi$1
《Directory “c:/xampp/htdocs/hg”》
Options ExecCGI FollowSymLinks
AllowOverride None
Order allow, deny
Allow from all
《/Directory》
《Location /hg》
AuthType Basic
AuthName “Mercurial Repositories”
AuthUserFile “C:/xampp/apache/conf/hguser”
Require valid-user
《/Location》

#8里面尖括号没显示出来,这里用“《”代替

啊!我自己折腾明白了!哇哈哈哈,得意中~~~
太谢谢你了!没有你这两篇文章,打死我我也折腾不明白!

O(∩_∩)O~自己折腾的好~当时我也是硬着头皮去看那英文文章一步步配置的。。

跟你说。。我博客的链接是跳转的。。而且链接也不会有什么人点的吧。。

你好,我看了你的这两篇文章后,受益匪浅,也遇到了很多问题,之后我自己都一一看文档调试好了现在只剩一个问题了
就是当我访问http://hgserve/hg的时候,出现的Repositories list中一条记录都没有,但我下面明明有资源库的
而且当我直接输入我的资源库路径的时候,提示如下:
An error occurred while processing your request

read not authorized
好像我的资源没有公开可以访问,但我在hgweb.config中配置了allowpull = *,allow_read=*了
是还漏了别的什么吗?我这个资源下面的hgrc文件中都是默认配置,没改过访问权限

你好,看了你的两篇文章受益匪浅,自己也调试了很久,也查了很多文档才大致弄明白这些配置的作用
现在还剩一个问题比较头大
我访问http://hgserve/hg的时候
Repositories list是空的,访问里面的资源路径http://hgserve/hg/repo的时候,提示如下
An error occurred while processing your request

read not authorized
这是为什么呢?
hgweb.config的内容
allowpull = true
allow_read = *

发表评论

电子邮件地址不会被公开。