当消息有单引号和双引号时,如何执行git命令

时间:2014-04-18 11:53:10

标签: git merge quotes

我有一些文本需要在提交消息中。该文本来自我们的错误跟踪系统,此时无法更改。

通常我会合并:

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'

但我收到了延续提示,因此看起来不正确。

3 个答案:

答案 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"