git clean不能删除子目录(非递归)

29

我在使用 git clean 时遇到了问题。 考虑以下情形:

git status -su
?? file_1
?? xyz/file_2

git clean -f
Not removing xyz/file_2
Removing file_1

我不想删除xyz文件夹,但我想删除其中的file_2

为什么git clean不能递归地工作?

5个回答

53

毫不犹豫地说,git clean -df 赢得了胜利,测试之前的神奇-n标志防止出错。 :) - kyleturner

16

另外,git clean 不会在目录树的上层工作。考虑下面这种情况:

> git status
Untracked files:
  ../file1.orig
  ../../file2.orig

在这种情况下,git clean -df不会起作用。您必须进入项目根目录并再次运行'git clean -df'


如果能沿着整个树形结构向上找到,那就太好了,因为git status虽然有这种功能,但可能是故意这样设计的。 - cardamom

9

试试这个:

git clean -xdf

如果可以的话,请告诉我是否有效。


0

也许你在你的 .gitignore 文件中有 xyz 目录?你可以使用 -x 开关来覆盖这种行为,以便使用 clean 命令。此外,如果 xyz 目录没有被跟踪(里面没有被跟踪的内容),除非你传递 -d 选项,否则它不会被删除。


0
请注意,即使在Windows系统上,执行git clean -xdf也可能失败,并且当它无法lstat()时会悄悄地跳过某些路径。现在(Git 2.23, 2019年第三季度),它会给出警告。

请参阅提交 b09364c(2019年7月18日)由Johannes Schindelin(dscho完成。
协助者:René Scharfe(rscharfeSZEDER Gábor(szederJunio C Hamano(gitster
(由Junio C Hamano -- gitster --提交 f3d508f中合并,2019年7月25日)

clean:当路径过长时显示错误消息

lstat()失败时,git clean会中止而不显示错误消息,让用户感到困惑。

特别是在Windows上,默认的最大路径长度非常小(尽管有很多方法可以规避这个限制),因此非常重要给用户一个指示,说明他们的命令因为路径过长而失败了。

这个测试用例确保发出警告,这将帮助报告了git-for-windows/git issue 521的用户。

请注意,在回归测试中我们暂时设置了core.longpaths = false;这确保了与尚未从Git for Windows上游传输的core.longpaths功能的向前兼容性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接