2009-06-18 98 views

回答

26

如果这些钩子的人会不会做,我会很惊讶

http://schacon.github.com/git/githooks.html

也许这一个:

结账后

这个钩子被调用时, git-checkout在 更新工作树之后运行。钩 给出三个参数: 先前HEAD的裁判,新HEAD (其可以或可以不改变)的裁判, 和一个标志,它指示 结帐是否是分支结帐 (改变分支,flag = 1)或文件 签出(从 索引中检索文件,flag = 0)。这个钩子不能 影响git-checkout的结果。

23

一个Git钩子放在你的仓库的特殊位置的脚本,该位置是:

的.git /挂钩

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

签出后执行的挂钩为post-checkout。从文档:

...钩子给出三个参数...

例子:

  1. 创建挂钩(脚本):

    touch .git/hooks/post-checkout 
    chmod u+x .git/hooks/post-checkout 
    
  2. 钩样本内容:

#!/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` 

注意:第一行的家当表明脚本的类型。

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

+0

你知道有什么方法可以判断这是否是分支创建检出(除了查看新的HEAD的reflog)吗? – pkoch 2014-01-17 22:55:30

+0

似乎这将是一个好主意,你问一个全新的问题。如果你这样做,给我链接,我会看看我是否可以帮忙。你试图解决什么问题? – givanse 2014-01-18 14:16:23

1

post-checkouthook接收三个参数:

  1. 参考先前HEAD的
  2. 新HEAD的
  3. 这是否是一个文件签(0)或分支结帐(1

您可以使用从当前HEAD创建的分支对参数1和2具有相同值的事实。

cat > .git/hooks/post-checkout <<"EOF" 
if [ "$3" == "0" ]; then exit; fi 
if [ "$1" == "$2" ]; then 
    echo "New branch created. (Probably)." 
fi 
EOF 

chmod u+x .git/hooks/post-checkout 

限制:

  • 检出的现有分支这恰好是在相同的HEAD作为当前HEAD会欺骗它。
  • 创建新分支而不是将不会被检测到。
4

与其他类似,但验证分支已经签出一次。

#!/bin/bash 

# this is a file checkout – do nothing 
if [ "$3" == "0" ]; then exit; fi 

BRANCH_NAME=$(git symbolic-ref --short -q HEAD) 
NUM_CHECKOUTS=`git reflog --date=local | grep -o ${BRANCH_NAME} | wc -l` 

#if the refs of the previous and new heads are the same 
#AND the number of checkouts equals one, a new branch has been created 
if [ "$1" == "$2" ] && [ ${NUM_CHECKOUTS} -eq 1 ]; then 
    git push origin ${BRANCH_NAME} 
fi 
相关问题