有兩種類型的鉤子:
>客戶端 - 這些在開發人員的系統上運行
>服務器端 - 這些運行在託管Git存儲庫的服務器上
在該目錄中,您會看到類似的內容:
>我們將重點關注在允許提交之前運行的前簽名掛鉤。
示例鉤子:驗證PHP語法<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>
>我們將以一個非常簡單的掛鉤開始,用bash編寫,該掛鉤驗證所犯下的php代碼具有有效的語法。這是為了防止“快速”但破裂的提交發生。當然,我勸阻幾乎沒有測試的“簡單提交”,但這並不意味著它們不會發生。
>applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sample
>
<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>
>您可以使用自己喜歡的編輯器開始寫作。首先,我們需要Shebang。我最喜歡的方法是使用/usr/bin/env,因為這使用了我們想要的應用程序的正確路徑,而不是硬編碼且可能是無效的路徑。目前,我們將不斷失敗,以便我們可以輕鬆測試。
>applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sample
#Always Fail Line上方,我們可以使用以下內容來修改所有PHP文件:
>說明:
<span>cd .git/hooks </span><span>touch pre-commit </span><span>chmod +x pre-commit</span>
> php_files =在沒有定界符的情況下完成bash分配,但請注意,引用變量需要$ deLimiter
這似乎有些奇怪,但是! php -l“ $ i”(請注意避免空間問題的引號)實際上是在檢查0的返回值為0,而不是true或我們通常在其他語言中期望的任何值。僅供參考,大約等效的PHP代碼將是:
<span>#!/usr/bin/env bash </span><span># Hook that checks PHP syntax </span> <span># Override IFS so that spaces do not count as delimiters </span><span>old_ifs=$IFS </span><span><span>IFS</span>=$'<span title="\n">\n'</span> </span> <span># Always fail </span><span>exit 1</span>
>我使循環儘早退出了整個腳本,最終可能不是我們想要的。實際上,我們可能希望摘要要解決的問題,而不是必須繼續嘗試進行。任何人最終都會很容易感到沮喪,甚至可能學會使用git commits-不 - 驗證以完全繞過鉤子。
<span>php_files=<span>$(git status --short | grep -E '^(A|M)' | awk '{ print }' | grep -E '\.php$')</span></span>
因此,我們不要以php -L的錯誤退出,但我仍然想保持易於閱讀的內容:
>我進行了兩個不良修改,並嘗試進行提交的嘗試看起來像這樣:
<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>
要完成鉤子腳本,請在腳本底部刪除1個出口1。嘗試提交有效的PHP文件,並且應該按正常工作。
共享鉤子鉤子未與您的項目分發,也不能自動安裝它們。因此,您最好的行動是為您創建一個鉤子居住的地方(可能位於同一存儲庫中),並告訴您的合作者使用它們。如果您對他們來說很容易,那麼他們更有可能這樣做。
任何克隆您的項目的任何人都可以簡單地運行bash install-hooks.sh克隆後。
>applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sample
>
其他鉤子
[subproject] message
<span>cd .git/hooks </span><span>touch pre-commit </span><span>chmod +x pre-commit</span>
結論 git鉤是自動化項目工作流程的強大手段。您可以驗證代碼,提交消息,確保環境正確,還有很多。您使用Git鉤子有什麼有趣的東西嗎?在評論中讓我們知道!
><span>#!/usr/bin/env bash </span><span># Hook that checks PHP syntax </span> <span># Override IFS so that spaces do not count as delimiters </span><span>old_ifs=$IFS </span><span><span>IFS</span>=$'<span title="\n">\n'</span> </span> <span># Always fail </span><span>exit 1</span>
如何創建一個git掛鉤?
> git鉤可用於自動化開發工作流中的各種任務。例如,您可以在每個提交之前使用預製掛鉤自動運行測試或代碼上的襯裡。這樣可以確保僅測試和正確格式的代碼才能將其投入到存儲庫中。
默認情況下,當您克隆一個存儲庫時,不包括git掛鉤。這是因為它們存儲在.git目錄中,該目錄未版本化。但是,您可以通過將它們存儲在項目中的單獨目錄中,並創建一個腳本以將它們鏈接到.git/hooks中。
>>
以上是git鉤介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!