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

9

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 v1.6.1. Tudo o que fiz até agora são dois commits no master e um no 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 do lesmana abaixo, eu 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 \" .

    
por wes 21.04.2011 / 07:34

1 resposta

13

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 log recebe os dois argumentos a seguir: --pretty=format:%h (ou --pretty=format:\"%h ) e %ad . O resto, pelo menos quando executado diretamente como um comando no bash, é um pipe para o comando %s%d , que normalmente 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 é interpretado como um parâmetro para o git log. Para evitar que você tenha que encontrar a combinação correta de cotação e escape para que a string de formato seja citada corretamente no momento da execução.

O manual do git config sobre alias e citações:

Arguments are split by spaces, the usual shell quoting and escaping is supported. quote pair and a backslash can be used to quote them.

A partir desta linha, não consegui descobrir como funciona a citação e a fuga. Eu tentei uma combinação de citar e escapar no pseudônimo, mas não consegui fazer nenhum sentido.

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 em seu sistema enquanto estiver usando o PuTTY e tudo mais.

    
por 21.04.2011 / 09:25

Tags