获取先前分支名称的Git钩子

时间:2016-09-29 16:53:54

标签: git bash git-branch githooks

我正在.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

3 个答案:

答案 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