Git结帐/删除带有特殊字符的文件

时间:2014-05-22 13:40:40

标签: macos git character-encoding

我的文件名中包含特殊字符的文件(变音符号)。我已经重命名了该文件,但是git仍然告诉我,我没有为提交而进行更改#39;。但是,我无法记住文件的正确名称,而git只告诉我名称是"Mu\314\210.jpg"。我不知道假设是什么格式。 utf8?我尝试了git rm并复制了字符串,但没有用。

如何找出文件的原始名称,或者如何在不知道确切文件名的情况下删除文件(可能只有文件扩展名)?

编辑:我开始觉得文件是在Windows PC上创建的,并且变音符号的编码也不同。但是,我无法解释为什么我无法删除该文件。

我发现那些是八进制表示。然而,尝试Can't remove directories gitRemove a file with a strange name from gitGit: how to specify file names containing octal notation on the command line的解决方案并没有帮助。特别是解决方案

git rm `printf "Mu\314\210.jpg"`

没有删除该文件。它仍然给了我"Mu\314\210.jpg" didn't match any files。还有其他方法可以删除文件吗?

printf告诉我"Mu\314\210.jpg""Mü.jpg"。但是,我的Mac OSX上的ü八进制表示应为\303\274。这就是为什么我认为u\314\210来自Windows PC的原因。仍然不确定这有多大帮助。

我只是尝试运行git-rm建议git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached的内容。我现在很安静,因为在再次添加文件之前,该文件无法删除。我将尝试使用旧文件名获取该文件,然后将其删除。

好的,添加旧文件也没有帮助。 Mac OSX似乎会自动更改八进制表示。似乎最后一次机会是在Windows PC上删除它。

1 个答案:

答案 0 :(得分:5)

使用git rm你可以:

git rm Mu*.jpg

这将从索引中删除所有以Mu开头并以.jpg结尾的文件

如果您在repo中有与该模式匹配的其他文件,则会将其删除。在这种情况下,您可以使用:

git add -u Mu*.jpg

来自git add的手册页:

  

-u   --update

     

仅匹配索引中已跟踪的文件而不是工作树。这意味着它永远不会   阶段新文件,但它将阶段修改新的内容   跟踪文件,它将从索引中删除文件,如果   工作树中的相应文件已被删除。

(这也将在匹配模式的文件中完成存储库中的任何其他更改,如果您想使用git reset,您可以随时取消它们)