命令行下Git调用IDEA的diff功能
命令行下git diff, 有人欢喜有人厌, 本文以IDEA diff为例, 介绍如何更换Git的diff工具.
IDEA diff
IDEA作为一个图形化工具, 其实也提供了极少一部分命令行接口, 将IDEA安装目录下的bin目录添加到PATH环境变量中, 我们就可以在命令行中调用IDEA的命令了.

其中, IDEA的diff子命令, 需要两个参数: left和right. 一般情况下, left为旧文件, right为新文件.
Git外部diff机制(Git external diff)
Git自带了一个命令行的diff工具, 当然, 我们也可以自定义diff工具. 自定义的diff工具, 在git中叫做 Git external diff, 本文暂且称其为 Git外部diff工具.
如果我们设置了外部diff工具的话, Git将会调用我们所设置的外部diff工具, 并传递7个参数:
path文件的路径old_file旧文件的路径old_hex旧文件的SHA1old_mode旧文件的mode(文件类型+文件权限)new_file新文件的路径new_hex新文件的SHA1new_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_file和new_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工具, 通过--no-ext-diff选项即可禁用外部diff工具, 即git diff --no-ext-diff.
参考
命令行下Git调用IDEA的diff功能的更多相关文章
- 命令行下Git的使用
命令行下Git的使用 写在前边的话 以自己即将进行的毕设项目为例,进行Git使用的简易说明.不过由于校园网络的限制,故使用GitOSC. 快速开始 本次git使用位于自己的个人PC上,所以将个人的Gi ...
- bdtrans 一个命令行下的机器翻译工具
现如今,机器翻译技术已经越来越成熟了,尽管从整体来看机器翻译的结果还不是特别如意,但是也足以应付一般的翻译需求了.近几年机器翻译平台层出不穷,国外比较出名的翻译平台有Google翻译.必应翻译等,国内 ...
- Git命令行下解决冲突
使用Git时,在pull.merge.rebase的过程中,经常会遇到conflict的情况. 遇到conflict时,以上处理过程会终端,并且命令行中显示(xxx|MERGING)的状态(Windo ...
- IntelliJ IDEA下Git的配置与使用(命令行下)
1. 安装Git并配置好Git 安装与配置参见Git与码云(Git@OSC)入门-如何在实验室和宿舍同步你的代码(1)中的2.在本机安装Git与3.1 配置git. 2. 创建远程仓库 在gitee. ...
- git 命令行下浏览器tig使用记录
git 命令行下浏览器tig使用记录 tig 是一款优化 git 命令行的工具,使 git 命令行更加的便捷人性化 .如果用习惯了,会上瘾. 以下是一些使用记录: 安装成功后,在 Repo 文件夹下, ...
- Windows Git Bash命令行下创建git仓库并更新到github
大二的时候就听过老师说有一个叫git的版本管理工具,当时只是听老师说说而已,也没有去使用它,因为当时用过svn,就感觉自己没多少东西需要git管理. 最近几天,我经常在开源中国看别人的帖子,看到别人对 ...
- 详解Linux命令行下常用svn命令
1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/do ...
- VS2015——命令行下编译、静态库动态库制作以及断点调试
c程序编译流程 程序的基本流程如图: 1. 预处理 预处理相当于根据预处理指令组装新的C/C++程序.经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的 ...
- windos命令行下的程序编写
1.命令行下写程序. 写程序一定要用IDE?不,我还可以用记事本呢.呵呵,写程序一定要用记事本?? ———————————————— 命令行下输入copy con test.txt后回车可在相应目录下 ...
随机推荐
- Git 基本操作指南
Git 基本操作指南 内容概要 这个作业属于哪个课程 2022面向对象程序设计 这个作业要求在哪里 2022面向对象程序设计寒假作业1 这个作业的目标 Git & Github 作业正文 如下 ...
- 《剑指offer》面试题53 - II. 0~n-1中缺失的数字
问题描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 示例 1: 输入: [ ...
- 【刷题-LeetCode】230. Kth Smallest Element in a BST
Kth Smallest Element in a BST Given a binary search tree, write a function kthSmallest to find the k ...
- 发现一个现象:golang中大量的go出新协程,必然在GC统计中出现1ms以上的GC延迟
结论:协程池还是有必要的,能够有效减小GC的压力. 我的某个服务,为了方(tou)便(lan),一些异步处理的场合直接go出协程来处理. 服务中使用这样的代码来统计GC的延迟: var mem run ...
- golang中mutex使用
package main import ( "fmt" "sync" "time" ) /* 高并发是golang语言最大的亮点 一个线程可 ...
- mesos是什么
听过不少人在讨论 Mesos,然而并不是很明白 Mesos 到底能够解决什么问题,使用场景是怎样的,周伟涛(国内较早一批接触使用 Docker,Mesos 等技术的开发者)用一句话形容它, Mesos ...
- JVM专题2: JVM内存结构
合集目录 JVM专题2: JVM内存结构 Java 内存分配 JVM 内存结构 The JVM is an abstract computing machine that enables a comp ...
- Halcon视觉入门芯片识别
Halcon视觉入门芯片识别 需求 有如下图的一个摆盘,摆盘的方格中摆放芯片,一个格子中只放一个,我们需要知道每个方格中是否有芯片去指导我们将芯片放到空的方格中. 分析 通过图片分析得出 我们感兴趣的 ...
- 如何完整删除DISK DRILL
前两天装了DISK DRILL 右上角出现一个温度提示的图标 现在把DISK DRILL卸载了 但右上角的温度提示图标仍然存在 请问如何删除? 打开系统偏好设置----用户与群----管理员(点 ...
- StringUtils.isBlank(str)和StringUtils.isEmpty(str)的区别
1.StringUtils.isEmpty(CharSequence cs)实现源码 public static boolean isEmpty(CharSequence cs) { return c ...