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


本文將介紹, 如何在命令行下, 讓git diff命令調用IDEA的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

假設我們將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_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工具時的方式

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM