git clean:“不会删除”是什么意思?

时间:2011-12-26 19:29:34

标签: git git-clean

当我运行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返回那些相同的未跟踪文件,以及一堆看似正常的目录。这不是我期望看到的,因为我认为the purpose of --directory reduce ,而不是增加返回的结果数。

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

任何人都可以帮我理解这种行为吗?

谢谢

5 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:8)

  

我能说出导致git考虑的原因,然后决定反对,删除它们吗?

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

有关初始实施的信息,请参阅commit 17696002086e8c6b9e998543d212e707c7d511ab

请参阅commit d1239264f2786d7ea15543b980c6bf6afbc4701a了解实施情况:

  

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

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

有关文档

,请参阅commit 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
------------
  

只要选项是唯一的,您也可以说cclean

     

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

clean::
  

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

filter by pattern::
  

显示要删除的文件和目录,并发出“Input ignore patterns>>”提示   您可以输入空格分隔的模式以排除文件和目录的删除   例如。 “*.c *.h”将排除以“.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的简要用法。

答案 2 :(得分:6)

如果执行命令时某些文件和文件夹仍然失败,请运行

git clean -d -f

-f会强制进行操作。

使用-n进行干运行

答案 3 :(得分:2)

这个答案主要是为了参考目的,因为我认为这是清理你的回购目录最常见的情况。

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

git clean -d -f -x

-d目录, -x用于删除忽略列表中的目录(例如binbuild),这是我大部分时间都需要的 -f确认您知道自己在做什么。

答案 4 :(得分:0)

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

  

git clean -df

删除未跟踪的文件,所以我改为使用它:

  

git checkout -

PS:

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

  

git clean -df

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

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