我有一些文本需要在提交消息中。该文本来自我们的错误跟踪系统,此时无法更改。
通常我会合并:
git merge origin/one-419 m'STAGED:ONE-419 - text from ticket'
如果票证文本本身有单引号。即text isn't blue
我只是用其他引号样式包围消息,所以在这种情况下:
git merge origin/one-419 m"STAGED:ONE-419 - text isn't blue"
然而,在我看的情况下,有单引号和双引号,例如
The "text" isn't blue
如何使用此讯息合并?
我试过
git merge origin/one-419 --no-ff -m'STAGED:ONE-419 - The "text" isn\'t blue'
但我收到了延续提示,因此看起来不正确。
答案 0 :(得分:3)
使用heredoc:
read string << EOF
STAGED:ONE-419 - "text" isn't blue
EOF
git merge origin/one-419 -m "$string"
答案 1 :(得分:2)
你所拥有的是shell引用问题而不是git问题。通常,测试这些的方法是使用echo
命令查看哪些有效。
某些细节在某种程度上取决于您使用的shell(sh,bash,tcsh,zsh等中的确切引用机制不同)。正如您所发现的那样,经验法则是引用带双引号的单引号,反之亦然,但在嵌套时会失败。
示范:
$ echo 'STAGED:ONE-419 - The "text" isn\'t blue'
> '
STAGED:ONE-419 - The "text" isn\t blue
$
显然不太正确。另一方面:
$ echo 'STAGED:ONE-419 - The "text" isn'"'t blue"
STAGED:ONE-419 - The "text" isn't blue
$
单引号序列以收盘单引号结束,然后我用双引号引用其余部分,包括你想要进行的单引号。
以编程方式,使用双引号可能更容易:
$ echo "STAGED:ONE-419 - The \"text\" isn't blue"
STAGED:ONE-419 - The "text" isn't blue
$
双引号“不太强”&#34;而不是单引号,所以反斜杠在其中工作以防止双重引号不能防止:$
- 扩展,反引号,反斜杠和更多双引号。这意味着你需要在每个这样的角色前加上反斜杠:
$ echo "this \$works"
this $works
$ echo "but this $doesn't"
but this 't
$
所以它有点笨拙,但很容易在大多数编程语言中编码。
答案 2 :(得分:1)
有些shell(包括bash
)提供引号样式 - $'...'
- 它作为单引号,但允许特殊处理某些转义字符(包括单引号本身):
git merge origin/one-419 -m $'STAGED:ONE-419 - The "text" isn\'t blue'
更标准的答案是使用双引号并引用任何嵌入的双引号:
git merge origin/one-419 -m "STAGED:ONE-419 - The \"text\" isn't blue"