Git log alias - фатально: неоднозначный аргумент "% 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. Все, что я сделал до сих пор, это два коммита на мастере, а затем один на ветке. Этот псевдоним работает для меня в другом месте, в чем может быть проблема на этой конкретной машине?

Редактировать - Основываясь на предложении Лесманы ниже, я смог определить, что каким-то образом обратные слеши в кавычках были удалены после вставки строки в PuTTY. Я получаю вышеуказанную ошибку при использовании "вместо \".

Ответы:


17

Вот источник сообщения об ошибке:

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

Вы получите одно и то же сообщение об ошибке из следующих двух команд:

$ 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получает следующие два аргумента: --pretty=format:%h(или --pretty=format:\"%h) и %ad. Остальное, по крайней мере, когда выполняется непосредственно как команда в bash, является каналом для команды %s%d, которой обычно не существует. Таким образом, полное сообщение об ошибке в моей системе выглядит следующим образом:

$ 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. Чтобы предотвратить это, вы должны найти правильную комбинацию кавычек и экранирования, чтобы строка формата была правильно заключена в кавычки во время выполнения.

Мерзавец конфигурации руководство о псевдониме и процитировать:

Аргументы разделяются пробелами, поддерживается обычное цитирование и экранирование. пара кавычек и обратная косая черта могут быть использованы для их цитирования.

Из этой строки я не смог понять, как работает цитирование и экранирование. Я попробовал какую-то комбинацию цитирования и экранирования в псевдониме, но не смог разобраться в этом.

Следующие строки, которые вы разместили в своем вопросе, прекрасно работают в моей системе:

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

Вам придется экспериментировать, чтобы получить правильную комбинацию в вашей системе, используя PuTTY и все.


1
У вас есть документация для этого? По крайней мере, для меня это наоборот.
Уэ

@wes: добавлена ​​ссылка на документацию. Переписал ответ.
Lesmana

5
Мне пришлось заменить двойные кавычки одинарными, чтобы заставить работать git 1.7.5.1 под OSX:[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'
user229044
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.