如何使用git clean删除.gitignore中的所有文件列表?

11
mkdir repo
cd repo
git init
mkdir temp
touch temp/in.tmp
touch out.tmp
echo '*tmp' > .gitignore

使用 git clean -Xn 命令会显示 Would remove out.tmp

但我想一起删除 temp/in.tmp

git clean -Xdn 也无法正常工作,但是切换到 temp 目录并运行 git clean -Xn 命令会显示 Would remove in.tmp

所以,我想知道是否有一条命令可以删除在 .gitignore 中列出的所有文件列表(包括子目录),在这种情况下,如何使用 git clean 命令删除 temp/in.tmpout.tmp

$ git --version
git version 1.9.5.msysgit.1

我发现了一些奇怪的事情

temp目录中添加一个文件并暂存它,执行git clean -Xn似乎可以正常工作。


touch temp/a.txt
git add temp/a.txt
git clean -Xn

它显示

Would remove out.tmp
Would remove temp/in.tmp

但为什么会发生那种事情呢?


奇怪。文档说通过递归地从当前目录开始删除不在版本控制下的文件来清理工作树。 - Tim
一个猜测:Git只有在使用-X选项时才遍历索引中的目录,忽略temp目录(因为它最初不知道它,只有在添加文件后才知道)。我可以在Ubuntu上使用Git 2.1.4复制此问题。为什么不在git@vger.kernel.org上询问呢? - krlmlr
1个回答

10
您需要使用-x参数来删除被.gitignore忽略的文件。
执行以下命令将成功清除所有内容: git clean -fdx 执行macsp:repo proto$ git clean -fdxn命令会提示需要删除的文件列表,但不会真正执行删除操作。

但是-x也会删除所有未追踪的文件。 - Hanlin
好的,我理解你的意思。你想要删除所有符合 .gitignore 的文件,但不想删除其他未被跟踪的文件。我认为这个问题实际上是一个边角情况,因为 Git 不会跟踪空文件夹。 - Saverio Proto
我正在开发一个名为gnore的CLI,它应该可以解决这个问题,并添加许多其他好东西。 - Clay Risser

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