使用Git检出/删除带有特殊字符的文件

11
我有一个文件名包含特殊字符(umlauts)的文件。我已经将该文件重命名,但是git仍然告诉我有“未提交的更改”。然而,我不记得文件的正确名称,而且git只告诉我文件名为"Mu\314\210.jpg"。我不知道这应该是什么格式,是utf8吗?我尝试过git rm并复制了该字符串,但没有成功。
如何找出文件的原始名称或者如何在不知道确切文件名的情况下删除该文件(也许只有文件扩展名)?
编辑:我开始感到这个文件是在Windows PC上创建的,那里的umlauts编码是不同的。然而,我无法解释为什么我不能删除这个文件。
我刚刚发现这些是八进制表示法。尝试从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" 没有匹配到任何文件。是否有其他方法可以删除文件?

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 -- Mu* 看看是否有效吗?(如果文件不在磁盘上,而只存在于 Git 存储库索引中,则使用 git rm --cached -- Mu* - VonC
很遗憾,它不起作用。当我输入那个命令时,我会得到一个“fatal: pathspec”错误。即使我只输入“git rm -- M*”。 - user3607973
1个回答

9
使用 git rm 命令可以实现以下功能:
git rm Mu*.jpg

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

如果您的存储库中有其他符合该模式的文件,它们也将被删除。在这种情况下,您可以使用:

git add -u Mu*.jpg

来自 git add 的 man 页面:

-u --update

只匹配已经被追踪的文件,而不是工作目录中的所有文件。这意味着它永远不会添加新文件,但是它将添加已跟踪文件的修改内容,并且如果工作目录中相应的文件已被删除,则会从索引中删除文件。

(这也会将与该模式匹配的文件中所做的任何其他更改提交到仓库,如果需要,您始终可以使用 git reset 撤消它们)


“git status” 仍然告诉我有一个修改没有被暂存。我想删除的文件仍然标记为“已删除”。 - user3607973
1
git add -u 有帮助。哇。 - user3607973
在我的情况下,文件名只有一个特殊字符,只有使用 git add -u 或 git add . 才能为我工作(必要时取消暂存其他文件)。 - nessa.gp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接