无法在 bash 中获得正确的 git 分支名称

Unable to get right git branch name in bash

我正在处理我的 git 服务器的 post-接收,以便它自动将我网站的最新版本上传到以提交所在的分支命名的文件夹中,但是以某种方式执行此代码无法按预期工作。

我的值分支以某种方式获取了所有分支的值,而不是我试图获取的分支的值。 Hash 确实得到了正确的哈希码。我已经在程序之外对其进行了测试,当我输入正确的散列时分支也是如此。我在这个程序中使用了错误的语法吗?

#!/bin/sh
hash=$(git log -n 1 --pretty=format:"%h")
branch=$(git branch --contains $(git log -n 1 --pretty=format:"%H"))
if [ branch ]
then
    GIT_WORK_TREE="/data/site/'$branch'"
    echo "/data/site/'$branch'"
    git checkout -f $branch
fi

好的,我让它按我想要的方式工作!在听说 post-receive got refname as stdin 后,发现我必须 trim down refname 才能只获取分支名称并想出这段代码。谢谢你们。 :)

#!/bin/sh
while read oldrev newrev refname
do
    branch=${refname##*/}
    if [ branch ]
    then
        path="/data/site/$branch"
        mkdir $path
        unset GIT_INDEX_FILE
        export GIT_WORK_TREE=$path
        git checkout -f $refname
        echo "Successfully pushed to $path"
    fi
done