git clean删除空目录

git clean删除空目录,git,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 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状态< /代码>时不考虑空目录,但在执行<代码> Git Curny时会考虑这些空目录吗?这很烦人(也很危险)

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

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

为什么我可以看到这个目录但不能跟踪它


另一方面,删除未跟踪的所有内容。使用
-d
选项还告诉
clean
删除未跟踪的目录

但什么定义了未跟踪目录

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

如果要确保git clean不会删除任何要保留的内容,应使用
-n
--dry run
)选项()。这将告诉您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

git-only跟踪文件。如果要跟踪文件夹,将
.gitignore
文件放在文件夹中是一种常见的方法。Git clean将存储库返回到Git已知的状态(仅限文件)。密切相关:甚至可能是“隐藏”副本。如果确实想查看Git clean删除的内容,请使用
-n
--dry run
)选项运行它。请参阅。我不是问如何添加空目录(我已经知道)。我只是在抱怨(并希望得到纠正)为什么
git clean
git status
与wrt-empty-directorieshanks不一致,但不被说服
git status
已经可以报告不可跟踪的文件(带有
--ignored
),因此有一个
--all
标志是有意义的,而
git status
可以有另一个“空的不可跟踪目录”部分。基本上,报告工具(
git status
)和代理工具(在本例中是
git clean
)使用的是一组不同的文件/目录,这一点都不酷。如果
ls
不能列出空目录,但是
rm
可以很好地删除它们,您将不会非常高兴。幸运的是,这里有
ls-a
表单。我不喜欢使用一个用于写入文件系统的工具(
git clean
)来执行报告操作,因为它太容易出错并忘记
--dry run
(是否做过
^R
来搜索您的最后一个命令?)。使用只读工具进行报告,使用读写工具进行操作。但如果它们不一致……我强烈反对。你在比较两种完全不同的情况<代码>git状态--忽略不报告不可跟踪的文件它报告您明确选择不跟踪的可跟踪文件。空目录不可跟踪
git status
是对涉及文件跟踪的所有内容的报告(
add
commit
diff
等)<另一方面,code>git clean会删除所有你没有跟踪的东西,不管是故意的还是因为git无法跟踪。您期望使用错误的工具来完成此工作。那么git clean的相应报告工具是什么?我的意思是,一个只读报告工具,如果我忘记了命令行标志,它就不会造成严重破坏?我的观点是它应该是
git status
,正如我所说,
git status
用于跟踪,
git clean
用于不跟踪。您可以轻松创建一个别名--global alias.status-clean“clean--dry run”并使用它。