2

我确定 *.lib 在 .gitignore

cat .gitignore | grep lib
*.lib

$ ls lib
TLib.lib  TLib_d.lib


$ git status
# On branch master
nothing to commit (working directory clean)


$ git clean -dfX

$ ls lib
TLib.lib  TLib_d.lib     // the issue is here...

为什么这些 .lib 文件没有被删除?

4

2 回答 2

1

一旦遇到不在索引中的目录,Git 就会停止搜索文件。但在上面的例子中,我们告诉 git 搜索所有匹配忽略模式的文件。因此,最好进入所有目录和搜索文件。

这也将匹配git ls-files行为。鉴于:

$ tree
.
├── foo.o
└── lib
    ├── TLib_d.lib
    └── TLib.lib

1 directory, 3 files

$ cat .gitignore
*.lib

运行以下命令。

$ git ls-files -o
foo.o
lib/TLib.lib
lib/TLib_d.lib

$ git ls-files -o -i --exclude-standard
lib/TLib.lib
lib/TLib_d.lib

$ git clean -n
Would remove foo.o
Would not remove lib/

$ git clean -nd
Would remove foo.o
Would remove lib/

$ git clean -nX

最后一个命令不打印任何文件。但如果它这样做会很好:

$ git clean -nX
Would not remove foo.o
Would not remove lib/
Would remove lib/TLib.lib
Would remove lib/TLib_d.lib
于 2012-08-19T08:43:34.067 回答
1

只有当目录中没有 git 跟踪的任何内容时,我才会得到这种行为。

如果它总是没有 git 跟踪的任何内容,并且您希望目录将目录添加到.gitignore文件中。

如果您希望目录保留但其内容保留,那么您需要在目录中添加一个由 git 跟踪的空文件。通常的选择是一个空.gitignore文件。

于 2012-08-19T05:53:12.483 回答