0

我使用 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清洁所有东西,这是第一次它不起作用。

4

1 回答 1

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 成功但目录仍然存在,我能想到的唯一想法是另一个进程,它重新创建该目录。- 但是手动删除目录时应该是一样的...

于 2013-04-12T19:36:00.400 回答