web-dev-qa-db-ja.com

GIT致命的:あいまいな引数 'HEAD':作業ツリーにない不明なリビジョンまたはパス

私はDebianから新しいGITリポジトリを初期化しようとしています(実際にはVM、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 #) $] 

どうしたの?

52
David

他の人が指摘したように、このメッセージはシェルプロンプトから来ています。問題は、新しく作成されたリポジトリ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

私の残りのシェルプロンプト(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 ...
}
29
Jacob Helwig

新しいgitプロジェクトを作成するときに端末にカスタムディスプレイがあると、この問題が発生しました(パス名の前にブランチディスプレイがあります::/ current/pathなど)。私がする必要があるのは、このメッセージを消すためにマスターブランチに最初にコミットすることだけでした。

8
KenStipek

通常、Linuxマシンではgitを使用しますが、職場ではWindowsを使用する必要があります。 Windows環境で最初のコミットをコミットしようとすると、同じ問題が発生しました。

まだこの問題に直面している人々のために、私は次のようにそれを解決することができました:

$ git commit --allow-empty -n -m "Initial commit".
7
J.Adler

Jacob Helwig 言及 彼の答え

事前に十分なエラーチェックなしでrev-parseが使用されているようです

Commit 62f162f from Jeff King(peff は、Git 1.9/2.0の _git rev-parse_ の堅牢性を改善する必要があります( Q1 2014)( commit 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>...]'
_
2
VonC

同じ問題があり、cocoapodsをインストールした後、「pod setup」で解決しました。

0
Jignesh Patel