# 比较文件差异

# 1. git diff

对比『工作空间中的文件』与当前 Git 本地仓库中的最新、最近的版本版(也就是 HEAD 版本)之间的差异,使用命令 git diff <文件名>

不过,git diff,只在终端里显示并不够直观,像是这样:

$ git diff
diff --git a/22 b/22
index e69de29..d83fdff 100644
--- a/22
+++ b/22
@@ -0,0 +1 @@
+ddddddddddddddddddddd
\ No newline at end of file
diff --git a/4.txt b/4.txt
index e69de29..abaef31 100644
--- a/4.txt
+++ b/4.txt
@@ -0,0 +1 @@
:...skipping...
diff --git a/22 b/22
index e69de29..d83fdff 100644
--- a/22
+++ b/22
@@ -0,0 +1 @@
+ddddddddddddddddddddd
\ No newline at end of file
diff --git a/4.txt b/4.txt
index e69de29..abaef31 100644
--- a/4.txt
+++ b/4.txt
@@ -0,0 +1 @@
+ssdddddddddddddddddd
\ No newline at end of file

注意

强烈建议使用类似 Beyond Compare 这样的独立的第三方比较工具来进行比较。

另外,有些 Git 客户端也自带了类似的内容比较界面。

# 2. git difftool

git difftool 命令是 git diff 命令的升级版,它是调用第三方工具来进行比较。这些可用作比较的第三方工具中,最著名的比较工具是 Beyond Compare(可惜是收费的)。现在,随着 VS Code 的流行,有些人也习惯性使用 VS Code 作为 difftool( 和 megetools )

假设你的 Beyond Compare 没有改变默认的安装路径,那么它就是在 C:\Program Files 下的。

在你的 C:\Users\<用户名>\.gitconfig 文件中追加下述内容:

[diff]
  tool = beyondcompare4
[difftool "beyondcompare4"]
  cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" $LOCAL $REMOTE
[difftool "vscode"]
  cmd = code --wait --diff $LOCAL $REMOTE

了解

有些资料和文档上是通过命令来进行设置的,其实 git 的设置命令本质上也就是在向 .gitconfig 配置文件中写入配置项。所以,你是通过配置命令进行配置,还是直截了当地修改 .gitconfig 配置文件,本质上是一样的。

当你再使用 git difftool <文件名> 来查看文件的变动情况时,git 会触发 Beyond Compare 的执行,让 Beyond Compare 来展示工作区和本地仓库中的区别。

虽然 GitKraken 中也内置了 diff 功能,能以图形化的形式展现工作区的变动,不过你也可以在 GitKraken 中触发 Beyond Compare 的执行:

git-difftool-GitKraken.gif

[diff]
    tool = beyondcompare4
[difftool "beyondcompare4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" \"$LOCAL\" \"$REMOTE\"

[merge]
    tool = vscode
[mergetool]
    keepbackup = false
[mergetool "beyondcompare4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"
    trustexitcode = true
[mergetool "vscode"]
  keepbackup = false
  cmd = code --wait $MERGED
  trustexitcode = true