首页 > 解决方案 > 根据路径过滤或忽略目录列表

问题描述

我有以下命令来查找与master.

git --no-pager diff --diff-filter=AM --name-status --no-renames $(git merge-base ${1:-master} HEAD)

这给了我一个类似于下面的输出:

M       platform/team-a/dev/module/submodule/file.py
M       platform/team-b/prod/module/config.yaml
A       README.md

理想情况下,我想忽略根目录中已更改的文件。在上面的示例中,我想忽略 ,README.md因为我只关心platform/.

我的完整代码看起来像这样,有遗漏:

while read -r status file; do
  case $status in
    A)
        DIRNAME="$(dirname "${file}")" && \
        echo file in $$DIRNAME was created && \
        cd $$DIRNAME && \
        # do something
        ;;
    M)
        DIRNAME="$(dirname "${file}")" && \
        echo file in $$DIRNAME was modified && \
        cd $$DIRNAME && \
        # do something
        ;;
    esac
  done < <(git --no-pager diff --diff-filter=AM --name-status --no-renames $(git merge-base ${1:-master} HEAD) | sort -k 1,1)

$$VAR 是 GCP 云构建约定

如果忽略列表可以轻松配置,那就太好了,所以我可以说 if file in['.', 'docs/', 'platform/designs'] then skip作为示例。

我的 bash 技能很少,因此不确定解决此问题的最佳方法,否则我会在 while 循环中编写脏 if 语句。

标签: bashgit

解决方案


推荐阅读