您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页命令行下Git调用IDEA的diff功能

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

来源:华佗小知识

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

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

其中, 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 旧文件的SHA1
    old_mode 旧文件的mode(文件类型+文件权限)
    new_file 新文件的路径
    new_hex 新文件的SHA1
    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_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"

不只是IDEA diff, 只要是提供了命令行接口的diff工具, 都可将其设置为外部diff工具.

至此, 本文就基本结束了, 受限于篇幅, 本文只介绍了最简陋的diff脚本, 某些情况下是报错的, 例如: 新增文件, 删除文件. 感兴趣的读者, 可继续自行完善此脚本!
禁用外部diff工具

最后说一下如何禁用外部diff工具, 通过--no-ext-diff选项即可禁用外部diff工具, 即git diff --no-ext-diff.
参考

    Git Documentation
    Git diff Documentation

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务