代码之家  ›  专栏  ›  技术社区  ›  dynamicJos

从“git diff”命令中筛选响应以仅获取Shell动态解的差异

  •  1
  • dynamicJos  · 技术社区  · 7 年前

    我正在尝试在我的项目中自动化一个冗余的部署过程。为了实现这一点,我正在尝试使用“git diff”获得两个分支之间的差异——某种程度上,我可以使用以下命令实现这一点。

    git diff <BRANCH_NAME1> -- common_folder_name/ <BRANCH_NAME2> -- common_folder_name/ > toStoreResponse.txt`
    

    现在我得到的答复如下:

    diff--git a/cmc database/common/readme.txt b/cmc database/common/readme.txt

    索引7820f3d..5a0e484 100644

    ---a/cmc数据库/common/readme.txt

    +++b/cmc数据库/common/readme.txt

    @@-1+1,5个@@

    -此文件夹包含公用数据库脚本。

    \文件结尾没有换行符

    +此文件夹包含公用数据库脚本。

    +测试STTESA

    \文件结尾没有换行符

    所以在上面的响应中,只有行/文本是一个新行或者两个分支之间的区别是 TEST STTESA 我只想用shell/git的方式在不同的文本文件中存储这么多文本。

    i、 e名为 readme.txt 只会包含 测试STTESA 内容。

    解决方案 :

    我已经找到了筛选响应的解决方法,但这并不是我所要的100%。命令如下:

    git diff <Branch_Name1> -- common-directory/ <Branch_Name2> -- common-directory/ | grep -v common-directory | grep -v index | grep -v @ | grep -v \\
    

    上述命令返回以下响应:

    -此文件夹包含公用数据库脚本。

    +此文件夹包含公用数据库脚本。

    +测试STTESA

    但我只想储存 测试STTESA

    2 回复  |  直到 7 年前
        1
  •  1
  •   fzd    7 年前

    正如你很容易意识到的,你的解决方案不会每次都奏效。这个 grep -v 零件使其不易运输。

    这里有一个“step0”解决方案:您需要匹配以“+”或“-”开头的行,然后既不是“+”也不是“-”。使用 grep 为了这个!

    git diff ... | grep  "^+[^+]\|^-[^-]"
    

    一些解释: 首先 \| 中间部分是“或”语句。 然后,每一边都以 ^ 指的是这一行的开头。最后,在第一个字符之后,我们要拒绝一些字符,使用 [^...] 语法。

    上面的一行翻译成英语为“运行diff,并查找所有以 + ,然后是不是 + ,或以 - ,然后是不是 - .

    如果删除以 - . 如果添加以 + . 为了这样的香味,我会修补 git diff --color 还有一些 [32m 为了好玩。

        2
  •  1
  •   StaticVariable    7 年前

    --差分滤波器=[ACDMRTUXB*]

    仅选择以下文件

    • 添加
    • 抄袭
    • D已删除
    • M修改
    • R重命名
    • 改变他们的类型(模式)
    • U未合并
    • X未知
    • B他们的配对被破坏了
    • 全部或全部