2012-09-04 17 views
40

我試圖從初始化Debian的一個新的GIT回購(實際上是在VirtualBox的虛擬機,安裝在Mac OS X上運行):GIT致命的:模棱兩可的說法「HEAD」:未知修訂或路徑不在工作樹

[[email protected]:~ $] mkdir test 
[[email protected]:~ $] cd test 
[[email protected]: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 
[[email protected]:test (master #) $] 

什麼問題?

+0

這不應該發生...什麼是git版本?它是如何安裝的? – CharlesB

+2

Git通過apt-get安裝,版本爲1.7.2.5。 – David

+4

它看起來像我在你的shell提示符下使用了一些git命令 - 我想錯誤信息是從那裏來的。 – ebneter

回答

20

正如其他人所指出的,這個消息是從shell提示符下到來。問題是在新創建的存儲庫HEAD.git/HEAD)指向一個尚不存在的引用。

% 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提示的剩餘部分(wunjo提示主題爲ZSH的大量修改版)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 ... 
} 
+1

老版本的git(至少我知道這是1.6.4的真實情況。4)不要使用'head'作爲'HEAD'的同義詞。在我的情況下,我堅持使用這個舊版本的git,並且能夠通過在我的嘗試中引用'HEAD'而不是'head'來解決問題。 –

2

Jacob Helwig提到in his answer說:

它看起來像REV-解析正在沒有足夠的錯誤檢查前手

使用3210

Commit 62f162fJeff King (peff)應該提高git rev-parse的魯棒性的Git 1.9/2.0(2014年第一季度)(另外的commit 1418567):

對於我們不匹配的情況下(例如, 「doesnotexist..HEAD」) ,那麼我們會試圖把這個參數當作文件名。
try_difference()得到這個權利,並在這種情況下始終不受侵犯。
然而,try_parent_shorthand()從未unmunges,導致不正確的錯誤信息,甚至不正確的結果:

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

有我的終端自定義顯示當創建一個新的Git項目,當我有這個問題(我有我分支顯示在路徑名之前,例如:/ current/path)。我所需要做的就是對我的主分支做最初的承諾,讓這條消息消失。

相關問題