Mercurial(Hg)之用戶權限管理

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容