Mercurial(Hg)之用户权限管理

在BitBucket上,对于某一个私有仓库,可以设定这个仓库的用户以及权限。说权限,其实也就两种,一个是读权限,也就是说对某个用户是否可见。另外一个是写权限,也就是某用户是否可以将自己的更改写入到库中。

如果可以接入广域网,BitBucket也就能搞定权限的问题了。然而,最近公司要在局域网的环境内办公,而领导又想控制权限的问题,由于一开始大家都不知道怎么设定水银的权限问题,于是就想着要回到SVN上了。但我们组内的同事其实都只接触过水银,没有接触过SVN。况且水银管理源代码确实方便一些。因此最近没啥事的我就开始琢磨如何用水银来进行权限管理。绕过的弯子就不多说了,就直接切入实验成功的路子吧。重要的参考文献应当先列一下,以示对先贤的尊重:

文献中引用的重要官方文献有两篇,也在此列出:

本来,把这些参考文献全部列出,也就可以了。但是使用FATKUN'S BLOG的教程时有几次碰壁,所以想再写出一个新的版本来,并且将注意事项也一并列出。

需要提一句的是,由于目前公司用Windows Server来做服务器,因此以下所述都是在Windows上搭建水银服务器并管理用户权限的过程,如果希望在Linux服务器上搭建的朋友请绕道或等我一段时间。

软件包的安装

如果是对水银本身还比较不熟悉的朋友,请查看我的水银系列文章。在水银系列文章中,提到了一个非常流行的软件,叫TortoiseHg。在水银系列文章中,提到了一个非常流行的软件,叫TortoiseHg。这个软件是一定要装滴。用它来管理仓库,特别省心。如果仅仅想做简单的不加权限控制的服务端,那么TortoiseHg就够了。使用Hg)。这个软件是一定要装滴。用它来管理仓库,特别省心。如果仅仅想做简单的不加权限控制的服务端,那么TortoiseHg就够了。使用Hg。在水银系列文章中,提到了一个非常流行的软件,叫TortoiseHg。这个软件是一定要装滴。用它来管理仓库,特别省心。如果仅仅想做简单的不加权限控制的服务端,那么TortoiseHg就够了。使用Hg) serve就可以让别人都来访问你的仓库了。但是,如果要做权限的管理,那还要安装下面几个软件。

  • Python:在搭服务器的过程中,有一个脚本是用Python语言来写的,因此需要安装Python来解析。
  • Mercurial For Python:是水银针对Python的一个库。有两点注意事项,一个是Python的版本号要一致。比如,我安装的是Python2.7,则自然应当安装Mercurial For Python2.7。另外一点位数要一致。比如,安装的Python是32位的,那么Mercurial For Python就一定要用32位的版本,而不能用64位的版本。在安装Mercurial For Python时,会自动检测Python的安装位置。如果没有检测到,那就一定有哪里弄错了。这里其实蕴含了另外一个注意点,那就是:必须先安装Python,再安装Mercurial For Python。
  • XAMPP:XAMPP是一个非常牛逼的软件,其含义是Apache+MariaDB+PHP+Perl。感觉是用来建站的超级软件。这里用XAMPP,其实只用了里面的Apache服务而已。

注意事项

  • 最好是使用没有空格的路径!例如c:\Program Files这样的路径最好不要用,不然可能出现乱七八糟的错误。
  • 在配置文件中路径使用“/” 或者使用”\”,例如D:\\xampp\\htdocs

仓库的仓库

在服务器上,要存放的仓库肯定不止一个,有各个项目组的不同项目。但是为了方便管理,请将所有的水银仓库都放在一个共同的文件夹中,这个文件夹,就可以被看成是仓库的仓库了。

我的仓库的仓库的路径是D:\Development

配置hgwebdir.cgi

在xampp安装目录htdocs下,建立一个hg文件夹
<xampp install>\htdocs\hg
在hg目录下,建立一个hgwebdir.cgi文件,把下面的内容拷贝进去

#!C:/Python27/python.exe
#
# An example hgweb CGI script, edit as necessary
# See also http://mercurial.selenic.com/wiki/PublishingRepositories
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "E:\\xampp\\htdocs\\hg\\hgweb.config"
# Uncomment and adjust if Mercurial is not installed system-wide:
import sys
sys.path.insert(0, "C:\\Python27\\Lib\\site-packages")
# Uncomment to send python tracebacks to the browser if an error occurs:
import cgitb
cgitb.enable()
from mercurial import demandimport
demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb(config)
wsgicgi.launch(application)

  • 第一行表明这是一个python程序,且给出了你python程序的位置。记得换成你自己的。
  • config那一行给出了我们将要创建的另外一个配置文件的路径。换成你自己的。
  • sys.path.insert那一行是把你安装的Mercurial For Python的路径添加到搜索路径中。换成你自己的。
  • 其它地方不需要改变。

配置hgweb.config

再建立一个hgweb.config

[paths]
/ = D:/Development/*
 
[web]
descend = True
allow_push = false
allow_pull = false
allow_read = *
push_ssl = false
style = gitweb

  • [paths]下面的一行表示将D:/Development/下的所有水银仓库都显示出来。
  • [web]下面的descend表明了是否查找D:/Development下的子目录中是否有仓库。
  • [web]下面的其它一些应该是全局设置,它与每个仓库内的hgrc(仓库设置)之间的关系如何,我目前还不清楚。

配置httpd.conf

打开<xamp install path>/apache/conf/httpd.conf文件,在最末位加入:

# 目录配置
ScriptAliasMatch ^/hg(.*) E:/xampp/htdocs/hg/hgwebdir.cgi$1
<Directory "E:/xampp/htdocs/hg">
  Options ExecCGI FollowSymLinks
#去掉SSLRequireSSL的#号就强迫使用ssl来访问
 #SSLRequireSSL
</Directory>

具体含义暂不清楚。

现在即可以重启apache服务,重启后,通过http://localhost/hg/访问。接下来是添加用户和用户的权限管理。

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

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

htpasswd -c 文件名 用户名               //参数-c创建密码文件,输入后会提示你输入密码
htpasswd 文件名 用户名                 //如果用户名一样会更新密码

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

htpasswd -c hguser xingzhi
htpasswd hguser yian

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

修改httpd.conf配置

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

<Location /hg>
    Order Allow,Deny
    Allow from all
    AuthType Basic
    AuthName "Mercurial repositories"
    AuthUserFile "E:\\xampp\\apache\\conf\\hguser"
    Require valid-user
</Location>

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

针对某些项目的权限设置

在服务器存放项目的文件中,在.hg目录新建一个hgrc文件,里面可以配置为

[web]
push_ssl = False
allow_pull = xingzhi, yian
allow_push = xingzhi, yian
allow_read = xingzhi, yian

好了,现在呢,你要做的就是在每一个仓库中,规定哪些人有读的权限,哪些人有push和pull的权限就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容