Git在post-checkout钩子中检测到我们正在创建一个新的分支

时间:2014-11-03 09:48:08

标签: git

我想在创建分支时在本地启动脚本。

我发现我必须使用post-checkout钩子并编写以下脚本:

#! /bin/sh
# update hook 
oldrev=$1
newrev=$2
type=$3
branch_name="$(git symbolic-ref HEAD 2>/dev/null)"
echo "branch is $branch_name"
echo "oldrev is $oldrev and newrev is $newrev" 

type_shortname(){
 type="branch"  
 shortname="$(git symbolic-ref HEAD --short)"
}

NULL_SHA1=0000000000000000000000000000000000000000
if test $type = 1;then 
 type_shortname
fi
echo $type
echo $shortname
case $oldrev,$newrev in
$NULL_SHA1,*) action=create;;
*,*);;
esac
action_meth()
{
    echo "create"
}
case $action,$type in
create,branch) action_meth;;
* );;
esac
exit 0

但是新的转速不是NULL_SHA1预期的,但完全相同的旧转速。从git文档看起来似乎合乎逻辑。然后action_meth()没有回声。

我的问题是如何检测我们正在移动的分支是一个新创建的分支(当使用更新钩子服务器端时,本地作为new rev == NULL_SHA的点似乎没问题。)< / p>

1 个答案:

答案 0 :(得分:0)

我想在创建分支后调用客户端post-checkout hook 这意味着它并不意味着检测分支创建。

然后你可以测试是否:

  • 是当前分支HEAD是2个分支(git branch --contains)
  • 的一部分
  • 其父提交是不是当前分支的一部分(这意味着当前分支只有一个提交,这可能表示新分支或至少创建了一个分支但不用于添加任何新分支提交)