当前位置 : 主页 > 编程语言 > 其它开发 >

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

来源:互联网 收集:自由互联 发布时间:2022-05-20
命令行下git diff, 有人欢喜有人厌, 本文以IDEA diff为例, 介绍如何更换Git的diff工具. 命令行下git diff, 有人欢喜有人厌, 本文以IDEA diff为例, 介绍如何更换Git的diff工具. IDEA diff IDEA虽然是一个
命令行下git diff, 有人欢喜有人厌, 本文以IDEA diff为例, 介绍如何更换Git的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工具时的方式
参考
  • Git Documentation
  • Git diff Documentation
上一篇:我的奋斗:我在外企那些年(二)
下一篇:没有了
网友评论