ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-02-28 22:01:45  阅读:134  来源: 互联网

标签:Git old IDEA file new diff


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

IDEA diff

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

其中, IDEA的diff子命令, 需要两个参数: leftright. 一般情况下, left为旧文件, right为新文件.

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工具, 通过--no-ext-diff选项即可禁用外部diff工具, 即git diff --no-ext-diff.

参考

标签:Git,old,IDEA,file,new,diff
来源: https://www.cnblogs.com/wbourne/p/15943880.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有