Использование фигурных скобок, ссылающихся на git ревизии/ссылки, не удается

Я пытаюсь проверить один файл из stash:

git checkout [email protected]{0} -- some/file

Это не выполняется с fatal: invalid reference: [email protected]

Похоже, что фигурные скобки устранены, но я не уверен в виновности.

Здесь есть ревизия. git stash list возвращает

[email protected]{0}: WIP on X
[email protected]{1}: WIP on Y

Я использую git 1.9.1 на zsh.

Есть ли способ предотвратить устранение этой фигурной скобки?

Ответ 1

Как правило, лучше указывать строки, содержащие последовательности {...} (например, git checkout '[email protected]{0}' ...), поскольку они подчиняются расширение скобки.
(Или, если на то пошло, одинарная кавычка, любой строковый литерал, который вы хотите сохранить как есть.)

Однако в стандарте zsh этот не будет проблемой, потому что {0} не является допустимым выражением скобки и поэтому просто печатается как (в равной степени относится к bash, dash и ksh); подтвердите с помощью:

echo [email protected]{0}  # prints as is in bash, dash, ksh, zsh (with default options in effect)

Престижность chepner за подозрение, что параметр BRACE_CLL zsh может быть установлен, что действительно вызывает симптом

$ setopt BRACE_CCL
$ echo [email protected]{0}
[email protected]          # !! braces removed

В качестве состояний chepner BRACE_CCL "вызывает {0} для обработки как символьный класс, содержащий один символ, а не для обработки буквально"; Другими словами: BRACE_CCL расширяет каждый отдельный символ внутри {...} (например, echo a{01}a0 a1) и с указанием только одного символа, чистый эффект - удаление прилагаемых фигурных скобок.

Как подтвердил сам ОП, unsetopt BRACE_CCL решил проблему.