<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    SVN-鉤子祥解

    Posted on 2010-10-14 10:21 幻海藍夢 閱讀(7447) 評論(0)  編輯  收藏 所屬分類: 版本管理
    鉤子腳本的具體寫法就是操作系統中shell腳本程序的寫法,請根據自己SVN所在的操作系統和shell程序進行相應的寫作


    所謂鉤子就是與一些版本庫事件觸發的程序,例如新修訂版本的創建,或是未版本化屬性的修改。每個鉤子都會被告知足夠多的信息,包括那是什么事件,所操作的對象,和觸發事件的用戶名。通過鉤子的輸出或返回狀態,鉤子程序能讓工作繼續、停止或是以某種方式掛起。

    默認情況下,鉤子的子目錄中包含各種版本庫鉤子模板。

    $ ls repos/hooks/
    post-commit.tmpl          pre-revprop-change.tmpl
    post-revprop-change.tmpl start-commit.tmpl
    pre-commit.tmpl         

    對每種Subversion版本庫支持的鉤子的都有一個模板,通過查看這些腳本的內容,你能看到是什么事件觸發了腳本及如何給傳腳本傳遞數據。同時,這些模版也是如何使用這些腳本,結合Subversion支持的工具來完成有用任務的例子。要實際安裝一個可用的鉤子,你需要在 repos/hooks目錄下安裝一些與鉤子同名(如 start-commit或者post-commit)的可執行程序或腳本。


    提示
    由于安全原因,Subversion版本庫在一個空環境中執行鉤子腳本—就是沒有任何環境變量,甚至沒有$PATH或%PATH%。由于這個原因,許多管理員會感到很困惑,它們的鉤子腳本手工運行時正常,可在Subversion中卻不能運行。要注意,必須在你的鉤子中設置好環境變量或為你的程序指定好絕對路徑。

    目前Subversion有已實現了五種鉤子:

    start-commit.bat
    它在提交事務產生前已運行,通常用來判定一個用戶是否有權提交。版本庫傳給該程序兩個參數:到版本庫的路徑,和要進行提交的用戶名。如果程序返回一個非零值,會在事務產生前停止該提交操作。如果鉤子程序要在stderr中寫入數據,它將排隊送至客戶端。

    pre-commit.bat
    在事務完成提交之前運行,通常這個鉤子是用來保護因為內容或位置(例如,你要求所有到一個特定分支的提交必須包括一個bug追蹤的ticket號,或者是要求日志信息不為空)而不允許的提交。版本庫傳遞兩個參數到程序:版本庫的路徑和正在提交的事務名稱,如果程序返回非零值,提交會失敗,事務也會刪除。如果鉤子程序在stderr中寫入了數據,也會傳遞到客戶端。

    Subversion的分發版本包括了一些訪問控制腳本(在Subversion源文件目錄樹的tools/hook-scripts目錄),可以用來被pre-commit調用來實現精密的寫訪問控制。另一個選擇是使用Apache的httpd模塊mod_authz_svn,可以對單個目錄進行讀寫訪問控制(見“每目錄訪問控制”一節)。在未來的Subversion版本中,我們計劃直接在文件系統中實現訪問控制列表(ACL)。

    post-commit.bat
    它在事務完成后運行,創建一個新的修訂版本。大多數人用這個鉤子來發送關于提交的描述性電子郵件,或者作為版本庫的備份。版本庫傳給程序兩個參數:到版本庫的路徑和被創建的新的修訂版本號。退出程序會被忽略。

    Subversion分發版本中包括mailer.py和commit-email.pl腳本(存于Subversion源代碼樹中的 tools/hook-scripts/目錄中)可以用來發送描述給定提交的email(并且或只是追加到一個日志文件),這個mail包含變化的路徑清單,提交的日志信息、日期和作者以及修改文件的GNU區別樣式輸出。

    Subversion提供的另一個有用的工具是hot-backup.py腳本(在Subversion源代碼樹中的tools/backup/目錄中)。這個腳本可以為Subversion版本庫進行熱備份(Berkeley DB數據庫后端支持的一種特性),可以制作版本庫每次提交的快照作為歸檔和緊急情況的備份。

    pre-revprop-change.bat
    因為Subversion的修訂版本屬性不是版本化的,對這類屬性的修改(例如提交日志屬性 svn:log)將會永久覆蓋以前的屬性值。因為數據在此可能丟失,所以Subversion提供了這種鉤子(及與之對應的post-revprop- change),因此版本庫管理員可用一些外部方法記錄變化。作為對丟失未版本化屬性數據的防范,Subversion客戶端不能遠程修改修訂版本屬性,除非為你的版本庫實現這個鉤子。

    這個鉤子在對版本庫進行這種修改時才會運行,版本庫給鉤子傳遞四個參數:到版本庫的路徑,要修改屬性的修訂版本,經過認證的用戶名和屬性自身的名字。

    post-revprop-change.bat
    我們在前面提到過,這個鉤子與pre-revprop-change對應。事實上,因為多疑的原因,只有存在pre-revprop-change時這個腳本才會執行。當這兩個鉤子都存在時,post-revprop-change在修訂版本屬性被改變之后運行,通常用來發送包含新屬性的email。版本庫傳遞四個參數給該鉤子:到版本庫的路徑,屬性存在的修訂版本,經過校驗的產生變化的用戶名,和屬性自身的名字。

    Subversion分發版本中包含propchange-email.pl腳本(在Subversion源代碼樹中的tools/hook- scripts/目錄中),可以用來發送修訂版本屬性修改細節的email(并且或只是追加到一個日志文件)。這個email包含修訂版本和發生變化的屬性名,作出修改的用戶和新屬性值。

    警告

    不要嘗試用鉤子腳本修改事務。一個常見的例子就是在提交時自動設置svn:eol-style或svn:mime-type這類屬性。這看起來是個好主意,但它會引起問題。主要的問題是客戶并不知道由鉤子腳本進行的修改,同時沒有辦法通告客戶它的數據是過時的,這種矛盾會導致出人意料和不能預測的行為。

    作為嘗試修改事務的替代,我們通過檢查pre-commit鉤子的事務,在不滿足要求時拒絕提交。
    Subversion會試圖以當前訪問版本庫的用戶身份執行鉤子。通常,對版本庫的訪問總是通過Apache HTTP服務器和mod_dav_svn進行,因此,執行鉤子的用戶就是運行Apache的用戶。鉤子本身需要具有操作系統級的訪問許可,用戶可以運行它。另外,其它被鉤子直接或間接使用的文件或程序(包括Subversion版本庫本身)也要被同一個用戶訪問。換句話說,要注意潛在的訪問控制問題,它可能會讓你的鉤子無法按照你的目的順利執行
    原文:http://hi.baidu.com/gacmotor/blog/item/da499e2b4f65fa25d42af192.html
    主站蜘蛛池模板: 亚洲人成图片网站| 亚洲电影免费观看| 老司机午夜性生免费福利 | 亚洲五月午夜免费在线视频| 国产亚洲综合久久| 国产又黄又爽又刺激的免费网址 | 午夜毛片不卡免费观看视频| 中文字幕 亚洲 有码 在线 | 一个人在线观看视频免费| 91亚洲国产在人线播放午夜| 18成禁人视频免费网站| 亚洲午夜国产精品| 成人a免费α片在线视频网站 | 99在线免费视频| 亚洲激情在线视频| 一二三四在线播放免费观看中文版视频| 亚洲国产美女福利直播秀一区二区| 免费人成网站在线观看10分钟| 亚洲永久在线观看| 国产精品va无码免费麻豆| 久青草国产免费观看| 久久精品亚洲日本佐佐木明希| 特级做A爰片毛片免费69| 香蕉视频在线观看免费| 亚洲人成网亚洲欧洲无码久久| 午夜免费福利视频| 亚洲色丰满少妇高潮18p| 久久国产成人精品国产成人亚洲| 国产成人免费AV在线播放 | 午夜影视日本亚洲欧洲精品一区| 免费能直接在线观看黄的视频| 亚洲国产精品无码久久| 久久亚洲色一区二区三区| 最近中文字幕完整免费视频ww| 亚洲色偷偷色噜噜狠狠99| 亚洲综合AV在线在线播放| 波多野结衣在线免费视频| 大片免费观看92在线视频线视频| 亚洲av永久无码制服河南实里| 女性自慰aⅴ片高清免费| 中国一级特黄高清免费的大片中国一级黄色片 |