git clean -dfx不会删除被忽略的目录

时间:2013-04-12 16:19:54

标签: git

我使用git 1.7.9.5并且我有一个目录_hashdist,其中没有跟踪文件。这是我的.gitignore

*~
*.pyc
*.pyo

/opt
/bld
/db
/src
/_hashdist
/local

因此被忽略,如下所示:

$ git status --ignored
# On branch master
# Ignored files:
#   (use "git add -f <file>..." to include in what will be committed)
#
#   _hashdist/
nothing to commit (working directory clean)

然后我想删除它:

$ git clean -dfx
Removing _hashdist/

它正确地说它正在删除它。但事实上并没有发生:

$ git status --ignored
# On branch master
# Ignored files:
#   (use "git add -f <file>..." to include in what will be committed)
#
#   _hashdist/
nothing to commit (working directory clean)

$ ls -d _hashdist/
_hashdist/

目录仍在那里。这对我来说非常困惑,因为我一直使用git clean -dfx来清理所有内容,这是第一次它不起作用。

1 个答案:

答案 0 :(得分:1)

尝试使用strace来查找,发生了什么。

您应该看到类似的内容:

$ strace git clean -dfx
[...]
unlink("_hashdist/foo")                 = 0
getdents(3, /* 0 entries */, 32768)     = 0
close(3)                                = 0
rmdir("_hashdist/")                     = 0
[...]

unlink调用删除文件和rmdir调用删除目录。 在我的案例中,两者都是成功的= 0

也许这可能会带来一些启示。

如果rmdir成功但目录仍在那里,我能想到的唯一想法是另一个进程,它重新创建该目录。 - 但是当手动删除目录时,这应该是相同的......