软件安装
下载TortoiseHG,Mercurial v2.9,Python v2.7,XAMPP v1.7.3(比较简单的apache服务),
下载地址:
Mercurial v2.9:http://mercurial.selenic.com/
Python v2.7:http://www.python.org/downloads/
XAMPP v1.8:http://www.apachefriends.org/index.html
说明:Mercurial 不同版对应不同版本Python,原因是Python一个版本编译放到其它版本没办法编译,所以下载Mercurial看好对应的Python版本,这里使用的是Mercurial v2.9 for python2.7,下载的时候看好。
这里安装的Mercurial v2.9,是在Python里面安装一个支持的包,安装到这个目录下Python27/Lib/site-packages,安装包如下图。
下图是Mercurial v2.9安装文件。
上面两种选择一种安装,记住路径即可。
User/Python27/Lib/site-packages
或User/Mercurial
上面的软件安装好后可以进行下面的操作。
注意事项
最好是使用没有空格的路径!例如c:\ProgramFiles这样的路径最好不要用,不然可能出现错误。
Apache启动不了可能是端口号被占用,修改xampp/apache/conf/httpd.conf 将所有80修改为一个指定端口号。
Ssl端口号被占用修改\xampp\apache\conf\extra\httpd-ssl.conf,默认是443,如果被占用可以进行修改
创建仓库
使用TortoiseHG在某个目录创建repositorie,我的目录是F:\workspace\myhg
新建这个目录F:\workspace\myhg,选中myhg,右键->Create repositorie here
相关配置
在xampp安装目录htdocs下,建立一个hg文件夹
在hg目录下,建立一个hgwebdir.cgi文件,把下面的内容拷贝进去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!E:/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 = "hgweb.config" # Uncomment and adjust if Mercurial is not installed system-wide: importsys;sys.path.insert(0, "E:/Python27/Lib/site-packages") # Uncomment to send python tracebacks to the browser if an error occurs: importcgitb;cgitb.enable() frommercurialimportdemandimport; demandimport.enable() from mercurial.hgweb importhgweb, wsgicgi application = hgweb(config) wsgicgi.launch(application) |
hgwebdir.cgi配置的时候路径用“/”.
配置说明::
第1行中的#!E:/Python27/python.exe改为你python.exe所在的路径
第8行sys.path.insert(0, "E:/Python27/Lib/site-packages")这句中的"E:/Python27/Lib/site-packages",是上面安装的mercurial对python支持的包。
再建立一个hgweb.config文件
1 2 3 4 5 6 7 |
[paths] /projectName = F:/workspace/hgproject
[web] allow_push = * allow_pull = * allow_read = * |
[paths]说明,等号右侧是项目仓库目录,等号左侧是显示或者clone的时候的项目名称。
例如:http://ip:port/hg/projectNmae
上面的F:/workspace/hgproject请换为你自己的项目的存放目录
修改apache服务器配置
打开xampp/apache/conf/httpd.conf文件,在最末尾加入
1 2 3 4 5 6 7 |
# 目录配置 ScriptAliasMatch ^/hg(.*) D:/xampp/htdocs/hg/hgwebdir.cgi$1 Options ExecCGI FollowSymLinks #去掉#号使用ssl来访问 #SSLRequireSSL
|
到这里配置基本完成,重启apache通过https://localhost:port/hg/访问port是监听的端口号。
下面是权限控制
htpasswd.exe建立用户密码文件
htpasswd.exe在这个E:\xampp\apache\bin目录下
E:
Cd E:\xampp\apache\bin
htpasswd -c 文件名 用户名 //参数-c创建密码文件,输入后会提示你输入密码
已经有密码文件执行下面命令:
htpasswd 文件名 用户名
可以连续执行命令创建多个用户。
举例:
htpasswd -c hguseruser1
htpasswd hguser user2
这时会得到一个hguser的文件,把它拷贝到conf目录下
修改httpd.conf配置
在httpd.conf末尾作如下配置,目录需要修改为自己的目录。
Order Allow,Deny
Allow from all
AuthType Basic
AuthName "Mercurialrepositories"
AuthUserFile " E:/xampp/apache/conf/hguser"
Require valid-user
除了可以写在Location段以外,也可以写在Directory段:
ScriptAlias /hg"E:/xampp/htdocs/hgweb/hgweb.cgi"
Order Allow,Deny
Allow from all
AuthType Basic
AuthName "Mercurial repositories"
AuthUserFile " E:/xampp/apache/conf/hguser"
Require valid-user
hg的访问方式可以设置在apache的httpd.conf配置文件中配置:
# 目录配置
ScriptAliasMatch^/hg(.*) D:/xampp/htdocs/hg/hgwebdir.cgi$1
Options ExecCGI FollowSymLinks
#去掉#号使用ssl来访问
#SSLRequireSSL
上面的配置是https访问方式,如果改成http访问就注释掉ssl那行。
Tortoise使用密码,
http方式:1、url设置用户名密码。在第一次克隆的时候,在url里面设置了用户名密码如图2:
这种方式拉取完成后,url中只是保存了用户名,在之后拉取和推送的时候还需要需要输入密码。
2.第一次拉取完修改hgrc文件,hgrc位置,项目右键->explore“项目/.hg/hgrc”,记事本打开编辑,UpdatePomXML项目为例,做如下配置
[paths] default = https://192.168.99.117:443/hg/UpdatePomXML
[auth]UpdatePomXML.prefix=https://192.168.99.117:443/hg/UpdatePomXML
UpdatePomXML.username=root
UpdatePomXML.password=sa
这样只有第一次克隆是需要输入用户名密码,以后就不需要再输入用户名密码。 https方式: 1、url中设置方式和http情况一样。
2、克隆完项目后,如下图操作:
保存(save)后用户名密码就保存了,之后在拉取提交的时候就不在需要输入用户名密码。
以上是对Tortoise的http和https两种方式密码设置的测试。
在hgweb.config中是做得如下配置,控制了库里的所有项目为不可见:
Java代码
[collections]
/projectName = F:/workspace/projectname
[web]
allow_push =false
allow_pull =false
allow_read =false
push_ssl =false
具体每一个项目进行控制的配置文件hgrc文件的内容如下:
Java代码
[web]
allow_pull = user1,uesr2..
allow_push = user1,uesr2..
allow_read = user1,uesr2..
参数是*或者用户名列表,列表用逗号间隔,如用户名中包含逗号,需要把用户名用双引号括起来。
特别说明:单个项目的配置优先级大于hgweb.config中的配置,例如
Hgweb.config中配置所有项目均不可见,test这项目hgrc做了配置,云需用户aaa操作该项目,那么只有该项目可以被用户aaa读取推送。