9

Я пытаюсь использовать псевдоним журнала 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. Я получаю вышеуказанную ошибку при использовании " вместо \" .

1 ответ1

14

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

$ 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 и все.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .