2011-11-16 17 views
2

我有一個我的音樂文件的git倉庫,我最近發現有一些被刪除。 我想我意外地刪除了他們,但是現在我只能簡單地回顧一下事實,即我對 使用了一個git repo,所以我當前的git狀態證實它們已被刪除。下面是一些上市:我已經恢復了一首歌未使用包含在其名稱中包含特殊字符如何在git結帳中使用八進制字符?

# deleted: Steve_Erquiaga-Cafe_Paradiso/03 - Arioso__J.S._Bach_.flac 
# deleted: "Steve_Erquiaga-Cafe_Paradiso/04 - S\303\203\302\251r\303\203\302\251nade__Rachmaninov__from_Moreaux_de_fantasie.flac" 
# deleted: "Steve_Erquiaga-Cafe_Paradiso/05 - After_a_Dream__Faure___Apr\303\203\302\250s_Une_R\303\203\302\252ve_.flac" 
# deleted: Steve_Erquiaga-Cafe_Paradiso/06 - Prelude_in_C_Minor__J.S._Bach__from_The_Well-Tempered_Clavier.flac 
# deleted: Steve_Erquiaga-Cafe_Paradiso/07 - If_Dreams_Could_Dance__Erquiaga_.flac 

$git checkout "copy/pasted-in_name_from the output above" 

然而,在一些名字的特殊字符擋住了我的簡單的方法來恢復他們:

$git checkout 'Steve_Erquiaga-Cafe_Paradiso/05 - After_a_Dream__Faure___Apr\303\203\302\250s_Une_R\303\203\302\252ve_.flac' 

錯誤:

pathspec 'Steve_Erquiaga-Cafe_Paradiso/05 - After_a_Dream_Faure__Apr\303\203\302\250s_Une_R\303\203\302\252ve_.flac' did not match any file(s) known to git.

我想這不是一個git問題本身,而是一個shell特殊字符轉義或翻譯問題。 我試着把名稱放在雙引號中,因爲它顯示了,但我得到了同樣的信息。我也用外雙引號試了一下,並在每個'內部雙引號'之前加了一個反斜槓,獲得了相同類型的錯誤信息。

我該如何構建一個可以使用這些文件名的git checkout命令?

+0

'git的結帳.' – laalto

回答

1

您可以嘗試使用printf,其理解3個字符的八進制轉義,例如:

git checkout -- "$(printf "Steve_Erquiaga-Cafe_Paradiso/05 - After_a_Dream__Faure___Apr\303\203\302\250s_Une_R\303\203\302\252ve_.flac")" 

我沒有測試過這一點,我很害怕,但我認爲它應該工作。

0

嘗試在您的git checkout命令中使用雙引號而不是單引號。逃逸序列通常在雙引號字符串內工作,但不是單引號。

這裏是一個更簡單的想法,但它可以消除局部變化:如果你滿意的簽出的所有文件,並沒有具體命名的,

git checkout . 
+0

可能是有用解釋命令的作用?這不是明顯的 – CharlesB

+1

我認爲'git checkout .'基本上將當前目錄(。)中的所有更改恢復爲與「索引」(即通過'git add'或'git rm'添加的內容)相同。您可以使用'git checkout .'來恢復整個目錄,而不是使用'git checkout filename'來恢復文件。 –