【问题标题】:getting git difference of only the parent folder仅获取父文件夹的 git 差异
【发布时间】:2020-11-11 17:31:28
【问题描述】:

我正在尝试仅获取父文件夹的 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 仅过滤斜线之前的最左边部分并进行排序 |之后独一无二 即最终输出应该是这样的:

aws_app1_service
aws_app2_service
aws_app3_service
aws_app4_service

谁能告诉我 sed 命令的正确用法应该是什么来获得所需的输出?提前致谢

【问题讨论】:

    标签: linux git unix sed


    【解决方案1】:

    用 awk 试试这个(不输入其他命令):

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        隐藏在git help diff中间:

        有一个命令列出“没有递归的顶级差异”:

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

        它比较两个(“目录”的技术git术语),所以你可以将它用于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
        

        【讨论】:

          【解决方案4】:

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

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

          假设您在目录名称中没有 % ,您也可以查看这个简单的后视表达式:

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

          【讨论】:

            猜你喜欢
            • 2013-04-25
            • 2012-08-20
            • 2021-03-05
            • 1970-01-01
            • 1970-01-01
            • 2011-06-20
            • 2018-10-19
            • 1970-01-01
            • 2015-11-04
            相关资源
            最近更新 更多