在Git中检出新分支后,是否有办法触发钩子?在Git中检出新分支后,是否有办法触发钩子?
26
A
回答
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。从文档:
...钩子给出三个参数...
例子:
创建挂钩(脚本):
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
钩样本内容:
#!/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)将只捕获传递的三个参数并以人性化的格式打印它们。
1
的post-checkout
hook接收三个参数:
- 参考先前HEAD的 新HEAD的
- 价
- 这是否是一个文件签(
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
相关问题
- 1. 在更新后的钩子中查找Git分支名称
- 2. 父母重新装修后,是否有办法重新设定子分支?
- 3. Git:在检出新分支之前没有提交分支
- 4. Git钩子阻止从特定分支创建新分支
- 5. 无法从检测的Git分支后收到钩
- 6. Git服务器端钩子没有触发 - 如何检查
- 7. git钩子语法检查
- 8. 如何在git中检出最后一次检出的分支?
- 9. 预推Git挂钩以确定分支名称是否有效
- 10. 每个分支的Git提交钩子
- 11. Git钩子创建 - 你在一个分支尚未出生
- 12. 有没有办法输出以前的git分支名称?
- 13. 当SVN External更新时,是否有办法触发构建?
- 14. OCaml中是否支持“钩子”?
- 15. 检出远程git分支?
- 16. Git后更新钩 - 我可以处理“主”和“分支”?
- 17. 有没有办法阻止开发人员在git中创建任何分支?
- 18. 从GIT执行PHP后更新钩子
- 19. Jenkins构建不是用git post-receive钩子触发的
- 20. git rebase分支与所有子分支
- 21. git钩子(pre-commit,post-commit等)适用于所有分支吗?
- 22. 如何检查是否是从远程分支或本地分支在后结帐挂钩?
- 23. 有没有办法检查子进程是否仍在运行?
- 24. JavaScript:有没有办法检测用户是否触发了事件(而不是代码触发)?
- 25. 检查詹金斯Groovy脚本中是否存在Git分支
- 26. 获取TFS触发构建Git分支
- 27. 有没有办法使用github中的前/后提交挂钩来更新master的gh-pages分支?
- 28. Egit钩子没有被触发
- 29. 是否有可能在Robotframework中执行钩子后,像Ruby/Cucumber
- 30. 有没有办法在git分支存在时优雅地改变git分支的历史记录?
你知道有什么方法可以判断这是否是分支创建检出(除了查看新的HEAD的reflog)吗? – pkoch 2014-01-17 22:55:30
似乎这将是一个好主意,你问一个全新的问题。如果你这样做,给我链接,我会看看我是否可以帮忙。你试图解决什么问题? – givanse 2014-01-18 14:16:23