对于文件名中的非ASCII字符,Git将以八进制表示法输出它们.例如:
> git ls-files
"\337.txt"
Run Code Online (Sandbox Code Playgroud)
如果这样的字节序列不表示合法编码(对于命令行的当前编码),我无法在命令行上输入相应的字符串.我怎样才能在这些文件上调用Git命令?显然,使用显示的字符串git ls-files不起作用:
> git rm "\337.txt"
fatal: pathspec '337.txt' did not match any files
Run Code Online (Sandbox Code Playgroud)
在Windows上测试,使用msysgit 1.7.10(git版本1.7.10.msysgit.1)
我有一个文件名中包含特殊字符的文件(变音符号).我已经重命名了这个文件,但git仍然告诉我,我的'更改没有上传提交'.但是,我记不起文件的正确名称了,git只告诉我名字是"Mu\314\210.jpg".我不知道假设是什么格式.utf8?我试过git rm并复制了字符串,但没有用.
如何找出文件的原始名称或如何在不知道确切文件名的情况下删除文件(可能只有文件扩展名)?
编辑:我开始觉得文件是在Windows PC上创建的,并且变音符号的编码也不同.但是,我无法解释为什么我无法删除该文件.
我发现那些是八进制表示.尝试解决方案来自无法删除目录git,从git中删除带有奇怪名称的文件,以及Git:如何在命令行中指定包含八进制表示法的文件名,但是没有帮助.特别是解决方案
git rm `printf "Mu\314\210.jpg"`
Run Code Online (Sandbox Code Playgroud)
没有删除该文件.它仍然给了我"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上删除它.