如何在git checkout中使用八进制字符?

时间:2011-11-16 12:37:10

标签: git shell utf-8 status git-checkout

我有我的音乐文件的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命令?

2 个答案:

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