您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源配置管理工具 > SVN
關(guān)于Subversion系統(tǒng)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/21 14:31:54 ] 推薦標(biāo)簽:

重新激活 Apache后,如果有人要訪問SVN服務(wù)器,系統(tǒng)會(huì)要求他輸入用戶名和密碼。 只有輸入Sally 或Harry的用戶名和相應(yīng)的密碼,才可以對(duì)檔案庫(kù)進(jìn)行修改和訪問

服務(wù)器以svnserve方式運(yùn)行
默認(rèn)下客戶可以以匿名方式通過svn://方式任意訪問檔案庫(kù),為了限制其權(quán)限,比如只允許讀操作,可以通過修改檔案庫(kù)conf子目錄中的svnseve.conf文件來(lái)實(shí)現(xiàn)。
#vi /home/mysvn/conf/svnseve.conf
修改[general]字段下內(nèi)容為:
anon-access = read
如果設(shè)為anon-access = none,則匿名用戶不可以通過svn://方式訪問檔案庫(kù)
為了實(shí)現(xiàn)用戶認(rèn)證,我們一般采用svn+ssh://訪問機(jī)制。
首先在svnseve.conf文件設(shè)置anon-access = none禁止匿名用戶通過svn://方式訪問檔案庫(kù),然后在其后加入
auth-access = write
auth-access 是限制有援權(quán)的使用者(使用svn+ssh:// 來(lái)登入) 的存取權(quán)限,我們?cè)O(shè)為是可以讀寫。
當(dāng)用戶通過svn+ssh://訪問時(shí),服務(wù)器會(huì)自動(dòng)激活ssh認(rèn)證機(jī)制,要求用戶輸入密碼,對(duì)于window用戶來(lái)說(shuō)還需要安裝第三方軟件openssh,才可以采用這種機(jī)制
Hook scripts
掛勾 (hook) 是改動(dòng)檔案庫(kù)時(shí)所觸發(fā)的程序, 比如當(dāng)你提交更動(dòng)前,會(huì)先觸發(fā)pre-commit,提交更動(dòng)后,則會(huì)觸發(fā)post-commit,我們可以利用hook來(lái)實(shí)現(xiàn)一些自動(dòng)控制。檔案庫(kù)的hook 子目錄中, 預(yù)設(shè)是放置各個(gè)檔案庫(kù)掛勾的模板:
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(事實(shí)上它們是在特定的情況下被觸發(fā)的普通的shell程序,至于shell的內(nèi)容由用戶自己隨意編寫,但是要保證名稱不能改動(dòng))
pre-commit
本掛勾執(zhí)行的時(shí)間為異動(dòng)完成之后, 送交之前.檔案庫(kù)會(huì)傳遞兩個(gè)自變量給這個(gè)程序: 檔案庫(kù)的路徑, 以及準(zhǔn)備送交的異動(dòng)名稱. 如果程序傳回一個(gè)非零的結(jié)束值, 送交會(huì)被中止, 而異動(dòng)會(huì)被刪除.

如何應(yīng)用pre-commit我們不妨舉個(gè)例子:
假如有一個(gè)項(xiàng)目由Mail Team,Login Team和PHP Team三個(gè)Team共同通過SVN系統(tǒng)開發(fā)完成。當(dāng)項(xiàng)目準(zhǔn)備發(fā)布的時(shí)候,PM人員發(fā)現(xiàn)Mail功能方面存在一些 bug,需要Mail Team去修改,為了防止其它Team的人員修改系統(tǒng),我們可以在任何改動(dòng)檔案庫(kù)的企圖之前用pre-commit去檢查log message信息,(因?yàn)槿魏胃鼊?dòng)檔案庫(kù)的操作都必須提供log message信息,PM可以事先輿Mail Team約定好一個(gè)log message),如果輿pre-commit中設(shè)定的log message不相符,則不能提交更動(dòng)。
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”,任何人想要提交更動(dòng)必須用 –m “bug1234”參數(shù),采用-m “bug123”,-m “bug12345”都會(huì)提交失敗。
post-commit
本掛勾執(zhí)行的時(shí)間是在異動(dòng)送交, 新修訂版被建立之后. 大多數(shù)的人用這個(gè)掛勾來(lái)寄出關(guān)于本次送交的電子郵件, 或是建立檔案庫(kù)的備份. 檔案庫(kù)會(huì)傳遞兩個(gè)自變量給這個(gè)程序: 檔案庫(kù)的路徑, 以及新建立的修訂版號(hào). 本程序的結(jié)束碼會(huì)被忽略.

Subversion 源碼樹的 tools/hook-script 目錄中包含了一個(gè) commit-email.pl 命令,可以用來(lái)寄送包含描述指定送交的電子郵件. 這個(gè)郵件包含了更動(dòng)路徑列表, 該送交所對(duì)應(yīng)的記錄訊息, 使用者, 送交的日期,以及一個(gè)以 GNU diff 樣式表示的本次更動(dòng)差異. 我們可以將這個(gè)程序輿post-commit這個(gè)hook搭配起來(lái)使用來(lái)實(shí)現(xiàn)檔案庫(kù)更動(dòng)后自動(dòng)mail給相關(guān)人員的功能。
post-commit源程序如下:
#!/bin/sh
REPOS=""
REV=""
commit-email.pl "$REPOS" "$REV" PM@yourdomain.com
##需要指明commit-email.pl的路徑

特殊性質(zhì)

除了對(duì)你的目錄與檔案進(jìn)行版本控制之外, Subversion 還提供了一個(gè)接口, 可用來(lái)新增, 修改, 以及移除已納入版本控制的目錄與檔案的版本控制描述資料. 我們稱這個(gè)描述資料為性質(zhì),在這里我主要介紹以下幾個(gè)比較重要的特殊性質(zhì)
svn:mime-type
svn:mime-type 性質(zhì)在 Subversion 中有很多作用. 除了作為儲(chǔ)存檔案的多用途網(wǎng)際網(wǎng)絡(luò)郵件延伸語(yǔ)法 (MIME) 分類之外, 這個(gè)性質(zhì)的內(nèi)容還會(huì)決定幾項(xiàng) Subversion 的行為特征.
舉個(gè)例子, 如果 svn:mime-type 性質(zhì)設(shè)為文字的 MIME 類別 , Subversion 會(huì)假設(shè)該檔的內(nèi)容是二進(jìn)制(也是人類看不懂的資料). Subversion 提供的功能中, 其中一項(xiàng)是在從服務(wù)器收到工作檔的更新中, 依文字內(nèi)容與文字列進(jìn)行合并. 但是對(duì)含有二進(jìn)制資料的檔案, 根本沒有 “文字列” 的概念. 因此, Subversion 對(duì)這些檔案在更新時(shí), 不會(huì)試著進(jìn)行內(nèi)文合并. 它改用另一種方式。
一般來(lái)說(shuō)Subversion 在執(zhí)行 svn import 與 svn add 子命令時(shí), 會(huì)使用二進(jìn)制偵測(cè)運(yùn)算法的方式來(lái)協(xié)助使用者.但是如果 Subversion 猜錯(cuò)了, 或是你希望將 svn:mime-type 設(shè)定成更為明確的值(可能是 image/png)你都可以移除或是手動(dòng)編輯這個(gè)性質(zhì).
svn:ignore
svn:ignore 性質(zhì)包含了檔案樣式的列表, Subversion 處理時(shí)會(huì)忽略. 它可以與執(zhí)行時(shí)期設(shè)定的 global-ignores 選項(xiàng)一起工作, 以便在類似 svn status 的命令中過濾掉未納入版本控制的目錄與檔案.
我們知道新增的文件和目錄必須透過 svn add 命令, 才會(huì)被納入 Subversion 的管理. svn status 命令會(huì)將工作復(fù)本中未納入版控制目錄與檔案顯示出來(lái).
$ svn status calc
M     calc/button.c
?      calc/calculator
?      calc/data.c
?      calc/debug_log
?      calc/debug_log.1

在這個(gè)范例中, 用?標(biāo)注出來(lái)的文件是未納入版控制的檔案.如果你不想每次執(zhí)行 svn status 時(shí), 都看到這些檔案, 那幺svn:ignore 性質(zhì)是解決方案。你可以透過 svn propedit svn:ignore calc 對(duì) calc 目錄加上一些忽略樣式. 舉個(gè)例子,將以下的值作為 svn:ignore 性質(zhì)的新內(nèi)容:
calculator
debug_log*
加上這個(gè)性質(zhì)后再執(zhí)行你的 svn status 輸出便會(huì)不同:
$ svn status
M     calc
M     calc/button.c
?      calc/data.c
現(xiàn)在, 所有不想看到的東西都從輸出中消失了!

上一頁(yè)123下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd