重新激活 Apache后,如果有人要訪問SVN服務(wù)器,系統(tǒng)會要求他輸入用戶名和密碼。 只有輸入Sally 或Harry的用戶名和相應(yīng)的密碼,才可以對檔案庫進行修改和訪問
服務(wù)器以svnserve方式運行
默認下客戶可以以匿名方式通過svn://方式任意訪問檔案庫,為了限制其權(quán)限,比如只允許讀操作,可以通過修改檔案庫conf子目錄中的svnseve.conf文件來實現(xiàn)。
#vi /home/mysvn/conf/svnseve.conf
修改[general]字段下內(nèi)容為:
anon-access = read
如果設(shè)為anon-access = none,則匿名用戶不可以通過svn://方式訪問檔案庫
為了實現(xiàn)用戶認證,我們一般采用svn+ssh://訪問機制。
首先在svnseve.conf文件設(shè)置anon-access = none禁止匿名用戶通過svn://方式訪問檔案庫,然后在其后加入
auth-access = write
auth-access 是限制有援權(quán)的使用者(使用svn+ssh:// 來登入) 的存取權(quán)限,我們設(shè)為是可以讀寫。
當用戶通過svn+ssh://訪問時,服務(wù)器會自動激活ssh認證機制,要求用戶輸入密碼,對于window用戶來說還需要安裝第三方軟件openssh,才可以采用這種機制
Hook scripts
掛勾 (hook) 是改動檔案庫時所觸發(fā)的程序, 比如當你提交更動前,會先觸發(fā)pre-commit,提交更動后,則會觸發(fā)post-commit,我們可以利用hook來實現(xiàn)一些自動控制。檔案庫的hook 子目錄中, 預(yù)設(shè)是放置各個檔案庫掛勾的模板:
post-commit.tmpl
pre-revprop-change.tmpl
post-revprop-change.tmpl
start-commit.tmpl
pre-commit.tmpl
如果要使用這些hook,必須把它的后綴名.tmpl去掉,拷貝為
post-commit
pre-revprop-change
post-revprop-change
start-commit
pre-commit
這里主要介紹pre-commit和post-commit(事實上它們是在特定的情況下被觸發(fā)的普通的shell程序,至于shell的內(nèi)容由用戶自己隨意編寫,但是要保證名稱不能改動)
pre-commit
本掛勾執(zhí)行的時間為異動完成之后, 送交之前.檔案庫會傳遞兩個自變量給這個程序: 檔案庫的路徑, 以及準備送交的異動名稱. 如果程序傳回一個非零的結(jié)束值, 送交會被中止, 而異動會被刪除.
如何應(yīng)用pre-commit我們不妨舉個例子:
假如有一個項目由Mail Team,Login Team和PHP Team三個Team共同通過SVN系統(tǒng)開發(fā)完成。當項目準備發(fā)布的時候,PM人員發(fā)現(xiàn)Mail功能方面存在一些 bug,需要Mail Team去修改,為了防止其它Team的人員修改系統(tǒng),我們可以在任何改動檔案庫的企圖之前用pre-commit去檢查log message信息,(因為任何更動檔案庫的操作都必須提供log message信息,PM可以事先輿Mail Team約定好一個log message),如果輿pre-commit中設(shè)定的log message不相符,則不能提交更動。
pre-commit源程序如下:
#!/bin/sh
REPOS=""
TXN=""
SVNLOOK=/usr/local/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" |
grep –w "bug1234" > /dev/null || exit 1
exit 0
本例中的log message為”bug1234”,任何人想要提交更動必須用 –m “bug1234”參數(shù),采用-m “bug123”,-m “bug12345”都會提交失敗。
post-commit
本掛勾執(zhí)行的時間是在異動送交, 新修訂版被建立之后. 大多數(shù)的人用這個掛勾來寄出關(guān)于本次送交的電子郵件, 或是建立檔案庫的備份. 檔案庫會傳遞兩個自變量給這個程序: 檔案庫的路徑, 以及新建立的修訂版號. 本程序的結(jié)束碼會被忽略.
Subversion 源碼樹的 tools/hook-script 目錄中包含了一個 commit-email.pl 命令,可以用來寄送包含描述指定送交的電子郵件. 這個郵件包含了更動路徑列表, 該送交所對應(yīng)的記錄訊息, 使用者, 送交的日期,以及一個以 GNU diff 樣式表示的本次更動差異. 我們可以將這個程序輿post-commit這個hook搭配起來使用來實現(xiàn)檔案庫更動后自動mail給相關(guān)人員的功能。
post-commit源程序如下:
#!/bin/sh
REPOS=""
REV=""
commit-email.pl "$REPOS" "$REV" PM@yourdomain.com
##需要指明commit-email.pl的路徑
特殊性質(zhì)
除了對你的目錄與檔案進行版本控制之外, Subversion 還提供了一個接口, 可用來新增, 修改, 以及移除已納入版本控制的目錄與檔案的版本控制描述資料. 我們稱這個描述資料為性質(zhì),在這里我主要介紹以下幾個比較重要的特殊性質(zhì)
svn:mime-type
svn:mime-type 性質(zhì)在 Subversion 中有很多作用. 除了作為儲存檔案的多用途網(wǎng)際網(wǎng)絡(luò)郵件延伸語法 (MIME) 分類之外, 這個性質(zhì)的內(nèi)容還會決定幾項 Subversion 的行為特征.
舉個例子, 如果 svn:mime-type 性質(zhì)設(shè)為文字的 MIME 類別 , Subversion 會假設(shè)該檔的內(nèi)容是二進制(也是人類看不懂的資料). Subversion 提供的功能中, 其中一項是在從服務(wù)器收到工作檔的更新中, 依文字內(nèi)容與文字列進行合并. 但是對含有二進制資料的檔案, 根本沒有 “文字列” 的概念. 因此, Subversion 對這些檔案在更新時, 不會試著進行內(nèi)文合并. 它改用另一種方式。
一般來說Subversion 在執(zhí)行 svn import 與 svn add 子命令時, 會使用二進制偵測運算法的方式來協(xié)助使用者.但是如果 Subversion 猜錯了, 或是你希望將 svn:mime-type 設(shè)定成更為明確的值(可能是 image/png)你都可以移除或是手動編輯這個性質(zhì).
svn:ignore
svn:ignore 性質(zhì)包含了檔案樣式的列表, Subversion 處理時會忽略. 它可以與執(zhí)行時期設(shè)定的 global-ignores 選項一起工作, 以便在類似 svn status 的命令中過濾掉未納入版本控制的目錄與檔案.
我們知道新增的文件和目錄必須透過 svn add 命令, 才會被納入 Subversion 的管理. svn status 命令會將工作復(fù)本中未納入版控制目錄與檔案顯示出來.
$ svn status calc
M calc/button.c
? calc/calculator
? calc/data.c
? calc/debug_log
? calc/debug_log.1
在這個范例中, 用?標注出來的文件是未納入版控制的檔案.如果你不想每次執(zhí)行 svn status 時, 都看到這些檔案, 那幺svn:ignore 性質(zhì)是解決方案。你可以透過 svn propedit svn:ignore calc 對 calc 目錄加上一些忽略樣式. 舉個例子,將以下的值作為 svn:ignore 性質(zhì)的新內(nèi)容:
calculator
debug_log*
加上這個性質(zhì)后再執(zhí)行你的 svn status 輸出便會不同:
$ svn status
M calc
M calc/button.c
? calc/data.c
現(xiàn)在, 所有不想看到的東西都從輸出中消失了!