命令行下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)

大家都在看

  • Docker常用命令

    Docker常用命令 删除安装包: sudo&#xA0;apt-get&#xA0;purge&#xA0;docker-ce 删除镜像、容器、配置文件等内容:…

    Linux 2023年6月6日
    0165
  • linux–文件系统

    才开始接触linux是这样: 这个是shell界面 根目录下的文件 : linux在路径中不使用盘符;采用的是虚拟目录(根目录’/’ 就是一个虚拟目录) ,…

    Linux 2023年6月14日
    0104
  • thinkphp5简单使用redis缓存

    csharp;gutter:true; connect("127.0.0.1","6379");</p> <pre>…

    Linux 2023年5月28日
    0116
  • 阿里云-docker上安装redis

    1、取最新版的 Redis 镜像 这里我们拉取官方的最新版本的镜像: $ docker pull redis:latest 2、查看本地镜像 使用以下命令来查看是否已安装了 red…

    Linux 2023年5月28日
    086
  • 泛微 OA 前台 GetShell 复现

    自行搭建环境: 漏洞路径: /weaver/weaver.common.Ctrl/.css?arg0=com.cloudstore.api.service.Service_Chec…

    Linux 2023年5月28日
    0102
  • Java实现链表

    3、链表 MyLinkedList 有一个头指针,一个尾指针,还有链表长度size 内有两个类,一个是实现了Iterator接口的迭代器类,另一个是Node类,其中Node数据结构…

    Linux 2023年6月14日
    098
  • MIT6.828——Lab2(麻省理工操作系统实验)

    Lab2 Lab2 是关于操作系统存储管理的细节。主要是建立内存模型,页表,物理地址映射等。在Lab2之前,请复习好前序知识: Lab2内存管理准备知识 MIT6.828——Lab…

    Linux 2023年5月27日
    0107
  • 学习linux(centos7)记录的笔记

    此随笔用于记录学习《linux鸟哥的私房菜》过程中1.遇到的问题及解决的过程 2.有必要记录的重要内容 3.对应书上操作的记录 开始于2021年6月18号 一个磁盘的分区通过格式化…

    Linux 2023年6月6日
    090
  • 假如,程序员面试的时候说真话

    做程序员这么长时间了,经常能够听到一句话:面试造火箭,入职拧螺丝。而且,随着就业环境越来越卷,现在只会造火箭恐怕都不行了,得能造个空间站才行。 回想自己刚毕业那会儿,哪有什么八股文…

    Linux 2023年6月7日
    080
  • Linux 常用命令总结(三)

    一、实用命令 1、crontab(定时任务) (1)基本概念crontab 是用来管理定时任务的命令。系统启动后,将会自动调用 crontab,如果存在任务,则根据相关定义去执行。…

    Linux 2023年5月27日
    0120
  • SpringBoot——Redis实现分布式集群Session共享

    1.添加pom.xml依赖 org.springframework.boot   spring-boot-starter-data-redis   org.springframew…

    Linux 2023年5月28日
    092
  • [转帖]shell 学习之正则、别名以及管道重定向

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年5月28日
    0100
  • 关于Python, ftplib模块中的cwd()进入含中文目录失败的问题

    使用Python的ftplib模块连接ftp服务器时, 使用cwd()连接含中文的目录, 报错 : UnicodeEncodeError: ‘latin-1&#8217…

    Linux 2023年6月6日
    0111
  • 微信小程序大型系统架构中应用Redis缓存要点

    在大型分布式系统架构中,必须选择适合的缓存技术以应对高并发,实现系统相应的高性能,酷客多小程序经过慎重选型,选择了采用基于腾讯云服务的Redis弹性缓存技术,结合Redis官方推荐…

    Linux 2023年5月28日
    0104
  • rm命令弱爆了!

    大家好,我是良许。 创建、删除和修改文件是用户在 Linux 系统中执行的非常常见操作。大家都知道,在 Linux 系统里使用 rm 命令删除单个文件时,几乎一瞬间就完成了。但是如…

    Linux 2023年6月14日
    098
  • SQL51 查找字符串中逗号出现的次数

    本题链接本题表结构如下所示。 +—-+————–+ | id | string | +—-+————–+ | 1 | 10,A,B | …

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