2010-02-20 51 views
0

在Subversion中,掛鉤是以每個存儲庫爲基礎編寫的。每個鉤子都以描述性文件名(例如預先提交)寫入存儲庫根目錄中名爲「鉤子」的文件夾中。根據BZR文檔,鉤子通常全局安裝(例如在〜/ .bazaar/plugins /目錄中)。如何在BZR中編寫特定於分支的鉤子?

是否有可能創建提交給分支的預提交鉤子,並且在用戶不需要安裝插件的情況下運行?

我在文檔和一些代碼討論中看到了一個名爲「分支鉤子」的引用,這聽起來很有希望。

我發現這個博客:http://schettino72.wordpress.com/2008/01/20/how-to-execute-tests-on-a-bazaar-pre-commit-hook/,它引述:

「在商場的插件沒有項目的具體 讓你在其中(分公司)的插件將 應用無法控制 項目(它會全部適用於 )。「

這是不太有前途的。該博客提供了一種解決方法,您可以編寫並安裝一個插件,該插件在存儲庫中調用存儲庫中的掛鉤。理想情況下,我不想依賴用戶安裝插件來運行一個真正基本的鉤子,即一個簡單的測試。這可能嗎?

回答

1

不,您的用戶必須安裝插件才能激活您的掛鉤。

2

我做了一些研究,發現這個背後缺乏分佈式版本控制系統的特定分支掛鉤的動機。作爲所需功能的一個例子,我將它與作爲集中式RCS的Subversion進行了比較。

GIT和Mercurial是分佈式的RCS(如Bazaar),它們具有鉤子工具,包括針對分支特定鉤子和全局鉤子的不同方法。無論如何,掛鉤不受版本控制,並且由於安全風險,它們要求分支的用戶啓用它們。在Mercurial documentation on hooks,在標題爲「鉤和安全性,」它說:

在水銀,鉤不可控修訂 和 你克隆不傳播時,或從一個倉庫拉。 其原因很簡單:掛鉤 是完全任意的 可執行代碼。它在您的計算機上以您的 用戶身份運行,您的權限級別爲 。

這將是任何 分佈式版本控制系統 極其魯莽實施修訂控制掛鉤, 因爲這將提供一個容易利用的 方式顛覆了 賬戶修訂 控制系統的用戶。

在一個像Subversion這樣的集中式RCS中,鉤子在倉庫服務器上運行,因此用戶權限和服務器設置限制了破壞性鉤子腳本的影響。在分佈式RCS中,鉤子通常在用戶的本地機器上運行,這是有風險的。

正如vitaly.v.ch所提到的,一個Bazaar服務器可以被設置爲在被推入和拉出時運行掛鉤。但是,預先提交的鉤子沒有意義,因爲提交發生在用戶的機器上。它會更像是一個預先推動的鉤子。

Bazaar具有所有需要的鉤子功能,但由於安全風險,安裝和啓用它們需要單獨的用戶配置。