找回密码
 立即注册
首页 业界区 安全 命令行下Git调用IDEA的diff功能

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

枢覆引 3 天前
本文将介绍, 如何在命令行下, 让git diff命令调用IDEA的diff功能!
1.gif

IDEA diff

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

通过查看帮助得知, idea diff  可以调用IDEA比较两个文件. 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 旧文件的SHA1
  • old_mode 旧文件的mode(文件类型+文件权限)
  • new_file 新文件的路径
  • new_hex 新文件的SHA1
  • 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_file和new_file传递给IDEA diff.
  1. #!/bin/bash
  2. path="$1"
  3. old_file="$2"
  4. old_hex="$3"
  5. old_mode="$4"
  6. new_file="$5"
  7. new_hex="$6"
  8. new_mode="$7"
  9. 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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册