使用大括号引用 git revisions/references 失败
Using curly braces referencing git revisions/references fails
我正在尝试从存储中检出单个文件:
git checkout stash@{0} -- some/file
失败 fatal: invalid reference: stash@0
看起来花括号被消除了,但我不确定罪魁祸首。
隐藏修订版在那里。 git stash list
returns
stash@{0}: WIP on X
stash@{1}: WIP on Y
我在 zsh 上使用 git 1.9.1。
有没有办法防止这个大括号被删除?
通常最好引用包含 {...}
序列的字符串(例如 git checkout 'stash@{0}' ...
),因为它们受制于 brace expansion.
(或者,就此而言,单引号 any 您想要保留 原样 的字符串文字。)
然而,在默认zsh
环境中,这个不会 是个问题 ,因为 {0}
不是有效的大括号表达式 ,因此只按原样打印(同样适用于 bash
, dash
, 和 ksh
);验证:
echo stash@{0} # prints as is in bash, dash, ksh, zsh (with default options in effect)
感谢 chepner 怀疑 BRACE_CLL
zsh
选项可能已设置 ,这确实会产生症状:
$ setopt BRACE_CCL
$ echo stash@{0}
stash@0 # !! braces removed
正如切普纳所说,BRACE_CCL
"causes {0}
to be treated as a character class containing one character, rather than being treated literally";换句话说:BRACE_CCL
在 {...}
中扩展 每个单独的字符 (例如,echo a{01}
-> a0 a1
)并且只有 一个字符指定,净效果是移除外括号。
正如 OP 本人后来确认的那样,unsetopt BRACE_CCL
解决了问题。
我正在尝试从存储中检出单个文件:
git checkout stash@{0} -- some/file
失败 fatal: invalid reference: stash@0
看起来花括号被消除了,但我不确定罪魁祸首。
隐藏修订版在那里。 git stash list
returns
stash@{0}: WIP on X
stash@{1}: WIP on Y
我在 zsh 上使用 git 1.9.1。
有没有办法防止这个大括号被删除?
通常最好引用包含 {...}
序列的字符串(例如 git checkout 'stash@{0}' ...
),因为它们受制于 brace expansion.
(或者,就此而言,单引号 any 您想要保留 原样 的字符串文字。)
然而,在默认zsh
环境中,这个不会 是个问题 ,因为 {0}
不是有效的大括号表达式 ,因此只按原样打印(同样适用于 bash
, dash
, 和 ksh
);验证:
echo stash@{0} # prints as is in bash, dash, ksh, zsh (with default options in effect)
感谢 chepner 怀疑 BRACE_CLL
zsh
选项可能已设置 ,这确实会产生症状:
$ setopt BRACE_CCL
$ echo stash@{0}
stash@0 # !! braces removed
正如切普纳所说,BRACE_CCL
"causes {0}
to be treated as a character class containing one character, rather than being treated literally";换句话说:BRACE_CCL
在 {...}
中扩展 每个单独的字符 (例如,echo a{01}
-> a0 a1
)并且只有 一个字符指定,净效果是移除外括号。
正如 OP 本人后来确认的那样,unsetopt BRACE_CCL
解决了问题。