在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的權限就可以了。