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

本文将介绍, 如何在命令行下, 让git diff命令调用IDEA的diff功能!

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

IDEA diff

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

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

通过查看帮助得知, idea diff <left> <right></right></left>可以调用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

假设我们将 xxx设置为 Git外部diff工具, 当我们执行任意一条 git diff ...命令时, git就会调用 xxx, 并传递给 xxx7个参数, 相当于自动执行了 xxx path old_file old_hex old_mode new_file new_hex new_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工具时的方式

参考

Original: https://www.cnblogs.com/wbourne/p/15943880.html
Author: 王bourne
Title: 命令行下Git调用IDEA的diff功能

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581765/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL slow log 慢日志

    sql慢日志用于记录执行时间超过指定阈值的SQL,对于系统性能和故障排错非常有帮助 1.如何开启sql慢日志 –&#x5F00;&#x542F;slow log …

    Linux 2023年6月6日
    079
  • 部署office在线预览服务器(Office Web Apps Server)

    引言为方便在web端方便的使用office。 简介 Office Online Server (OOS,下文简写为OOS ) 提供基于浏览器的 Word、PowerPoint、Ex…

    Linux 2023年6月14日
    0132
  • Linux之虚拟专用网络—VPN

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    Linux 2023年5月27日
    0117
  • redis的另一个分支 keydb

    今天无意间发现了redis还有一个分支keydb 是多线程的,貌似在机器内核多的情况下效果比redis效果好 执行这些命令 在这之前先把redis关掉 sudo systemctl…

    Linux 2023年5月28日
    084
  • 3.21 Linux PATH环境变量及作用(初学者必读)

    在讲解 PATH 环境变量之前,首先介绍一下 which 命令,它用于查找某个命令所在的绝对路径。例如: [root@localhost ~]# which rm /bin/rm …

    Linux 2023年6月7日
    089
  • MySQL优化

    1.建立索引 (1)合理的索引能够加速数据读取效率,不合理的索引反而会拖慢响应速度; (2)索引越多,更新数据的速度越慢 (3)尽量在MyIsam作为引擎的时候使用索引 (4)可在…

    Linux 2023年6月7日
    062
  • 进程间通信(IPC)

    进程间通信(Interprocess Communication,IPC)是指两个或者多个进程之间进行数据交换的过程 进程拥有独立的内存空间 命令行参数(向子进程传递和exec系列…

    Linux 2023年6月6日
    0121
  • 我最鄙视的程序员

    今天在技术群里看到关于优秀程序员特质的话题,让我想起多年前的一个同事,一个我最鄙视的程序员。 他的名字叫李伟(化名),是入职没多久的员工,我所在的开发二组和他在的一组,以前没有过工…

    Linux 2023年6月6日
    093
  • 搭建ES集群

    添加以下elasticsearch用户: bash;gutter:true; 1 useradd elasticsearch 2 passwd elasticsearch</…

    Linux 2023年6月8日
    087
  • 不可不知的软件架构模式

    什么是系统架构(Architecture) 设计不仅仅指的是外观和感觉,它还包括运作方式。—— 史蒂夫·乔布斯 系统架构(System Architecture),软件架构(Sof…

    Linux 2023年6月14日
    080
  • 关于在Rocky linux下安装dotnet sdk不成功的问题

    Rocky Linux 9,运行 dnf install -y dotnet-sdk-6.0 一切正常,运行起来非常顺利,安装完毕。但是非常诡异,运行 dotnet –list-…

    Linux 2023年6月6日
    0123
  • Redis的RDB持久化

    posted @2022-02-24 16:11 天宇轩-王 阅读(34 ) 评论() 编辑 Original: https://www.cnblogs.com/dalianpai…

    Linux 2023年5月28日
    096
  • MySQL之多表查询、Navicat及pymysql

    一、多表查询 1.1 数据准备 — 建表 create table dep( id int primary key auto_increment, name varchar(20…

    Linux 2023年6月14日
    0107
  • 惊了!修仙=编程??

    大家好,我是良许。 在我记忆中,我们接触到的所有编程书籍都是这样的: [En] As far as I can remember, all the programming book…

    Linux 2023年5月27日
    091
  • KETTLE使用中的错误集锦

    1.违反唯一主键约束条件:问题是表中有俩个主键,将备用主键替换成真正的主 键或者是没有对数据做出处理加这句话and cft.DEL_FLAG!=’1’或者要…

    Linux 2023年6月13日
    0171
  • 【填坑】树莓派4B上运行Bullseye版本系统,不能登录xrdp的问题~~

    以前使用 buster,安装xrdp后 pi用户xrdp登录正常,可自从使用了 bullseye系统,pi登录xrdp后,出现黑屏不能登录现象。 网上搜寻解决方案,一种方法是: 找…

    Linux 2023年6月7日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球