只获取父文件夹的git差异



我试图只获得父文件夹的位数差异。这是我的git-diff输出:

git diff --dirstat=files,0 HEAD^ HEAD | awk '{print $2}' 
aws_app1_service/app/models/
aws_app1_service/app/views/
aws_app1_service/app/
aws_app2_service/config/
aws_app2_service/k8s_resources/
aws_app2_service/tests/steps/
aws_app2_service/tests/
aws_app3_service/
aws_app4_service/

在这之后,我想使用sed只过滤斜杠之前最左边的部分,然后进行排序|unique即最终输出应该是这样的:

aws_app1_service
aws_app2_service
aws_app3_service
aws_app4_service

有人能告诉我应该如何正确使用sed命令来获得所需的输出吗?提前感谢

隐藏在git help diff:中间

有一个命令列出";最高水平的差异而不重复出现":

git diff-tree HEAD^ HEAD
git diff-tree --name-only HEAD^ HEAD

它比较了两个("目录"的技术术语(,因此您可以将其用于repo中的任何目录:

git diff-tree HEAD^:aws_app1_service/app HEAD:aws_app1_service/app
# any pair of directories works :
git diff-tree HEAD:aws_app2_service/config HEAD:aws_app1_service/config
git diff-tree develop:aws_app2_service/config master:aws_app1_service/app/views
# etc ...

要完成您尝试的命令:

git diff --name-only HEAD^ HEAD |   # list the name of *all* differing files
    cut -d / -f 1 |   # one of many ways to get 'the chunk until the first "/"'
    sort -u            # remove repetitions

一种方法可以是将awk的输出管道化,以像这样进行切割

git diff --dirstat=files,0 HEAD^ HEAD | awk '{print $2}' | cut -d "/" -f1

使用awk尝试此操作(不输入其他命令(:

git diff --dirstat=files,0 HEAD^ HEAD | awk '{split($2,a,"/"); print a[1]}'

我用"/"分隔符拆分数组"a"中的列2"$2",然后显示数组a[1]的第一个索引。

sed 's~/.*~~' | sort -u将以第一个斜线开始的所有内容都替换为无

grep -o '^[^/]* | sort -u只打印第一个斜线之前的所有内容

假设目录名中没有% ,您也可以使用以下简单的look-behind表达式:

git diff --dirstat=files,0 --format= HEAD^ HEAD | grep -Po '(?<=% )[^/]+' | sort -u  

最新更新