Alias ​​do log do Git - fatal: argumento ambíguo '% ad': revisão ou caminho desconhecido

10

Estou tentando usar o alias de log do Git Immersion :

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

mas o Git responde com

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

usando a v1.6.1. Tudo o que fiz até agora foram dois commits no master e um em um branch. Esse alias funciona para mim em outro lugar, qual poderia ser o problema nessa máquina em particular?

Editar - Com base na sugestão de lesmana abaixo, pude determinar que, de alguma forma, as barras invertidas nas aspas foram removidas após colar a linha no PuTTY. Eu recebo o erro acima ao usar em "vez de \".

nós
fonte

Respostas:

17

Aqui está a fonte da mensagem de erro:

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

Você receberá a mesma mensagem de erro dos dois comandos a seguir:

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

O problema é que git logrecebe os dois argumentos a seguir: --pretty=format:%h(ou --pretty=format:\"%h) e %ad. O restante, pelo menos quando executado diretamente como um comando no bash, é um canal para o comando %s%d, que geralmente não existe. A mensagem de erro completa no meu sistema é assim:

$ 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

Tudo isso demonstra que a citação de alguma forma se perdeu e %adé interpretada como um parâmetro para o git log. Para impedir que você precise encontrar a combinação correta de citação e escape para que a seqüência de formato seja citada corretamente no momento da execução.

O manual de configuração do git sobre alias e citação:

Os argumentos são divididos por espaços, o shell usual citando e escapando é suportado. um par de aspas e uma barra invertida podem ser usados ​​para citá-los.

A partir dessa linha, não consegui descobrir como funciona a citação e a fuga. Tentei alguma combinação de citação e escape no pseudônimo, mas não consegui entender nada disso.

As seguintes linhas que você postou em sua pergunta funcionam bem no meu sistema:

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

Você terá que experimentar para obter a combinação certa no seu sistema enquanto estiver usando o PuTTY e tudo.

lesmana
fonte
11
Você tem documentação para isso? Para mim, pelo menos, é o contrário.
wes
@ wes: Adicionado link para a documentação. Reescreva a resposta.
Lesmana
5
Eu tive que substituir aspas com aspas simples para fazer o trabalho seguinte com git 1.7.5.1 sob OSX:[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'
user229044