当我运行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子文件夹。也许这会影响事物。
任何人都可以帮我理解这种行为吗?
谢谢
答案 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
------------
只要选项是唯一的,您也可以说
c
或clean
。主命令循环有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
用于删除忽略列表中的目录(例如bin
和build
),这是我大部分时间都需要的
-f
确认您知道自己在做什么。
答案 4 :(得分:0)
我在Mac上使用git版本2.10.0,不知何故我无法使用
git clean -df
删除未跟踪的文件,所以我改为使用它:
git checkout -
PS:
如果有人可以在评论中解释为什么我无法使用
git clean -df
删除文件,我非常感激......谢谢
警告 您还将丢失跟踪的文件:(