链接 git clean (Porcelain) 命令

Chaining git clean (Porcelain) command

我正在尝试对一些未跟踪的文件执行 git 清理。我无意中输入了以下命令:

git clean -dn | grep -v <files_to_exclude> | git clean -df

请注意,该行似乎缺少 xargs。也就是说,我通常会这样写上一个命令:

git clean -df | grep -v <files_to_exclude> | xargs git clean -df --

话虽如此,前者有效,后者无效!是的,我知道我可以使用:

git clean -df --exclude=<files_to_exclude>

那时我不知道排除选项。

为了确保您拥有正确的图片,假设您有三个未跟踪的文件 xyz,并且您要排除 x .

$ git clean -dn | grep -v x
Would remove y
Would remove z

将此输出直接连接到 xargs 而不省略“将删除”部分是错误的并且会导致 git clean 中断。

现在的问题是:为什么将此输出直接连接到 git clean 它仍然有效?

  • “前者有效”:它的行为与 git clean -df <no extra args> 完全相同,它会清除 所有 文件,而不仅仅是您想要包含的文件...
  • “后者没有”:[edit] 运行 它在我的机器上,“有效”(需要注意的是 grep 实际上会匹配完整的消息而不是文件名,因此 运行 grep -v Would 例如排除所有行,如果输出为空,则返回 git clean -df 再次删除所有而不是什么....)
    你在你的案例中发现了什么错误?