获取受 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/src
和 project1/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
合并排序和唯一
我目前正在玩 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/src
和 project1/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
合并排序和唯一