我有我的音乐文件的git repo,我最近检测到有些被删除了。 我想我不小心删除了它们,但是现在我只是因为我有远见而对它有远见 使用git repo,所以我当前的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'与任何已知的文件都不匹配GIT中。
我认为这本身并不是一个git问题,而是一个shell特殊字符转义或翻译问题。 我尝试将名称放在双引号中,因为它显示了,但我收到了相同的消息。我还尝试使用外部双引号并在每个“内部双引号”前面加一个反斜杠,获得相同类型的错误消息。
如何构建一个可以使用这些文件名工作的git checkout命令?
答案 0 :(得分: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")"
我没有测试过这个,我很害怕,但我认为它应该可行。
答案 1 :(得分:0)
尝试在git checkout命令中使用双引号而不是单引号。转义序列通常在双引号字符串中起作用,但不是单引号。
这是一个更简单的想法,但它可以消除局部变化:
git checkout .