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

non*_*ot1 20 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/
Run Code Online (Sandbox Code Playgroud)

跟踪"无关"文件夹并且没有任何更改,因此我不希望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子文件夹.也许这会影响事物.

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

谢谢

Lil*_*ard 28

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


Von*_*onC 8

我可以告诉git要考虑什么,但然后决定反对,删除它们?

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

有关初始实现,请参阅提交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
------------
Run Code Online (Sandbox Code Playgroud)

只要选择是唯一的,您也可以说cclean更高.

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

clean::
Run Code Online (Sandbox Code Playgroud)

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

filter by pattern::
Run Code Online (Sandbox Code Playgroud)

这显示了要删除的文件和目录,并发出" Input ignore patterns>>"提示.
您可以输入空格分隔的模式以排除文件和目录的删除.
例如," "将从删除中*.c *.h排除以" .c"和" .h" 结尾的文件.
如果对筛选结果感到满意,请按ENTER(空)返回主菜单.

select by numbers
Run Code Online (Sandbox Code Playgroud)

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

ask each::
Run Code Online (Sandbox Code Playgroud)

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

quit::
Run Code Online (Sandbox Code Playgroud)

这样可以在不进行清洁的情况下退出.

help::
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

git clean -d -f

-f将迫使操作.

使用-n一个预演.