2009-01-09 64 views
201

我們希望製作一些我們都可以共享的基本鉤子腳本 - 例如預格式化提交消息等。 Git的鉤子腳本通常存儲在<project>/.git/hooks/之下。但是,這些腳本不會在人們進行克隆時傳播,並且它們不受版本控制。Git鉤子腳本可以與存儲庫一起管理嗎?

有沒有一種方法可以幫助每個人獲得正確的鉤子腳本?我可以讓這些鉤子腳本指向我的回購中的版本控制腳本嗎?

+1

一個很好的問題。我只希望有更好的答案(不要抱怨@mipadi,我只希望git有辦法以更自動的方式做到這一點 - 即使只有指定給git clone的選項。) – lindes 2011-02-08 05:43:50

+0

我同意,@ lindes!但是也許會限制這種有意識的分享?我想,事情會讓Windows用戶感到混亂。 – kristianlm 2011-09-21 11:21:34

+0

@ kristianlm:有時候有各種各樣的原因可能會讓人覺得混亂......還有一些時候它很適合那裏。我只是希望有一些選擇或一些可以複製鉤子的東西。我想我只需要在某個時候檢查一下git-core代碼,然後創建一個補丁。 :)(或者希望別人會......或者在[mipadi的回答](http://stackoverflow.com/a/427269/313756)或其他方法中使用解決方法) – lindes 2012-01-15 05:09:47

回答

105

從理論上講,您可以使用所有腳本在您的項目目錄中創建一個hooks目錄(或任何您喜歡的名稱),然後在.git/hooks中對它們進行符號鏈接。當然,每個克隆回購的人都必須設置這些符號鏈接(儘管你可能會非常喜歡並且有一個部署腳本,克隆人可以運行它們來半自動地設置它們)。

2

git-hooks怎麼樣,它的路徑.git/hooks調用到項目目錄下的腳本githooks

還有很多功能可以使您儘可能減少複製和符號鏈接鉤到處。

2

如果您的項目是一個JavaScript項目,並且您使用npm作爲包管理器,則可以使用shared-git-hooksnpm install上強制執行githook。

99

Git 2.9中, 配置選項core.hooksPath指定了自定義掛鉤目錄。

將您的掛鉤移至存儲庫中的hooks跟蹤目錄。然後,庫的配置每個實例使用跟蹤hooks而不是$GIT_DIR/hooks

git config core.hooksPath hooks 

一般而言,路徑可以是絕對的,或相對於在鉤運行目錄(通常工作樹根;請參見man githooks的說明部分)。

1

pre-commit使預先提交鉤子變得很容易。不回答OP關於管理任何任意git鉤子的問題,但預先提交鉤子可能是最常用於代碼質量目的的。

0

我們正在使用Visual Studio解決方案(以及項目),這些解決方案具有構建事件前後的事件。我添加了一個名爲'GitHookDeployer'的項目。項目自我修改後構建事件中的文件。該文件被設置爲複製到構建目錄。因此這個項目每次都會建立,永遠不會被跳過。在構建事件中,它還確保所有git鉤子都已到位。

請注意,這不是一個通用的解決方案,因爲有些項目當然沒有任何東西需要構建。

相關問題