我正在尝试用git
编写一个sed
过滤器。
[filter "revisioner"]
smudge = sed -e "s/\\\$Revision\\\$/\$Revision: $(GIT_EXEC_PATH=/usr/lib/git-core/ git describe --tag svn)\$/g"
clean = sed -e "s/\\\$Revision: [^$]*\\\$/\$Revision\$/g"
为了让sed
做正确的事情,它希望有一个奇数的\
来逃避$
,但是git
抱怨有一个奇数的\
:
致命:文件..git/..gitconfig中的坏配置行2
我真的不想将我的sed
脚本移动到外部命令中,因为它是我的用户在使用我的存储库之前需要在他们的系统上设置的另一个移动部分。
有什么建议吗?
发布于 2018-04-04 15:15:06
sed
不需要奇数反斜杠。sed
需要从任何调用sed
的地方接收两个字符序列反斜杠美元符号。
Git本身将两个反斜杠转换为一个反斜杠。
Git在运行命令时调用的shell也会将两个反斜杠转换为一个反斜杠,每当它通过不包含在单引号中的文本进行词汇扫描时。
因此,如果以四个反斜杠开头:
\\\\$
Git会将每一对变成两个反斜杠:
\\$
然后外壳会将一对反斜杠变成一个反斜杠:
\$
在此之后,sed
将看到一个反斜杠,后面跟着一个美元符号。
请注意,您必须在反斜杠被解释的每一点上加倍。如果再加一层解释,你就需要八个反斜杠。这类事情很快就会变得丑陋,这就是为什么人们会将这些转换成更多的脚本。如果您将脚本作为存储库中的提交文件提供,那么处理起来可能要容易得多.
https://stackoverflow.com/questions/49652495
复制相似问题