没有提交的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被丢弃)。