在BitBucket上褪储,對于某一個私有倉庫,可以設(shè)定這個倉庫的用戶以及權(quán)限慧域。說權(quán)限鲤竹,其實也就兩種,一個是讀權(quán)限昔榴,也就是說對某個用戶是否可見辛藻。另外一個是寫權(quán)限,也就是某用戶是否可以將自己的更改寫入到庫中互订。
如果可以接入廣域網(wǎng)吱肌,BitBucket也就能搞定權(quán)限的問題了。然而仰禽,最近公司要在局域網(wǎng)的環(huán)境內(nèi)辦公氮墨,而領(lǐng)導(dǎo)又想控制權(quán)限的問題,由于一開始大家都不知道怎么設(shè)定水銀的權(quán)限問題吐葵,于是就想著要回到SVN上了规揪。但我們組內(nèi)的同事其實都只接觸過水銀,沒有接觸過SVN折联。況且水銀管理源代碼確實方便一些粒褒。因此最近沒啥事的我就開始琢磨如何用水銀來進(jìn)行權(quán)限管理。繞過的彎子就不多說了诚镰,就直接切入實驗成功的路子吧奕坟。重要的參考文獻(xiàn)應(yīng)當(dāng)先列一下,以示對先賢的尊重:
文獻(xiàn)中引用的重要官方文獻(xiàn)有兩篇清笨,也在此列出:
本來月杉,把這些參考文獻(xiàn)全部列出,也就可以了抠艾。但是使用FATKUN'S BLOG的教程時有幾次碰壁苛萎,所以想再寫出一個新的版本來,并且將注意事項也一并列出检号。
需要提一句的是腌歉,由于目前公司用Windows Server來做服務(wù)器,因此以下所述都是在Windows上搭建水銀服務(wù)器并管理用戶權(quán)限的過程齐苛,如果希望在Linux服務(wù)器上搭建的朋友請繞道或等我一段時間翘盖。
軟件包的安裝
如果是對水銀本身還比較不熟悉的朋友,請查看我的水銀系列文章凹蜂。在水銀系列文章中馍驯,提到了一個非常流行的軟件阁危,叫TortoiseHg。在水銀系列文章中汰瘫,提到了一個非常流行的軟件狂打,叫TortoiseHg。這個軟件是一定要裝滴混弥。用它來管理倉庫趴乡,特別省心。如果僅僅想做簡單的不加權(quán)限控制的服務(wù)端蝗拿,那么TortoiseHg就夠了浙宜。使用Hg)。這個軟件是一定要裝滴蛹磺。用它來管理倉庫粟瞬,特別省心。如果僅僅想做簡單的不加權(quán)限控制的服務(wù)端萤捆,那么TortoiseHg就夠了裙品。使用Hg。在水銀系列文章中俗或,提到了一個非常流行的軟件市怎,叫TortoiseHg。這個軟件是一定要裝滴辛慰。用它來管理倉庫区匠,特別省心。如果僅僅想做簡單的不加權(quán)限控制的服務(wù)端帅腌,那么TortoiseHg就夠了驰弄。使用Hg) serve就可以讓別人都來訪問你的倉庫了。但是速客,如果要做權(quán)限的管理戚篙,那還要安裝下面幾個軟件。
- Python:在搭服務(wù)器的過程中溺职,有一個腳本是用Python語言來寫的岔擂,因此需要安裝Python來解析。
- Mercurial For Python:是水銀針對Python的一個庫浪耘。有兩點注意事項乱灵,一個是Python的版本號要一致。比如七冲,我安裝的是Python2.7痛倚,則自然應(yīng)當(dāng)安裝Mercurial For Python2.7。另外一點位數(shù)要一致癞埠。比如状原,安裝的Python是32位的,那么Mercurial For Python就一定要用32位的版本苗踪,而不能用64位的版本颠区。在安裝Mercurial For Python時,會自動檢測Python的安裝位置通铲。如果沒有檢測到毕莱,那就一定有哪里弄錯了。這里其實蘊含了另外一個注意點颅夺,那就是:必須先安裝Python朋截,再安裝Mercurial For Python。
- XAMPP:XAMPP是一個非常牛逼的軟件吧黄,其含義是Apache+MariaDB+PHP+Perl部服。感覺是用來建站的超級軟件。這里用XAMPP拗慨,其實只用了里面的Apache服務(wù)而已廓八。
注意事項
- 最好是使用沒有空格的路徑!例如
c:\Program Files
這樣的路徑最好不要用赵抢,不然可能出現(xiàn)亂七八糟的錯誤剧蹂。 - 在配置文件中路徑使用“/” 或者使用”\”,例如
D:\\xampp\\htdocs
倉庫的倉庫
在服務(wù)器上烦却,要存放的倉庫肯定不止一個宠叼,有各個項目組的不同項目。但是為了方便管理其爵,請將所有的水銀倉庫都放在一個共同的文件夾中冒冬,這個文件夾,就可以被看成是倉庫的倉庫了摩渺。
我的倉庫的倉庫的路徑是D:\Development
窄驹。
配置hgwebdir.cgi
在xampp安裝目錄htdocs下,建立一個hg文件夾
<xampp install>\htdocs\hg
在hg目錄下证逻,建立一個hgwebdir.cgi文件乐埠,把下面的內(nèi)容拷貝進(jìn)去
#!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那一行給出了我們將要創(chuàng)建的另外一個配置文件的路徑。換成你自己的龙宏。
- 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]下面的其它一些應(yīng)該是全局設(shè)置,它與每個倉庫內(nèi)的hgrc(倉庫設(shè)置)之間的關(guān)系如何蛙讥,我目前還不清楚锯蛀。
配置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>
具體含義暫不清楚次慢。
現(xiàn)在即可以重啟apache服務(wù)旁涤,重啟后,通過http://localhost/hg/訪問迫像。接下來是添加用戶和用戶的權(quán)限管理劈愚。
用htpasswd.exe建立用戶密碼文件
htpasswd.exe在apache的bin目錄可以找到,使用方法主要有
htpasswd -c 文件名 用戶名 //參數(shù)-c創(chuàng)建密碼文件闻妓,輸入后會提示你輸入密碼
htpasswd 文件名 用戶名 //如果用戶名一樣會更新密碼
舉個例子菌羽,我現(xiàn)在要建兩個用戶
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的網(wǎng)頁犁功?會提示你輸入用戶名和密碼氓轰。
針對某些項目的權(quán)限設(shè)置
在服務(wù)器存放項目的文件中,在.hg目錄新建一個hgrc文件浸卦,里面可以配置為
[web]
push_ssl = False
allow_pull = xingzhi, yian
allow_push = xingzhi, yian
allow_read = xingzhi, yian
好了署鸡,現(xiàn)在呢,你要做的就是在每一個倉庫中限嫌,規(guī)定哪些人有讀的權(quán)限靴庆,哪些人有push和pull的權(quán)限就可以了。