• 命令行下Git调用IDEA的diff功能


    命令行下git diff, 有人欢喜有人厌, 本文以IDEA diff为例, 介绍如何更换Git的diff工具.

    IDEA diff

    IDEA虽然是一个图形化工具, 其实也提供了极少一部分命令行接口, 将IDEA安装目录下的bin目录添加到PATH环境变量中, 我们就可以在命令行中调用IDEA的命令了.

    通过查看帮助得知, idea diff <left> <right>可以调用IDEA比较两个文件. leftright为文件的路径.

    Git外部diff机制(Git external diff)

    Git自带了一个命令行的diff工具, 当然, 我们也可以自定义diff工具. 自定义的diff工具, 在git中叫做 Git external diff, 本文暂且称其为 Git外部diff工具.
    如果我们设置了外部diff工具的话, Git将会调用我们所设置的外部diff工具, 并传递7个参数:

    1. path 文件的路径
    2. old_file 旧文件的路径
    3. old_hex 旧文件的SHA1
    4. old_mode 旧文件的mode(文件类型+文件权限)
    5. new_file 新文件的路径
    6. new_hex 新文件的SHA1
    7. new_mode 新文件的mode

    设置Git external diff

    设置外部diff工具有两种方式, 两种方式都是等价的, 设置其一即可:

    • 通过Git config命令设置: git config --global diff.external xxx
    • 通过环境变量GIT_EXTERNAL_DIFF设置: export GIT_EXTERNAL_DIFF=xxx

    Git集成IDEA diff

    IDEA diff只接受两个参数, Git调用外部diff传递七个参数, 必然会导致问题, 所以我们写个简单的脚本, 只把old_filenew_file传递给IDEA diff.

    #!/bin/bash
    path="$1"
    old_file="$2"
    old_hex="$3"
    old_mode="$4"
    new_file="$5"
    new_hex="$6"
    new_mode="$7"
    idea diff "$old_file" "$new_file"

    我们将脚本保存到任意位置, 脚本命名为任意名字皆可, 例如命名为ideadiff.sh, 保存到/home/wbourne/目录下, 即可通过git config --global diff.external /home/wbourne/ideadiff.sh命令将其设置为外部diff工具, 再次在命令行中使用git diff时, 就会打开IDEA的diff界面了.

    在Windows中使用Git bash需注意盘符的问题, 可通过pwd命令查看映射后的路径, 如脚本保存在用户家目录下, 则命令应为: git config --global diff.external /c/Users/wbourne/ideadiff.sh

    不只是IDEA diff, 只要是提供了命令行接口的diff工具, 都可将其设置为外部diff工具.

    至此, 本文就基本结束了, 受限于篇幅, 本文只介绍了最简陋的diff脚本, 某些情况下是有问题的, 例如: 新增文件, 删除文件. 感兴趣的读者, 可继续自行完善此脚本!

    禁用外部diff工具

    最后说一下如何禁用外部diff工具

    • 如果只是想临时禁用外部diff工具, 通过--no-ext-diff选项即可禁用外部diff工具, 即git diff --no-ext-diff ...
    • 如果想永久禁用外部diff工具, 有两种方式, 取消GIT_EXTERNAL_DIFF环境变量或者执行git config --global --unset diff.external删除配置, 具体采用哪种方式, 取决与设置外部diff工具时的方式

    参考

  • 相关阅读:
    适老产品反“坑老”,美的智能化家电是否能坐稳银发经济顺风车?
    C++虚函数(定义,作用,原理,案例)
    PHP如果实现自动文章分类
    HTML+CSS简单的网页制作期末作业 关于我的家乡——四川文化网页介绍 DW大学生网页作业制作设计 Dreamweaver简单网页成品
    因果发现方法概述
    Vue3 除了keep-alive,还有哪些页面缓存的实现方案
    基于蜻蜓优化算法的认知无线电网络的服务质量研究附Matlab代码
    护网(HVV)技术详解:网络安全演习的核心技能要求
    使用IntelliJ IDEA创建Maven项目并上传项目至gitlab等远程仓库
    2022.09 青少年Python等级考试(六级) 选择题部分
  • 原文地址:https://www.cnblogs.com/wbourne/p/15943880.html