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>...]'