git常用工具difftool的使用

描述

git difftool是一个 Git 命令,允许您使用常见差异工具在文件之间比较和编辑文件。如两版本分支间需要比较合并可以用这个工具。

命令:

git difftool [<options>] [<commit> [<commit>]] [--] [<path>...

常见选项

-d --dir-diff

将修改后的文件复制到临时位置,然后对它们执行一个目录 diff。该模式在启动 diff 工具之前从不提示。

-y --no-prompt

启动 diff 工具前不要提示。默认是每次调用 diff 工具 前提示。

-t <tool> --tool=<tool>

使用<tool>指定的 diff 工具。有效值包括 bc, emerge,kompare,meld 和 vimdiff等。运行git difftool --tool-help有效的<工具>设置列表。

如果没有指定 diff 工具,git difftool将使用配置变量diff.tool。如果配置变量diff.tool没有设置,git difftool会选择一个合适的默认值。

您可以通过设置配置变量明确提供工具的完整路径difftool.<tool>.path。例如,您可以通过设置配置 kdiff3 的绝对路径difftool.kdiff3.path。否则,git difftool假定该工具在 环境变量PATH 中可用。

git difftool通过指定要在配置变量中调用的命令行,可以自定义运行其中一个已知的差异工具,以运行替代程序difftool.<tool>.cmd。

当git difftool用此工具调用(通过-t或--tool选项或diff.tool配置变量)所配置的命令行将具有可用以下变量来调用:LOCAL被设置为包含DIFF前图像的内容的临时文件的名字和REMOTE是设置为包含diff post-image内容的临时文件的名称。MERGED是正在比较的文件的名称。BASE是为了与自定义合并工具命令兼容而提供的,并且具有与$MERGED相同的值。

--tool-help

打印可能使用的差异工具列表--tool。

-g --no-gui

当git-difftool使用-g或--gui选项调用默认差异工具时,将从配置的diff.guitool变量中读取,而不是从中读取diff.tool。该--no-gui选项可用于覆盖此设置。

配置变量

如果尚未定义difftool等价物,则git difftool回退到git mergetool配置变量。

diff.tool

要使用的默认差异工具。

diff.guitool

--gui指定时使用的默认差异工具。

difftool.<tool>.path

覆盖给定工具的路径。如果您的工具不在 PATH 中,这非常有用。

difftool.<tool>.cmd

指定用于调用指定的 diff 工具的命令。

有关--tool=<tool>更多详细信息,请参阅上述选项

difftool.prompt

在每次调用 diff 工具前提示。

difftool.trustExitCode

如果被调用的 diff 工具返回非零退出状态,则退出 difftool。

使用

假如使用kdiff3作为比较工具

1. 下载kdiff3安装

windows:去官网下载双击安装。

Linux(Ubuntu):apt-get install kdiff3

2. 配置

我这儿配置成diff.guitool,而不是diff.tool是为了本机上即使不使用-t指定对比工具也有两个工具(kdiff3和vimdiff)可用。感觉更灵活些。

Windows:

git config --global --add diff.guitool kdiff3

git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe" #软件安装的位置

Linux(Ubuntu):

git config --global --add diff.guitool kdiff3

git config --global --add difftool.kdiff3.path "/usr/bin/diff3"

我看很多文章上还像下边这样配置了一下,看了api文档没怎么看懂,测试发现不配也可以。

git config --global --add difftool.kdiff3.trustExitCode false

3.使用

同git diff的命令一样,可以自由在工作区,缓存区,版本库之间比较

比较两个版本分支指定目录(seal-pc)和文件(seal-page/a.js)的差异

git difftool branch1 branch2 seal-pc/ seal-page/a.js

此时使用的是vimdiff一个文件一个文件进行比较。每次文件比较前会提示将要比例的文件。vimdiff适合一个个文件比较时查看。

git difftool -y branch1 branch2 seal-pc/ seal-page/a.js

比较同上。只是每次文件比较前不会提示将要比例的文件

git difftool -g -d branch1 branch2 seal-pc/ seal-page/a.js

使用比较软件kdiff3一次打开所有差异文件进行比较。

因为配置了-d,所以会一次性加载所有的文件进行比较,不加则一个一个文件进行比较

因为配置了-g,所以使用刚才配置的kdiff3进行比较。此kdiff3的启动路径也是我刚才配置的path路径里的值。而不是使用的环境变量PATH里的。

如果使用diff.tool配置了多个比较工具,则使用git difftool命令时可以实用-t=工具名指定使用的比例软件。如 git difftool -t=bc -d branch1 HEAD seal-pc/ seal-page/ 使用beyound compare工具进行比较

相关推荐
先跑起来再说5 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
承渊政道8 小时前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee
Doro再努力8 小时前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
摇滚侠11 小时前
MAC IDEA GIT 提交区显示了几个不存在的目录
git·idea
城东12 小时前
Git使用[远程仓库远端的head比本地和提交的head旧,其他人拉不到最新代码]
git·head·远程仓库远端·比本地和提交的head旧·其他人拉不到最新代码
何中应20 小时前
使用SSH地址拉取远程仓库代码报下面的错误
git
何中应20 小时前
Git本地仓库命令补充
git
sun0077001 天前
执行repo sync -c -d -j4以后,提交未git push的代码看不到了。要怎么恢复?
git
胖虎11 天前
Git 一个本地仓库同时推送到两个远程仓库(详细教程)
git·多远程仓库·双远程仓库·git双远程·git备份
春日见1 天前
如何创建一个PR
运维·开发语言·windows·git·docker·容器