2012-09-04 17 views
40

Debianから新しいGITリポジトリを作成しようとしています(実際にはVirtualBox上のVM、Mac OS X上にインストールされ、実行中):GIT fatal:あいまいな引数 '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

シェルプロンプトでいくつかのgitコマンドを使っているかのように見えます。エラーメッセージがそこから来ていると思います。 – ebneter

答えて

20

他の人が指摘しているように、このメッセージはシェルプロンプトからのものです。問題は、新しく作成されたリポジトリ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はもう失敗しません。私のシェルプロンプト(ZSHためwunjoプロンプトテーマの重く修正版)の残りのためのGitの情報を更新機能で

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

、私はこの問題を回避するには、以下のいます

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-解析のように見える

は十分なエラーが前に手

を確認せずに使用されています Jeff King (peff)から3210

Commit 62f162fはGitリポジトリにgit rev-parseの堅牢性を向上させる必要があります1.9/2.0(2014年第1四半期)(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)。私がしなければならなかったのは、このメッセージが消え去るように私の枝に私の最初のコミットをすることでした。

関連する問題