获取受 git monorepo 最近提交影响的所有一级目录的列表

get a list of all 1st level directories impacted by recent commits for a git monorepo

我目前正在玩 monorepos,我正在尝试检索回购协议中自给定提交以来受到影响的所有 1 级子文件夹的列表。

到目前为止,我可以使用 git diff --name-only $COMMIT_ID..head

检索所有受影响的文件

使用 git diff --name-only $COMMIT_ID..head | xargs -L1 dirname 我设法只获取文件夹名称。

要删除所有重复项,我将 sort | uniq 添加到组合中:git diff --name-only $COMMIT_ID..head | xargs -L1 dirname | sort | uniq

我现在需要的是确保我只检索第一级文件夹,即 project1 而不是 project1/srcproject1/lib

我尝试了几种选择,但到目前为止我还没有设法将它作为一个衬里。

这是 awk

的解决方案
git diff --name-only $COMMIT_ID | awk -F'/' 'NF!=1{print }' | sort -u
  • -F'/' 将分隔符字段设置为斜杠 /
  • NF!=1{print } 如果该行包含斜线/,则打印出第一个字段为一级目录名/,这将过滤掉存在于第一级的文件

    readme.md          NF==1
    project1/file      NF==2
    project2/src/file  NF==3
    
  • sort -u 合并排序和唯一