「Git」:修訂間差異

出自Gea-Suan Lin's Wiki
跳至導覽 跳至搜尋
Gslin留言 | 貢獻
Gslin留言 | 貢獻
 
(未顯示同一使用者於中間所作的 5 次修訂)
第7行: 第7行:
=== 範例 ===
=== 範例 ===


禁止在<code>develop</code>下直接commit,在<code>.git/hooks/pre-commit</code>:
禁止在<code>develop</code>下直接commit,在<code>.git/hooks/pre-commit</code>裡面設定


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
第18行: 第18行:
</syntaxhighlight>
</syntaxhighlight>


禁止<code>develop</code>從其他branch rebase更新,但允許<code>origin/develop</code>,在<code>.git/hooks/pre-rebase</code>:
禁止<code>develop</code>從其他branch rebase更新,但允許<code>origin/develop</code>,在<code>.git/hooks/pre-rebase</code>裡面設定


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
第38行: 第38行:


=== Global ===
=== 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>


== 外部連結 ==
== 外部連結 ==

於 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

外部連結