GIT致命的:模棱两可的论点“HEAD”:未知的版本或path不在工作树中

我试图从Debian初始化一个新的GIT repo(实际上是Virtualbox上的一个虚拟机,在Mac OS X上安装并运行):

[david@server-VM-001:~ $] mkdir test [david@server-VM-001:~ $] cd test [david@server-VM-001:test $] git init Initialized empty Git repository in /home/david/test/.git/ fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions [david@server-VM-001:test (master #) $] 

有什么问题?

正如其他人指出的,这个消息来自你的shell提示符。 问题是在新创build的仓库中, HEAD.git/HEAD )指向一个不存在的ref。

 % git init test Initialized empty shared Git repository in /Users/jhelwig/tmp/test/.git/ % cd test % cat .git/HEAD ref: refs/heads/master % ls -l .git/refs/heads total 0 % git rev-parse HEAD HEAD fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions 

它看起来像rev-parse正在使用,没有充分的错误检查之前。 第一次提交后, .git/refs/heads看起来有点不同, git rev-parse HEAD不会再失败。

 % ls -l .git/refs/heads total 4 -rw------- 1 jhelwig staff 41 Oct 14 16:07 master % git rev-parse HEAD af0f70f8962f8b88eef679a1854991cb0f337f89 

在为我的shell提示符(ZSH的wunjo提示主题的重大修改版本)更新Git信息的函数中,我有以下几点来解决这个问题:

 zgit_info_update() { zgit_info=() local gitdir=$(git rev-parse --git-dir 2>/dev/null) if [ $? -ne 0 ] || [ -z "$gitdir" ]; then return fi # More code ... } 

我有一个自定义显示在我的terminal时创build一个新的git项目(我有我的分支之前显示path名例如:/电stream/path)这个问题。 我所需要做的就是做我最初的提交给我的主分支,让这个消息消失。

Jacob Helwig 在他的回答中提到:

它看起来像rev-parse正在使用,没有充分的错误检查之前

Jeff King( peff ) 提交的62f162f应该可以提高Git 1.9 / 2.0(2014年第1季度)中git rev-parse的健壮性(另外提交1418567 ):

对于我们不匹配的情况(例如,“ doesnotexist..HEAD ”),我们将试图将参数作为文件名。
try_difference()得到这个权利,并总是在这种情况下unmunges。
但是, try_parent_shorthand()永远不会泄露,导致不正确的错误消息,甚至是不正确的结果:

 $ git rev-parse foobar^@ foobar fatal: ambiguous argument 'foobar': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'