【问题标题】:While git show--name--only provide multiple filenames in grep statement而 git show--name--only 在 grep 语句中提供多个文件名
【发布时间】:2019-07-15 11:53:26
【问题描述】:

我想查看最新的提交并确定是否对以下文件或文件名中的文件进行了任何更改。分别是apiproxy(文件夹)或edge.json(文件名)

我正在运行以下代码(steps.sh 是公司使用的一些特定于库的东西。它只是一个 shell 命令):

if((steps.sh ('git show --name-only HEAD | grep "apiproxy"')) || (steps.sh ('git show --name-only HEAD | grep "edge.json"'))){
                        echo "latest commit was a change to either edge.json or apiproxy"
}

如果执行上述操作,而最新更改仅匹配第一个条件,则第二个条件将失败。在我看来,介于两者之间的 || 应该可以防止这种情况发生。

这是我要解决的第一个问题。评估这两个条件,当其中一个失败时,不要以退出代码 1 退出。

其次,如果可能,我想将|| 条件放在一个 grep 命令中。我尝试了以下方法无济于事:

git show --name-only HEAD | grep "edge.json | apiproxy"

任何指针?

更新:

在 0andriy 的帮助下,我发现我想使用 git show --name-only "filename1" "filename2" 现在我剩下的问题是:我如何在git show 中放置一个或条件,例如git show --name-only "apiproxy" || "edge.json"?

【问题讨论】:

  • 您需要一个简单的:git show ... -- file1 file2 ... 根本不需要grep。只需在命令行中列出所有文件。
  • 你能详细说明一下吗?如果我这样做 git show --name--only HEAD -- "apiproxy" "edge.json" 我会得到无法识别的论点。应该是git show --name--only HEAD | "apiproxy" "edge.json"
  • 所以应该是 git show "filename1" "filename2"
  • 当然应该是--name-only。注意中间的一个破折号。 git show --name-only HEAD -- edge.json apiproxy

标签: git groovy grep


【解决方案1】:
git show HEAD --name-only --pretty="" |grep 'apiproxy\|edge.json'

已更新。限制为确切的文件名

git show HEAD --name-only --pretty="" |grep '^apiproxy$\|^edge.json$'

【讨论】:

  • grep 'apiproxy\|edge.json'grep -E 'apiproxy|edge.json'
  • 使用 grep 表达式时要注意部分匹配。这里可能不是什么大问题,但是如果有一个名为noapiproxyhere 的文件呢? :-)
  • @EncryptedWatermelon 有必要使用 HEAD 吗?如果您不提供此选项,它不是仅评估 HEAD 吗?
  • 没错,不需要HEAD
【解决方案2】:

虽然上面的答案非常有助于为我指明正确的方向,但我的问题的解决方案如下:

git show --name-only "filename1" "filename2"

这会输出在HEAD 状态下已更改的指定文件名

or 语句没有帮助,因为它(显然)在第一次遇到条件中的任何匹配项时停止,我想查找所有匹配项。

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2015-03-22
    • 2012-12-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多