使用正则表达式排除文件的git clean

4

我希望找到一种使用正则表达式的方法来使用git clean

没有正则表达式:

git clean -dfx --exclude=".idea/"

使用正则表达式(尝试过但不起作用):

git clean -dfx --exclude='(.*\/)*(\.idea\/.*)(.*)'
git clean -dfx --exclude="(.*\/)*(\.idea\/.*)(.*)"
git clean -dfx --exclude=r'(.*\/)*(\.idea\/.*)(.*)'
git clean -dfx --exclude=r"(.*\/)*(\.idea\/.*)(.*)"

你如何使用正则表达式来使用git clean

你可以编写一个带有 grep 的包装脚本。 - shadowtalker
你正在使用哪个版本的Git? - VonC
@VonC git 版本 1.9.5 (Apple Git-50.3) - melvynkim
@VonC 情况在2.1.2中似乎是相同的(没有基于正则表达式的清除排除),除非我漏掉了什么。 (我发现这个问题,因为我和OP一样想知道确切的情况) - Alderath
@Alderath,你在2.4.5版本中看到了相同的问题吗? - VonC
显示剩余2条评论
1个回答

2

git clean不支持正则表达式。


解决方法可以是这样的:

$ git clean -n | cut -f3 -d' ' | grep -v -E --color=never '<PATTERN>' | ifne git clean

这里发生的事情的细节如下:
  • git clean -n 产生了一个文件列表,这些文件将在执行git clean时被删除(你也可以使用诸如-d-x-X等标志)
    • -n 干运行(不实际执行任何操作)
  • cut -f3 -d' ' 从这些匹配中剪切第三个字段(由空格分隔)
    • -f3 第三个字段
    • -d' ' 使用空格作为定界符
  • grep -v -E --color=never '<PATTERN>'
    • -v 反转来自grep的匹配项
    • -E 将PATTERN解释为扩展的正则表达式
    • color=never 防止彩色的grep输出干扰后面的命令(可以省略)
    • '<PATTERN>' 一个正则表达式
  • ifne git clean 如果有文件,则将文件列表传递给git clean
    • ifne 来自moreutils的实用程序函数(可通过homebrew或其他包管理器安装)
    • git clean 将获取此列表并清理文件(首先使用-n确保没有删除您不希望删除的文件)

这就是小型命令行程序的魔力,每个程序都执行一个简单特定的任务


2
你可以使用 xargs 代替 ifne。我认为你还需要在最后传递 git clean -f 来实际删除文件。 - lacostenycoder

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