「Git」:修訂間差異
跳至導覽
跳至搜尋
無編輯摘要 |
|||
(未顯示同一使用者於中間所作的 9 次修訂) | |||
第3行: | 第3行: | ||
== Hook == | == Hook == | ||
Hook是針對某些行為的操作(通常包括了<code>pre-</code>以及<code>post-</code>),可以設計一些<code>pre-hook</code>在本地端擋住常見的錯誤行為。 | |||
=== 範例 === | |||
禁止在<code>develop</code>下直接commit,在<code>.git/hooks/pre-commit</code>裡面設定: | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | |||
if [[ "$(git rev-parse --abbrev-ref HEAD)" = "develop" ]]; then | |||
echo "You cannot commit directly to the develop branch." | |||
exit 1 | |||
fi | |||
</syntaxhighlight> | |||
禁止<code>develop</code>從其他branch rebase更新,但允許<code>origin/develop</code>,在<code>.git/hooks/pre-rebase</code>裡面設定: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
第20行: | 第35行: | ||
exit 1 | exit 1 | ||
fi | fi | ||
</syntaxhighlight> | |||
=== Global === | |||
可以在<code>.gitconfig</code>將整包專案設定自定義的<code>hooksPath</code>,把上面提到的hook files(像是<code>pre-commit</code>或是<code>pre-rebase</code>)放到指定的目錄就可以了: | |||
<syntaxhighlight lang="ini"> | |||
[core] | |||
hooksPath = ~/git/work/hooks | |||
</syntaxhighlight> | |||
除了全域設定以外,也可以搭配<code>includeIf</code>變成區域設定,只針對某些目錄下的專案使用特定的hook: | |||
<syntaxhighlight lang="ini"> | |||
[includeIf "gitdir:~/git/work"] | |||
path = ~/git/work/.gitconfig | |||
</syntaxhighlight> | </syntaxhighlight> | ||
於 2024年12月23日 (一) 08:47 的最新修訂
Git是一套版本控制系統(VCS)。
Hook
Hook是針對某些行為的操作(通常包括了pre-
以及post-
),可以設計一些pre-hook
在本地端擋住常見的錯誤行為。
範例
禁止在develop
下直接commit,在.git/hooks/pre-commit
裡面設定:
#!/bin/bash
if [[ "$(git rev-parse --abbrev-ref HEAD)" = "develop" ]]; then
echo "You cannot commit directly to the develop branch."
exit 1
fi
禁止develop
從其他branch rebase更新,但允許origin/develop
,在.git/hooks/pre-rebase
裡面設定:
#!/bin/bash
# $1: source branch.
# $2: destination branch (empty if it's current branch).
if [[ "$2" = "develop" || ( "$2" = "" && "$(git rev-parse --abbrev-ref HEAD)" = "develop" ) ]]; then
if [[ "$1" = "origin/develop" ]]; then
# OK
exit 0
fi
echo "You cannot rebase develop branch from branch other than origin/develop."
exit 1
fi
Global
可以在.gitconfig
將整包專案設定自定義的hooksPath
,把上面提到的hook files(像是pre-commit
或是pre-rebase
)放到指定的目錄就可以了:
[core]
hooksPath = ~/git/work/hooks
除了全域設定以外,也可以搭配includeIf
變成區域設定,只針對某些目錄下的專案使用特定的hook:
[includeIf "gitdir:~/git/work"]
path = ~/git/work/.gitconfig
外部連結
- 官方網站 {{en}