簡體   English   中英

如何設置服務器端預接收鈎子?

[英]How to setup server side pre-receive hook?

我是 git hooks 和服務器端 git 功能的新手。 我在客戶端 git 上工作以提交和推送我的代碼,我們使用應用程序生命周期管理(ALM)工具進行 git merge。 我正在嘗試編寫 git hooks 來對存儲庫中的新文件/修改文件進行一些測試。 我能夠編寫和測試客戶端鈎子,比如pre-commit

現在,我需要在合並到 master 之前添加一些服務器端 git hook 來驗證文件,因為有一個更改可以使用-no-verify選項跳過客戶端驗證。 當我瀏覽一些 git hook 教程時, pre-push hook 是服務器端掛鈎。 我嘗試創建 pre-push hook,它正在客戶端工作。 現在,即使使用--no-verify選項(不應在客戶端控制),如何使其作為服務器端掛鈎並在用戶嘗試推送更改時強制驗證文件。

我的大問題是當我們從本地分支/倉庫執行git push時如何觸發服務器鈎子。

鈎子的創建:

創建了一個名為 pre-commit 的鈎子,並將它放在某個文件夾下git_hooks/pre-push.git/hooks/pre-push 現在,為我的預推送腳本創建了一個符號鏈接。 因此,每當我執行git push它都會觸發 .git/hooks/pre-push 這是我的腳本git_hooks/pre-push的符號鏈接

編輯:

我認為pre-pushpre-receive鈎子是一樣的,因為兩者都是在git push命令上觸發的,但是pre-push只在客戶端工作, pre-recieve在服務器端工作。 我創建了pre-receive hook 並將其推送到 master 分支。 現在,當我執行git push錯誤: cannot spawn hooks/pre-receive: No such file or directory

我正在WindowsLinux平台上嘗試這個。 在 Windows 上我收到這個錯誤,在 Linux 上它甚至沒有被觸發。 我在兩個平台的 master 分支上都放置了pre-receive hook。

您應該查看服務器端掛鈎文檔部分。

有三個鈎子可以讓你對 git push 過程的不同階段做出反應。

  • 預收
  • 更新
  • 收到后

當您推送到服務器時pre-receive觸發pre-receive鈎子。 然后對於您推送的每個分支,都會觸發update掛鈎。 當這些鈎子沒有錯誤地完成時,你的補丁就會被應用並觸發post-receive鈎子

關於pre-receive hook 的更詳細的DOC

當 git-receive-pack 對其存儲庫中的 git push 和更新引用做出反應時,該鈎子會被調用。 就在開始更新遠程存儲庫上的 refs 之前,會調用 pre-receive 鈎子。 它的退出狀態決定了更新的成功或失敗。

UPD

要設置pre-receive服務器端掛鈎,您應該將腳本放入服務器上的.git/hooks目錄中 並將其命名為pre-receive 就這些。
你不應該在你的倉庫中創建hooks目錄並提交它。 pre-receive腳本在 repo 之外

UPD
這是示例腳本:

#!/bin/bash


# check each branch being pushed

echo "pre-receive HOOK"

while read old_sha new_sha refname
do

if git diff "$old_sha" "$new_sha" | grep -qE '^\+(<<<<<<<|>>>>>>>)'; then
    echo "Saw a conflict marker in $(basename "$refname")."
    git diff "$old_sha" "$new_sha" | grep -nE '^\+(<<<<<<<|>>>>>>>)'
    exit 1
fi

if git diff "$old_sha" "$new_sha" | grep -qE '^\+.*\s+$'; then
    echo "Saw whitespaces at EOL."
    git diff "$old_sha" "$new_sha" | grep -nE '^\+.*\s+$'
    exit 1
fi

done

exit 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM