Gitログエイリアス-致命的:あいまいな引数 '%ad':不明なリビジョンまたはパス


10

私はGit Immersionのログエイリアスを使用しようとしています:

[alias]
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

しかしGitは

fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

v1.6.1を使用します。これまでに行ったのは、マスターでの2つのコミットとブランチでの1つのコミットだけです。このエイリアスは他の場所でも機能しますが、この特定のマシンで何が問題になるのでしょうか?

編集- 以下のlesmanaの提案に基づいて、PuTTYに行を貼り付けた後、引用符のバックスラッシュがどういうわけか取り除かれていると判断できました。の"代わりに使用すると、上記のエラーが発生します\"

回答:


17

エラーメッセージのソースは次のとおりです。

$ git log %ad
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

次の2つのコマンドから同じエラーメッセージが表示されます。

$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
$ git log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

問題はgit log、次の2つの引数を受け取ることです:(--pretty=format:%hまたは--pretty=format:\"%h)および%ad。残りは、少なくともbashのコマンドとして直接実行される場合%s%d、通常は存在しないcommandへのパイプです。したがって、私のシステムの完全なエラーメッセージは次のようになります。

$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
bash: %s%d: command not found
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

これらすべては、引用が何らかの形で失わ%adれ、git logのパラメーターとして解釈されることを示しています。これを防ぐには、引用符とエスケープの正しい組み合わせを見つけて、実行時にフォーマット文字列が正しく引用符で囲まれるようにする必要があります。

エイリアスと引用に関するgit設定マニュアル

引数はスペースで区切られ、通常のシェルの引用とエスケープがサポートされています。引用符のペアとバックスラッシュを使用してそれらを引用できます。

この行から、引用とエスケープの仕組みを理解できませんでした。エイリアスで引用とエスケープのいくつかの組み合わせを試しましたが、それを理解することができませんでした。

質問に投稿した次の行は、私のシステムでは問題なく機能します。

[alias]
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

PuTTYとすべてを使用している間、システムで適切な組み合わせを取得するには、実験する必要があります。


1
これに関するドキュメントはありますか?私にとっては、少なくともその逆です。
wes

@wes:ドキュメントへのリンクを追加しました。回答を書き直しました。
lesmana

5
私はOSXの下でのgit 1.7.5.1と次の仕事をするために、単一引用符と二重引用符を交換しなければならなかった:[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'
user229044
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.