git clean删除空目录

时间:2015-02-17 15:52:25

标签: git

这就是我所做的:

$ 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时是否考虑过它们?这非常烦人(而且很危险)!

1 个答案:

答案 0 :(得分:2)

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

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

  

为什么我可以看到此目录但不跟踪它?


另一方面,

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