# 比较文件差异
# 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 的执行:
[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