use*_*973 4 git macos character-encoding
我有一个文件名中包含特殊字符的文件(变音符号).我已经重命名了这个文件,但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上删除它.
使用git rm你可以:
git rm Mu*.jpg
Run Code Online (Sandbox Code Playgroud)
这将从索引中删除所有以Mu开头并以.jpg结尾的文件
如果您在repo中有其他文件与模式匹配,则会将其删除.在这种情况下,您可以使用:
git add -u Mu*.jpg
Run Code Online (Sandbox Code Playgroud)
从git的手册页添加:
-u - 更新
仅匹配索引中已跟踪的文件而不是工作树.这意味着它永远不会暂存新文件,但它会暂存已修改的跟踪文件的新内容,并且如果已删除工作树中的相应文件,它将从索引中删除文件.
(这也将在匹配模式的文件中完成存储库中的任何其他更改,如果您想使用,您可以随时取消它们git reset)