5

.gitignore

foo/

和一个 git 存储库:

./quux
./quux/foo
./quux/foo/bar
./quux/foo/bar/baz

由于foo被忽略,git 假设工作目录是干净的:

% git status
# On branch master
nothing to commit, working directory clean

git clean -ndx印刷品:

% git clean -ndx
Would remove quux/

git clean -ndX不打印任何东西。我希望它也能删除quux/

这是一个错误还是我没有得到的一些 gitignore 功能?如果我添加一些文件quux并提交它。比 git clean 会尝试quux/foo/按预期删除。

我的 git 很新:git version 1.8.3.4.

4

1 回答 1

6
$ git init .
$ echo foo/ >.gitignore
$ git add .;git commit -am ignore
$ mkdir -p foo/bar bar/foo
$ touch foo/bar/1 bar/foo/1
$ git clean -ndx
Would remove bar/
Would remove foo/
$ git clean -ndX
Would remove foo/
$

git help clean说:

   -X
       Remove only files ignored by Git. This may be useful to rebuild
       everything from scratch, but keep manually created files.

这意味着它不会删除手动创建的东西,除非它被明确忽略。

在这种情况下,bar目录是手动创建的,并且没有明确忽略,因此不会被删除。

quux您的目录也是如此。

要“修复”这个问题,您需要bar通过添加文件来添加受 git 控制的目录:

$ touch bar/x
$ git add bar/x
$ git commit -am add\ x
$ git clean -ndX
Would remove bar/foo/
Would remove foo/
$
于 2013-11-11T12:06:41.573 回答