Как git интерпретирует двоеточие, за которым следует путь? - PullRequest
0 голосов
/ 07 декабря 2018

Я играл с синтаксисом для ссылки на коммит по его сообщению о коммите, а затем я получил эту ошибку:

$ git show :/A
fatal: ambiguous argument ':/A': both revision and filename
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Сообщение об ошибке довольно ясно о том, как ее решить, но я ненашел любую документацию, объясняющую, как git интерпретирует двоеточие, за которым следует путь.Только если за ним следует название ветви.Можете ли вы дать мне несколько ссылок, чтобы узнать больше об этом?

1 Ответ

0 голосов
/ 07 декабря 2018

Это на самом деле немного хитрее, чем вы могли бы ожидать, так как :/A может быть тремя вещами.

Есть несколько разных битов документации Git, которые говорят об этом, но естьдва основных места для поиска:

Когда это просто имя файла, :/A просто означаетфайл с именем :/A.

В качестве pathspec , :/A использует символ "магическая подпись" /, без окончания : и имя A,поэтому он ссылается на файл с именем A в корневом каталоге (хранилища или рабочего дерева), а не на файл :/A в каталоге current .

Как спецификатор ревизии , :/A выполняет поиск сообщений о коммитах, а A становится обычнымexpression (хотя в данном случае это тривиальное регулярное выражение, которое просто соответствует букве A):

... Это имя возвращает самый младший соответствующий коммит, который доступен из любой ссылки, включая HEAD.

Используя --, вы заставите Git рассматривать его как pathspec , где вы можете добавить :(literal) впереди, чтобы защитить его от интерпретации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...