Git干净没有删除文件

时间:2013-04-04 11:53:04

标签: git

git reset --hard HEAD

给了我

git status

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   "LIFE/uploads/docs/Community_Plan_onlineA\314\203\342\200\240%92.pdf"
nothing added to commit but untracked files present (use "git add" to track)

现在,通常做一个干净的将摆脱这个未跟踪的文件。

git clean -df

Removing "LIFE/uploads/docs/Community_Plan_onlineA\314\203\342\200\240%92.pdf"

然而,我正在接受这个

git status

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    "LIFE/uploads/docs/Community_Plan_online\303\203\342\200\240%92.pdf"
#
no changes added to commit (use "git add" and/or "git commit -a")

请注意稍有不同的文件名(_Plan_online \ 303而不是_Plan_onlineA \ 314)。 是什么导致此文件粘住?我正在使用core.autocrlf = false

来使用OSX btw

1 个答案:

答案 0 :(得分:2)

它并没有真正卡住 - 你有一个名为LIFE/uploads/docs/Community_Plan_online\303\203\342\200\240%92.pdf的跟踪(提交)文件。暂存删除并提交它以消除它。

Git有时会受到不区分大小写的文件系统的欺骗。您正在处理两个具有两个不同Unicode字符的文件名,HFS +认为它们与大小写相同。 Git认为在某些条件下它们是不同的文件,有时认为在其他条件下它们是相同的文件。

OS-X默认文件系统不区分大小写,它将文件名存储在decomposed UTF-8中(根据该答案,“规范化形式D”)。所以我认为'A \ 314'是HFS +,使用分解的UTF-8表示拉丁语'A',结合了变音符号(上面的反向逗号?)。 Git报告的'\'303'表示带有波浪号的拉丁文A.我猜这些字母在不区分大小写的文件系统中被认为是等效的。

在第一个git状态期间,我猜测Git会检查所有跟踪文件的状态,而HFS +会报告该文件名的案例等效文件名。然后Git查找未跟踪的文件,并查看与其跟踪文件列表中的任何文件名不完全匹配的文件名。因此,Git只报告一个未跟踪的文件。

在第二个git状态期间,Git会检查所有跟踪文件的状态,HFS +报告没有与文件名匹配的文件。因此,Git报告已删除跟踪文件。 (当然,现在文件已经消失,它不会被报告为未跟踪的文件。)

你没有说你使用的是什么版本的Git,但是更新版本的Git可能会更好地处理这种情况。