首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git diff,使用外部diff程序,只需一次

git diff,使用外部diff程序,只需一次
EN

Stack Overflow用户
提问于 2021-06-17 05:29:18
回答 4查看 174关注 0票数 1

在执行git diff时,有时我想使用不同的diff工具(例如,cmp或我自己的bin目录中的自制word-diff程序)。

许多类似于diff的程序都有一个类似于

代码语言:javascript
复制
-D <diffprog>

告诉他们使用另一个diff或类似diff的程序。

我知道git-difftool和this question,但这不是我想要的。我不希望预先配置一些东西,而且我今天想要使用的非标准命令可能不是我明天想要使用的非标准命令。理想情况下,我希望能够从命令行一次性地执行此操作。

(是否可以将difftool配置为能够使用官方列表中未列出的多个非标准工具?)

如果让git diff使用我选择的diff工具太麻烦了,我还可以使用下面这样的工具

代码语言:javascript
复制
git cat file | mydiff - file

我知道没有像"git cat“这样的命令。但这里的想法是手动比较文件的repo版本和本地版本,给出一个git命令,简单地发出文件的repo (或,在其他情况下,索引)版本。有这样的命令吗?

最后,如果没有我所问的假设的git diff -D diffprog选项,如果没有我假设的"git cat“命令,我希望它们是错误的吗?

EN

回答 4

Stack Overflow用户

发布于 2021-06-17 10:37:18

我想你可能在找像这样的东西

代码语言:javascript
复制
git show somecommit:path/to/file | mydiff - path/to/file

代码语言:javascript
复制
mydiff  <(git show somecommit:path/to/file) \
        <(git show someothercommit:path/to/file)

但有一小段手册页显示,difftool确实接受路径限制器,而且还有-x选项,所以我看不出有什么问题。对于你评论中的案例,我会使用

代码语言:javascript
复制
git difftool -yx mydiff @ -- file
票数 4
EN

Stack Overflow用户

发布于 2021-06-17 05:53:41

git difftoolgit中在外部查看器中打开diff的集成方式。

就cli选项而言,git difftool采用与git diff相同的参数,并在外部查看器中打开结果差异。

一个额外有用的选项是-d | --dir-diff,它将在一个临时目录中创建两个存储库的签出,并在“目录比较模式”中打开外部查看器:

代码语言:javascript
复制
git difftool -d <something> <something else>

至于外部工具的选择:

git config diff.tool kdiff3

  • you你可以配置一个默认的
  • :你可以使用-t | --tool :

选择任何你想要的工具

代码语言:javascript
复制
git difftool -t meld <something> <something else>

还可以通过在git configuration中创建

  • 条目来定义自定义命令

引用-t|--tool部分的文档:

通过设置配置变量difftool.<tool>.path,您可以显式地提供该工具的完整路径。

例如,您可以通过设置difftool.kdiff3.path来配置kdiff3的绝对路径。否则,git difftool假设该工具在PATH中可用。

通过在配置变量difftool.<tool>.cmd中指定要调用的命令行,可以自定义git difftool来运行替代程序,而不是运行已知的diff工具。

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

票数 3
EN

Stack Overflow用户

发布于 2021-06-17 23:19:30

除了jthill's answer中提到的原始git showgit cat-file -p技巧之外,您还可以使用LeGEC's answer中描述的git difftool。为避免配置出错或需要特殊的一次性配置文件,请考虑在前端git命令中添加-c选项:

代码语言:javascript
复制
git -c diff.tool=whatever ...

此模式通常有效:如果您想要假装配置文件加起来等于将某个特定的x设置为y,那么git config -c git config -c就可以解决这个问题。将多个-c选项收集在一起,并按配置方式使用。

(我认为这会添加到配置中,并依赖于“最后的配置覆盖以前的配置”之类的东西,所以对于像remote.remote.fetch,这样的多值设置,如果您需要避免选择用户配置,那么您目前必须使用像修改$HOME这样的技巧,它具有...缺点。即将发布的Git版本可以跳过系统和用户配置,用于特殊目的,包括Git自己的自检。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68010241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档