Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 无法在bash中获取正确的git分支名称_Linux_Git_Bash_Ubuntu Server - Fatal编程技术网

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

Linux 无法在bash中获取正确的git分支名称,linux,git,bash,ubuntu-server,Linux,Git,Bash,Ubuntu Server,我正在处理git服务器的post-receive,以便它自动将我网站的最新版本上传到一个以提交所在分支命名的文件夹中,但不知何故,这段代码并没有按预期工作 不知何故,我的值分支得到了所有分支的值,而不是我试图得到的分支。哈希确实得到了正确的哈希代码。我已经在程序外测试了它,当我键入正确的散列时,branch也进行了测试。我在这个程序中使用了错误的语法吗 #!/bin/sh hash=$(git log -n 1 --pretty=format:"%h") branch=$(git branch

我正在处理git服务器的post-receive,以便它自动将我网站的最新版本上传到一个以提交所在分支命名的文件夹中,但不知何故,这段代码并没有按预期工作

不知何故,我的值分支得到了所有分支的值,而不是我试图得到的分支。哈希确实得到了正确的哈希代码。我已经在程序外测试了它,当我键入正确的散列时,branch也进行了测试。我在这个程序中使用了错误的语法吗

#!/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将refname作为stdin获取后,我发现我必须修剪refname以仅获取分支名称,并产生了这段代码。谢谢大家。:)


您的看法是错误的:一般来说,commit不明确地属于唯一的分支。请看我的回答:正如Jubobs所说,提交没有“分支”。提交存在于一定数量的分支上(以可以到达的分支为准)。当git post receive钩子在stdin上获得oldrev newrev refname三元组时,为什么要做这些工作?如果有多个引用名称,您仍然需要选择您想要的引用名称,但这应该是一个开始。@Jubobs啊,我明白了。我以前没有那样看树枝。谢谢您提供的信息。@我不知道post receive确实获得了refname值。我必须再次查看我的代码。您似乎有语法错误-您正在执行
if[branch]
,但这只会给出
[
固定字符串
branch
作为第一个参数,而不是变量
$branch
的值。我使用它来检查branch是否有值。我了解到,如果branch为空,这样做将返回false,如果branch有值,则返回true。如果让shell通过说
$branch
来扩展变量branch,则返回yes。其他erwise,您只是在测试六个字母的字符串“branch”是否为非空,它是非空的,并且将始终为非空。您需要添加美元符号。:)您还可以运行
man[
来阅读该测试命令的手册。
#!/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