这就是我所做的:
$ 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
时是否考虑过它们?这非常烦人(而且很危险)!
答案 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
。