Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
没有提交的git分支_Git_Bash - Fatal编程技术网

没有提交的git分支

没有提交的git分支,git,bash,Git,Bash,您可能会认为这不是一个常见的用例,但我经常创建新的gitrepos。基本上,我有一个shell脚本,通过以下方式将当前分支存储到$current\u branch: #!/bin/sh -e git rev-parse --is-inside-work-tree 2>/dev/null > /dev/null git rev-parse --abbrev-ref HEAD 即使是在非吉特回购(这是一个想法)中,这也很有效。然而,它抱怨最多的一个案例是没有提交的git回购。具体而言,

您可能会认为这不是一个常见的用例,但我经常创建新的
git
repos。基本上,我有一个shell脚本,通过以下方式将当前分支存储到
$current\u branch

#!/bin/sh -e
git rev-parse --is-inside-work-tree 2>/dev/null > /dev/null
git rev-parse --abbrev-ref HEAD
即使是在非吉特回购(这是一个想法)中,这也很有效。然而,它抱怨最多的一个案例是没有提交的git回购。具体而言,我得到:

致命:参数“HEAD”不明确:未知修订或路径不在工作树中。 使用“---”将路径与修订分开,如下所示: '吉特[…]-[…]'

这至少提出了两个问题:

  • 即使我通过
    2>/dev/null>/dev/null
    stderr
    stdout
    重定向到
    null
    ,为什么仍会显示此错误
  • 即使没有提交,如何获取当前分支名称

  • 为什么不使用
    \uuu git\u ps1
    命令?
    最初是为了将这些信息添加到PS1中,您也可以在提示符下使用它

    我用它在提示符中显示当前git分支:

    PS1="\$(__git_ps1 '(%s) ')${PS1}"
    
    只需调用此命令即可打印当前分支:

    __git_ps1 '%s\n'
    
    参数是一个格式化的字符串<代码>%s被分支机构的名称替换。
    如果
    $PWD
    不在git repo内,则该命令不会给出任何输出

    您需要git的bash完成来定义该版本。
    它位于这里
    /usr/lib/git core/git sh prompt

    您创建了什么类型的存储库?它是一个裸存储库吗?您是否正在裸存储库中运行这些命令?运行“git branch”会显示任何分支吗

    在裸存储库中,它不会获取任何有用的信息,也不建议在其中运行任何直接操作。理想情况下,我会克隆一个裸存储库,然后在其中执行一个空提交以开始,以便显示分支名称(默认情况下为“master”)。现在,如果您想更改分支机构的名称。告诉你们你们所面临的错误,当我克隆了一个裸存储库并且没有在其中创建任何分支时,我可以在我的末端复制它


    或者,当你面对这个问题时,你是否创建了一个孤立分支。

    在一个空回购协议中,
    HEAD
    附加到一个不存在的分支上,因此
    git rev parse
    无法获得一个rev[这种解释不一定是导致代码抱怨的原因]。但是
    git symbolic ref
    从来都不关心SHA,所以

    git symbolic-ref -q --short HEAD || echo HEAD
    

    带有附加的
    不会看得更远,但是如果
    未附加到分支,则
    git symbolic ref
    将失败,因此
    echo
    保留您当前的行为。

    您使用了两个命令,只有一个命令重定向输出。我认为
    致命:
    来自second@Alex通常我认为您是对的,但是运行第2行(第二个命令、重定向和all)似乎仍然包含致命错误输出,因为
    -e
    ,第一个
    rev parse
    使脚本在不在git repo中时退出。但是,当您在git回购中时,第二个
    rev parse
    抛出错误(只有第一个
    rev parse
    的stderr被丢弃)。