git - 在 Git 中 checkout 新分支后,有没有办法触发钩子(Hook)?

标签 git githooks

有没有办法在 Git checkout 新分支后触发钩子(Hook)?

最佳答案

一个 git hook 是一个脚本,放在你的仓库的一个特殊位置,那个位置是:

.git/hooks

脚本可以是您可以在您的环境中执行的任何类型,即 bash、python、ruby 等。

checkout 后执行的 Hook 是 post-checkout .来自文档:

...The hook is given three parameters...

示例:

  1. 创建 Hook (脚本):

    touch .git/hooks/post-checkout
    chmod u+x .git/hooks/post-checkout
    
  2. Hook示例内容:

#!/bin/bash                                                                      

set -e                                                                           

printf '\npost-checkout hook\n\n'                                                

prevHEAD=$1                                                                      
newHEAD=$2                                                                       
checkoutType=$3                                                                  

[[ $checkoutType == 1 ]] && checkoutType='branch' ||                             
                            checkoutType='file' ;                                

echo 'Checkout type: '$checkoutType                                              
echo '    prev HEAD: '`git name-rev --name-only $prevHEAD`                       
echo '     new HEAD: '`git name-rev --name-only $newHEAD`

注意:第一行的shebang表示脚本的类型。

这个脚本(git hook)只会捕获传递的三个参数,并以人性化的格式打印它们。

关于git - 在 Git 中 checkout 新分支后,有没有办法触发钩子(Hook)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011557/

相关文章:

git - 使用预提交 Hook 在提交前修改文件

git - .gitignore 不会忽略一个文件夹

git - commit --amend 和 reset --soft 有什么区别

git mergetool 告诉 "No files need merging"而不是冲突的文件

git - 我可以连同提交一起发送带外数据吗?

预提交 Hook 中的 git stash 在第一次提交时失败

php - Phabricator 中的提交钩子(Hook)没有 PHABRICATOR_ENV 并尝试在没有密码的情况下以 root 身份登录 mysql

Git:分支之间向上/向下方向的定义感觉违反直觉

git - 将 git checkout 中的子模块包含到钩子(Hook)中的 GIT_WORK_TREE

git - 如何远程触发 Jenkins 多分支管道项目构建?