你会认为这不是一个常见的用例,但我经常创建新的git
回购。基本上,我有一个shell脚本,通过以下方式将当前分支存储到$CURRENT_BRANCH
:
#!/bin/sh -e
git rev-parse --is-inside-work-tree 2>/dev/null > /dev/null
git rev-parse --abbrev-ref HEAD
即使在非git repos中也是如此(这是一个想法)。然而,一个抱怨很多的案例是一个没有提交的git仓库。特别是我得到:
致命:含糊不清的论点'HEAD':未知的修订或路径不在工作树中。 使用' - '将路径与修订分开,如下所示: 'git [...] - [...]'
这提出了至少两个问题:
stderr
将stdout
和null
重定向到2>/dev/null > /dev/null
答案 0 :(得分:2)
在一个空的仓库中,HEAD
附加到一个不存在的分支上,因此git rev-parse
无法获得转换[解释不一定是导致代码投诉的原因] 。但是git symbolic-ref
并不关心SHA,所以
git symbolic-ref -q --short HEAD || echo HEAD
附加HEAD
的看起来不会比这更远,但git symbolic-ref
如果HEAD
没有附加到某个分支则会失败,因此echo
会保留您的{{1}}目前的行为。
答案 1 :(得分:0)
为什么不使用__git_ps1
命令?
最初是为了向PS1添加这些信息,你也可以从提示中使用它。
我正在使用它在我的提示中显示当前的git分支:
PS1="\$(__git_ps1 '(%s) ')${PS1}"
只需调用此方法打印当前分支:
__git_ps1 '%s\n'
参数是格式化的字符串。 %s
被分支的名称取代
如果$PWD
不在git repo中,则该命令不提供任何输出。
你需要git的bash-completion才能定义该版本。
它位于/usr/lib/git-core/git-sh-prompt
。
答案 2 :(得分:0)
您创建了哪种存储库?它是一个裸存储库,是否在裸存储库中运行这些命令?运行“git branch”会显示任何分支吗?
在一个裸存储库中,它不会获取任何有用的信息,也不建议在其中运行任何直接操作。理想情况下,我会克隆一个裸存储库,然后在其中执行空提交以启动它将显示分支名称(默认为“master”)。现在,如果您希望更改分支的名称。告诉你你遇到的错误,当我克隆一个裸存储库并且没有在其中创建任何分支时,我可以在我的最终重现它。
或者,当您遇到此问题时,您是否创建了孤儿分支。