Git 挂钩以获取先前的分支名称

Git hook to get prior branch name

我正在研究 .git/hooks/post-checkout,但在 sourcing/exporting 分支名称或获取先前的分支名称时遇到了问题。我想在 切换到或从 s3 分支 时重新启动服务器。

我不知道如何获取 bash 中的环境变量,所以我尝试使用 git 获取先前的分支,但我得到的最接近的是 git checkout - /git checkout @{-1},虽然我不确定如何在不调用结帐的情况下检索先前的分支名称。

我应该使用 Git 环境变量而不是 shell 吗?

当前文件只是在每次检出时重新启动服务器

#!/bin/bash

touch tmp/restart.txt
echo " *** restarting puma-dev"

current_branch=$(git branch | sed -n -e 's/^\* \(.*\)//p')
if [ "$current_branch" = "s3" ]
then
  echo " *** please don't upload any files"
  echo
fi

Git 将以前和当前的引用名称传递给 post-checkout 挂钩,因此您应该能够执行以下操作:

#!/bin/sh

oldref=""
newref=""
branch_update=""

[ "$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

完全未经测试,但应该接近。

你应该可以使用这一行来获取之前的分支名称:

git rev-parse --abbrev-ref @{-1}

并获取当前分支名称:

git rev-parse --abbrev-ref HEAD

部分感谢 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