git clean 删除空目录

git clean removes empty directories

这是我所做的:

$ git status
# I see some files *and* directories (some tracked, some not) which I really wanted to discard
$ git clean -xd

我很惊讶 git 删除了一些其他目录,这些目录在 git status 中没有显示。在最初的 schock 之后(这是我的 /etc 在我的一个生产主机中)我意识到它们没有被 git 列出,因为它们是空目录(所以没什么大不了的,只是 mkdir 他们 - 希望获得正确的权限)。这很好,但是:

为什么 git 在做 git status 时不考虑空目录,而在做 git clean 时却考虑空目录?这很烦人(而且很危险)!

您似乎已经知道:您不能在 git 中添加空目录(如果不是 see the FAQ)。

git status 有效地告诉您可以添加提交 哪些更改。因此,即使 git status 可以显示空目录,这也会让用户非常困惑。

Why can I see this directory but not track it?


另一方面,

git clean 会删除所有 未被跟踪的内容 。使用 -d 选项还会告诉 clean 删除 未跟踪的目录 .

但是什么定义了未跟踪的目录

据我们了解,git 不跟踪目录,它跟踪文件(或更具体的文件内容)。反过来,这意味着 未跟踪的目录 只不过是一个不包含任何 跟踪的文件 的目录。这适用于您忽略了数百个文件的 build 文件夹,就像您之前创建但忘记的空 tmp 文件夹一样。

如果您想确保 git clean 不会删除您想要保留的任何内容,您应该使用 -n (--dry-run) 选项 (which is described in the documentation ).这会告诉您 git clean 将删除的所有文件。

为确保您不会忘记 -n (--dry-run),您可以创建一个别名。

git config --global alias.status-clean "clean --dry-run"

您现在可以像 git status-clean -dx 一样轻松地使用它来显示将被 git clean -dx 调用删除的所有文件。


TL;DR: 不要使用 git status 看看 git clean -d 会删除什么。使用 git clean -d --dry-run.