在BitBucket上,对于某一个私有仓库,可以设定这个仓库的用户以及权限。说权限,其实也就两种,一个是读权限,也就是说对某个用户是否可见。另外一个是写权限,也就是某用户是否可以将自己的更改写入到库中。
如果可以接入广域网,BitBucket也就能搞定权限的问题了。然而,最近公司要在局域网的环境内办公,而领导又想控制权限的问题,由于一开始大家都不知道怎么设定水银的权限问题,于是就想着要回到SVN上了。但我们组内的同事其实都只接触过水银,没有接触过SVN。况且水银管理源代码确实方便一些。因此最近没啥事的我就开始琢磨如何用水银来进行权限管理。绕过的弯子就不多说了,就直接切入实验成功的路子吧。重要的参考文献应当先列一下,以示对先贤的尊重:
- FATKUN'S BLOG1
- FATKUN'S BLOG2
文献中引用的重要官方文献有两篇,也在此列出:
- Publishing Mercurial Repositories
- hgrc
本来,把这些参考文献全部列出,也就可以了。但是使用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文件夹
在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
打开
文件,在最末位加入:
# 目录配置
ScriptAliasMatch ^/hg(.*) E:/xampp/htdocs/hg/hgwebdir.cgi$1
Options ExecCGI FollowSymLinks
#去掉SSLRequireSSL的#号就强迫使用ssl来访问
#SSLRequireSSL
具体含义暂不清楚。
现在即可以重启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配置最末尾加入,注意路径改为你的
Order Allow,Deny
Allow from all
AuthType Basic
AuthName "Mercurial repositories"
AuthUserFile "E:\\xampp\\apache\\conf\\hguser"
Require valid-user
这样就可以了,重启浏览器,试试从浏览器访问hg的网页?会提示你输入用户名和密码。
针对某些项目的权限设置
在服务器存放项目的文件中,在.hg目录新建一个hgrc文件,里面可以配置为
[web]
push_ssl = False
allow_pull = xingzhi, yian
allow_push = xingzhi, yian
allow_read = xingzhi, yian
好了,现在呢,你要做的就是在每一个仓库中,规定哪些人有读的权限,哪些人有push和pull的权限就可以了。