2014-04-18 41 views
0

我有一些文本需要在提交消息中。該文本來自我們的錯誤跟蹤系統,目前無法更改。當郵件有單引號和雙引號時,如何做git命令

通常情況下,我會做我合併有:

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' 

,但我得到了延續提示,以便它不會似乎是正確的。

回答

1

一些貝殼,包括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" 
+0

+1到目前爲止,我發現這是最容易使用和記憶。 –

2

你有什麼是殼引用問題,而不是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 
$ 

雙引號比單引號「少強」,讓反斜線裏面他們的工作,以防止事情的雙引號不能防止: $ -expansion,反引號,反斜槓和更多雙引號。這是否意味着你需要把反斜線在每個這樣的字符的前面:

$ echo "this \$works" 
this $works 
$ echo "but this $doesn't" 
but this 't 
$ 

所以這是一個有點笨拙,但很容易代碼在大多數編程語言。

+0

+1優秀答案 –

3

使用定界符:

read string << EOF 
STAGED:ONE-419 - "text" isn't blue 
EOF 

git merge origin/one-419 -m "$string" 
+0

這裏的文檔還擴展了變量等,除非你引用結束詞。這可能是一個功能,或一個錯誤,取決於你(或OP)的需求。 :-) – torek

+1

這絕對是一個功能。如果shell沒有實現禁用插值的機制,則會出現一個錯誤。 –

+0

+1雖然不是我的最終選擇。 –