Alias ​​dziennika Git - krytyczny: niejednoznaczny argument „% ad”: nieznana wersja lub ścieżka

9

Próbuję użyć aliasu dziennika Git Immersion :

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

ale Git odpowiada

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

przy użyciu wersji 1.6.1. Do tej pory zrobiłem tylko dwa commity na master, a potem jeden na gałęzi. Ten alias działa dla mnie gdzie indziej, jaki może być problem na tym konkretnym komputerze?

Edycja - Na podstawie poniższej sugestii lesmany udało mi się ustalić, że w jakiś sposób ukośniki w cudzysłowie zostały usunięte po wklejeniu linii w PuTTY. Otrzymuję powyższy błąd podczas używania "zamiast \".

wes
źródło

Odpowiedzi:

14

Oto źródło komunikatu o błędzie:

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

Otrzymasz ten sam komunikat o błędzie z następujących dwóch poleceń:

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

Problem polega na tym, że git logotrzymuje dwa następujące argumenty: --pretty=format:%h(lub --pretty=format:\"%h) i %ad. Reszta, przynajmniej gdy jest wykonywana bezpośrednio jako polecenie w bash, jest potokiem do polecenia %s%d, które zwykle nie istnieje. Pełny komunikat o błędzie w moim systemie wygląda więc następująco:

$ 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

Wszystko to pokazuje, że cytowanie jakoś zgubiło się i %adjest interpretowane jako parametr git log. Aby temu zapobiec, musisz znaleźć poprawną kombinację cytowania i zmiany znaczenia, aby łańcuch formatu był cytowany poprawnie w momencie wykonywania.

Git config instrukcja o alias i cytuje:

Argumenty są podzielone na spacje, obsługiwane jest zwykłe cytowanie powłoki i zmiana znaczenia. do cytowania można użyć pary cudzysłowu i ukośnika odwrotnego.

Z tej linii nie byłem w stanie zrozumieć, jak działa cytowanie i ucieczka. Próbowałem kombinacji cytowania i ucieczki w aliasie, ale nie byłem w stanie tego zrozumieć.

Następujące wiersze, które opublikowałeś w swoim pytaniu, działają dobrze w moim systemie:

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

Będziesz musiał eksperymentować, aby uzyskać odpowiednią kombinację w systemie podczas korzystania z PuTTY i wszystkich innych.

lesmana
źródło
1
Czy masz na to dokumentację? Dla mnie przynajmniej jest na odwrót.
wes
@wes: Dodano link do dokumentacji. Przepisz odpowiedź.
lesmana
4
Musiałem wymienić cudzysłowów z apostrofami poczynić następujące prace z git 1.7.5.1 pod OSX:[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'
meagar