21

当我运行git clean --dry-run结果有点像:

Would remove an_untracked_file
Would remove an_untracked_file_2
Would not remove some_unrelated_folder/subfolder/

“不相关”的文件夹被跟踪并且没有任何变化,所以我不希望 git 删除它们。

但是,为什么 git 会报告Would not remove我项目的一些(但不是全部)正常(并且完全未触及)文件夹?

我可以告诉是什么导致 git 考虑,然后决定反对,删除它们吗?

git status仅列出我知道的几个未跟踪的文件。正如预期的那样。

git ls-files --other --exclude-standard返回那些相同的未跟踪文件。正如预期的那样。

git ls-files --other --exclude-standard --directory返回那些相同的未跟踪文件,以及一堆看似正常的目录。这不是我期望看到的,因为我认为的目的 --directory减少,而不是增加返回的结果数量。

在现场检查意外目录时,似乎每个目录都是空的,除了一个“.gitignore”d .svn 子文件夹。也许这会影响事情。

谁能帮我理解这种行为?

谢谢

4

5 回答 5

30

默认情况下,git clean不删除文件夹。它告诉您它看到了一个未跟踪的文件夹,但不会将其删除。给它一个-d标志以指示它也删除目录,如git clean -d -n

于 2011-12-26T19:39:21.943 回答
9

我可以告诉是什么导致 git 考虑,然后决定反对,删除它们吗?

你真的可以!(自 2013 年 7 月起,即将发布的 git 1.8.4):
git clean”命令学习了交互模式(git clean -i)。

有关初始实现,请参见提交 17696002086e8c6b9e998543d212e707c7d511ab :

有关实施,请参见提交 d1239264f2786d7ea15543b980c6bf6afbc4701a

为交互式添加新操作git-clean按模式过滤
当用户选择此操作时,用户可以输入以空格分隔的模式(与 相同的语法gitignore),并且与其中一个模式匹配的每个清理候选将被排除在清理之外。
当用户觉得没问题时,按 ENTER 并返回确认对话框。

有关测试和示例,请参阅提交 db627fd568410499c47d764937c3d7a10bbadffa

有关文档,请参阅提交 c0be6b4c8a1d16a92efad00d73683075cf2da60d

显示将要做什么并以交互方式清理文件。


交互模式

当命令进入交互模式时,它会显示要清理的文件和目录,并进入其交互命令循环。

命令循环显示可用的子命令列表,并给出提示符“ What now>”。
通常,当提示以单个 ' >' 结尾时,您只能选择给定的选项之一并键入return,如下所示:

------------
  *** Commands ***
  1: clean                2: filter by pattern    3: select by numbers
  4: ask each             5: quit                 6: help
  What now> 1
------------

只要选择是唯一的,您也可以说c或以上。clean

主命令循环有 6 个子命令。

clean::

开始清理文件和目录,然后退出。

filter by pattern::

这将显示要删除的文件和目录并发出“ Input ignore patterns>>”提示。
您可以输入空格分隔的模式来排除文件和目录的删除。
例如,“ ”将排除以“ ”和“ ”*.c *.h结尾的文件。 当您对过滤结果感到满意时,按(empty) 返回主菜单。.c.h
ENTER

select by numbers

这将显示要删除的文件和目录并发出“ Select items to delete>>”提示。
当提示以>>这样的双 ' ' 结尾时,您可以进行多个选择,并用空格或逗号连接。
你也可以说范围。
例如 " 2-5 7,9" 从列表中选择 2,3,4,5,7,9。
如果省略范围中的第二个数字,则采用所有剩余的补丁。
例如“ 7-”从列表中选择 7、8、9。
您可以说“ *”来选择所有内容。
此外,当您对过滤结果感到满意时,按ENTER(空)返回主菜单。

ask each::

这将开始清理,您必须一一确认才能删除项目。
请注意,此操作不如上述两个操作有效。

quit::

这使您无需清洁即可退出。

help::

显示交互式 git-clean 的简要用法。

于 2013-07-23T05:58:20.290 回答
6

如果执行命令时某些文件和文件夹继续失败,则运行

git clean -d -f

-f强制操作。

用于-n运行

于 2012-11-21T02:07:04.137 回答
2

这个答案主要是为了参考,因为我认为这是清理你的 repo 目录的最常见的场景。

递归删除所有未跟踪的目录:

git clean -d -f -x

-d对于目录, -x也用于删除忽略列表中的目录(像binand之类的东西build),这是我大部分时间需要的,并 -f确认您知道自己在做什么。

于 2013-06-04T11:46:05.067 回答
0

我在 mac 上使用 git 版本 2.10.0,不知何故我无法使用

git 清理 -df

删除未跟踪的文件,所以我改用这个:

git结帐——

PS:

如果有人可以在评论中解释为什么我无法使用

git 清理 -df

删除文件,我会非常感激..谢谢

警告您还将丢失您跟踪的文件:(

于 2016-09-10T00:06:17.020 回答