Not able to detect branch from Git post-receive hook

与世无争的帅哥 提交于 2019-12-04 07:48:51

问题


I've got a post receive hook setup on the remote repo that tries to determine the branch name of the incoming push as follows:

$branch = `git rev-parse --abbrev-ref HEAD`

What i'm finding, though, is that no matter what branch I push from my $branch variable gets set with 'master'.

Any ideas?


回答1:


The post-receive hook gets the same data as the pre-receive and not as arguments, but from stdin. The following is sent for all refs:

oldRev (space) newRev (space) refName (Line feed)

You could parse out the ref name with this bash script:

while read oldrev newrev ref
do
    echo "$ref"
done



回答2:


You could also do something like this using bash variable substitution:

read oldrev newrev ref

branchname=${ref#refs/heads/}

git checkout ${branchname}



回答3:


Magnus' solution didnt work for me, but this did:

#!/bin/bash

echo "determining branch"

if ! [ -t 0 ]; then
  read -a ref
fi

IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"

if [ "master" == "$branch" ]; then
  echo 'master was pushed'
fi

if [ "staging" == "$branch" ]; then
  echo 'staging was pushed'
fi

echo "done"



回答4:


Both these answers are correct, but I was having trouble getting stdin to the next common function post-receive-email. Here is what I ended up with:

read oldrev newrev ref
echo "$oldrev" "$newrev" "$ref" | . /usr/share/git-core/contrib/hooks/post-receive-email


if [ "refs/heads/qa" == "$ref" ]; then
  # Big Tuna YO!
  wget -q -O - --connect-timeout=2 http://127.0.0.1:3000/hooks/build/qa_now
fi



回答5:


You need to read the arguments that are being passed to the script. That should have the branch name and new and old revisions and run for each branch pushed



来源:https://stackoverflow.com/questions/5973795/not-able-to-detect-branch-from-git-post-receive-hook

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!