我正在.git/hooks/post-checkout
工作,无法获取/导出分支名称或获取先前的分支名称。我想在切换到s3
分支时重新启动服务器。
我无法弄清楚如何在bash中获取env var,所以我尝试使用git来获取前一个分支,但我得到的最接近的是git checkout -
/ git checkout @{-1}
,tho我不确定如何在没有结账的情况下检索先前的分支名称。
我应该使用Git env vars而不是shell吗?
#!/bin/bash
touch tmp/restart.txt
echo " *** restarting puma-dev"
current_branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
if [ "$current_branch" = "s3" ]
then
echo " *** please don't upload any files"
echo
fi
答案 0 :(得分:1)
Git将前一个和当前的引用名称传递给post-checkout
钩子,因此您应该可以执行以下操作:
#!/bin/sh
oldref="$1"
newref="$2"
branch_update="$3"
[ "$branch_update" = '1' ] || exit # exit if branch didn't change
[ "$oldref" = 'refs/heads/s3' ] && oldref_was_s3=1
[ "$newref" = 'refs/heads/s3' ] && newref_is_s3=1
if [ -z "$oldref_was_s3" -a -n "$newref_is_s3" ]; then
echo " *** please don't upload any files"
fi
完全没有经过测试,但它应该很接近。
答案 1 :(得分:1)
您应该可以使用此行来获取上一个分支名称:
git rev-parse --abbrev-ref @{-1}
并获取当前分支名称:
git rev-parse --abbrev-ref HEAD
答案 2 :(得分:0)
部分谢谢Chris,他的方法我无法解释或开始工作,但发现这些信息很有用,感谢Keif Kraken,他的方法让我发挥了作用。
更改到特定分支或从特定分支更改服务器时(s3)
.git/hooks/post-checkout
脚本
#!/bin/bash
oldref=$(git rev-parse --abbrev-ref @{-1})
newref=$(git rev-parse --abbrev-ref head)
if [[ ( "$oldref" = "s3" || "$newref" = "s3" ) && "$oldref" != "$newref" ]]
then
touch tmp/restart.txt
echo " *** restarting puma-dev"
echo " *** please don't upload any files"
fi