Mercurial是一个分布式的的版本控制工具。其自身提供了一个web服务端,但是没有权限控制功能。Mercurial-server可以弥补这个不足,它通过ssh来控制不同版本库的访问权限。需要注意的是
Mercurial-server只能安装在linux系统上。
Ubuntu系统下的安装:
如果使用的是Ubuntu操作系统的话安装是非常简单的,只需要执行下面的命令:
- $ sudo apt-get update
- $ sudo apt-get install mercurial mercurial-server
$ sudo apt-get update
$ sudo apt-get install mercurial mercurial-server
Redhat系统下的安装:
这个相对来说会复杂一些,而且失败率非常高,按照官方文档的方法连第一步都无法通过。后来经过一番漫长的摸索终于安装成功了。这里和大家分享一下:
1、看到解压后的目录中含有Makefile,直接执行make,结果报错,无法成功安装;
2、分析Makefile中的内容,发现整个安装过程包含复制文件、创建用户、初始化用户等几个任务。接下来开始手工安装:
- a.首先通过make命令进行文件复制:make pythonbuild pythoninstall
- b.通过make执行创建用户任务会报错,所以直接使用系统命令创建:useradd hg
- c.再通过make的inituser对用户进行初始化:make inituser
a.首先通过make命令进行文件复制:make pythonbuild pythoninstall
b.通过make执行创建用户任务会报错,所以直接使用系统命令创建:useradd hg
c.再通过make的inituser对用户进行初始化:make inituser
===> python install setup.py 记得老的版本,先安装python,再用此命令安装mercurial-server
Mercurial-server安装成功后需要进行一定的配置:
1、切换到hg用户下;
2、创建权限控制的基本文件/etc/mercurial-server/access.conf,并输入以下内容
- init user=root/**
- deny repo=hgadmin
- write user=users/**
init user=root/**
deny repo=hgadmin
write user=users/**
3、将自己的ssh公钥复制到版本库服务器的/etc/mercurial-server/keys/root/user-name/目录中
4、创建~/.ssh目录
5、执行/usr/local/share/mercurial-server/refresh-auth进行权限刷新
6、将~/.ssh目录的权限设置为只读
特别需要注意的一点是:
mercurial-1.9.1与mercurial-server有
兼容问题,===> 在项目应用的项目软件经常遇到hg的版本匹配,不合适的需要换一换,也许就解决了。即会报这样一个错误:
- remote: Traceback (most recent call last):
- remote: File "/usr/local/share/mercurial-server/hg-ssh", line 76, in <module>
- remote: dispatch.dispatch(['-R', repo, 'serve', '--stdio'])
- remote: File "/usr/local/lib/python2.7/site-packages/mercurial/dispatch.py", line 31, in dispatch
- remote: if req.ferr:
- remote: AttributeError: 'list' object has no attribute 'ferr'
- abort: no suitable response from remote hg!
remote: Traceback (most recent call last):
remote: File "/usr/local/share/mercurial-server/hg-ssh", line 76, in <module>
remote: dispatch.dispatch(['-R', repo, 'serve', '--stdio'])
remote: File "/usr/local/lib/python2.7/site-packages/mercurial/dispatch.py", line 31, in dispatch
remote: if req.ferr:
remote: AttributeError: 'list' object has no attribute 'ferr'
abort: no suitable response from remote hg!
如果出现这个错误,换用1.8.4版本便可以解决。
此外,我在安装mercurial-1.9.1的时候报了一个错误:docutils module is missing。这时需要安装一下这个模块,安装方法如下:
- # wget http:
- # tar -zxf docutils-0.7.tar.gz
- # cd docutils-0.7
- # python setup.py install
# wget http://prdownloads.sourceforge.net/docutils/docutils-0.7.tar.gz?download
# tar -zxf docutils-0.7.tar.gz
# cd docutils-0.7
# python setup.py install