为什么git clean-dX不删除我忽略的目录?

为什么git clean-dX不删除我忽略的目录?,git,gitignore,git-clean,Git,Gitignore,Git Clean,我希望git清理我忽略的所有未跟踪的文件 我认为,git clean-dX是一个显而易见的解决方案,但它没有任何作用: # Set up test directory mkdir git-test && cd git-test git init && touch x && git add x && git commit -m Initial mkdir -p folder1/folder2/ touch folder1/fo

我希望git清理我忽略的所有未跟踪的文件

我认为,
git clean-dX
是一个显而易见的解决方案,但它没有任何作用:

# Set up test directory
mkdir git-test && cd git-test
git init && touch x && git add x && git commit -m Initial

mkdir -p folder1/folder2/
touch    folder1/folder2/file

echo "folder2/" >> .gitignore

git clean -fdX     # Does nothing
为什么不删除
folder1/folder2/

  • **/foo
    匹配文件或目录
    foo
    任何位置,与模式
    foo
因此,我的
folder2/
模式与
/folder1/folder2/
匹配,并且
-X
应该会清理它


发生了什么事?

您使用的是什么版本的Git?您可能遇到了以下错误:

这个bug出现在v1.7.11.2中。从:

  • “代码> GIT-LS文件--EXCELT=T-I/CODE”未排除任何在>T/< /COD>中的任何东西,因为它在执行索引时不注意排除领先路径。
    excluded()
    的其他两个用户也将更新

您应该将
touch folder1/a
添加到测试设置中,否则它会删除
folder1
。这似乎与
git
缺少“目录”概念有关。至少对我来说,它删除了整个
文件夹1
。但是如果我
触摸folder1/a
它不会删除任何内容。在I
git add folder1/a
之后,它会按预期删除
folder2
。总而言之,这似乎是一个bug(或者至少是不正确的文档)。是的,如果例如
folder1/folder2/file
被创建为构建产品并被忽略,如果
folder2/
位于
.gitignore
中,我希望
git clean-dX
将其删除。因此,这要么是错误/混乱文档的正确行为,要么是错误行为。我在对这个问题的评论中描述的所有内容都在1.8.1.5中。我使用的是git 1.7.9.5。虽然在我的示例脚本中使用1.8.2.1确实会有所不同(它会清理
folder1
),但如果我
触摸folder1/file
,则不会有什么不同,因此不删除
folder2
的原始问题仍然存在。