助手程序的任务是运行diff工具,使其以用户友好的方式显示这些文件,然后等待diff工具指示用户已经完成查看文件,并找出用户是否表示希望取消查看文件,或者继续查看下一个文件对。 This is the helper program.这是一个相对简单的shell脚本,只有100多行,但它使用了更多的shell脚本:特别是它使用了this larger mergetool helper library,它的shell脚本代码超过450行。 要提供您自己的工具,您必须(无论如何都要达到最佳使用效果)编写第二个(合并助手)库使用的shell脚本,以及提供有关如何运行所选工具的知识的第一个脚本。此交互的关键元素包括:
5条答案
按热度按时间0g0grzrc1#
如何在Atom这样的文本编辑器中查看git diff?我不想设置或使用diff工具,我只想在任何基本的文本编辑器中查看diff。
Diff输出只是文本,因此您可以将其重定向到一个文件并打开该文件,或者(取决于编辑器和平台)将输入直接通过管道传输到编辑器。
如果你确实想把编辑器作为diff工具运行,the documentation描述了如何调用编辑器,你可能想用一个 Package 器脚本在命令行的正确位置调用环境变量的atom。
附带问题:比较工具和任何文本编辑器有什么区别?
一个通用的文本编辑器不可能像一个专用的工具那样显示的那么好,至少,如果它能识别格式,它可以突出显示特定于差异的部分。
一个真正的比较工具通常会让你有机会看到文件的新旧版本,以及直观地显示更改的位置。它也可以突出显示行内的更改(比较本身是基于行的)。
我一般反对图文并茂,但既然我们真的在讨论界面...
1.在文本编辑器中打开
git diff
的输出:这与在终端读取diff没有什么不同,所以我看不出有什么好处,它确实突出显示了 * index * 行,但只有当我在一个diff中扫描多个块时才真正有用。
1.显示相同变更的GVim逃逸插件:
这是我的编辑器内的视图,带有vescent插件。你可以看到我从
join
行中删除了一个空格的行内高亮显示。如果我继续在右窗格中输入,它甚至会实时更新。这也是唯一一个语法正确的高亮显示源代码的视图。1.在meld中打开的相同更改
git difftool
这是一个更改如何适应整个文件IMO的最友好视图。
t98cgbkg2#
TL;DR:Git本身并不知道其他命令,所以你必须提供一组辅助指令 * 给 * Git,告诉它:* 要使用程序X作为一个比较工具,请执行_____*。你最好的选择是找到已经被别人构造的指令,就像在他自己的答案中添加的注解EncryptedWatermelon一样,但是如果做不到这一点,那么请参见下文。
请参阅Useless's answer了解一些实用技巧。
请注意,就Git本身而言,尽可能简单地说,diff 意味着 * 比较两个修订版 *。例如,两个修订版可以是两个提交,也可以是一个提交和工作树内容。Git有一些额外的特殊情况,因此您也可以将其用作标准Unix/Linux
diff
命令的更好版本,但大多数情况下,它是两个修订版。其中每一个都是一整套文件:考虑到这一点,下面是
git difftool
的工作:在少数情况下,比如当比较一个特定的提交和工作树时,它 * 可能 * 只是在适当的时候使用工作树副本,它仍然可以制作自己的副本,你在这里没有得到任何实际的承诺。
.tmp-123456
)助手程序的任务是运行diff工具,使其以用户友好的方式显示这些文件,然后等待diff工具指示用户已经完成查看文件,并找出用户是否表示希望取消查看文件,或者继续查看下一个文件对。
This is the helper program.这是一个相对简单的shell脚本,只有100多行,但它使用了更多的shell脚本:特别是它使用了this larger mergetool helper library,它的shell脚本代码超过450行。
要提供您自己的工具,您必须(无论如何都要达到最佳使用效果)编写第二个(合并助手)库使用的shell脚本,以及提供有关如何运行所选工具的知识的第一个脚本。此交互的关键元素包括:
.tmpwhatever
更有用的名称现有的两个shell脚本助手库都有一些后备功能,所以如果你的程序相对简单,现有的助手可以自己运行它。它们只需要知道 * 可执行文件在哪里,传递什么参数 * 以及 * 是否信任它的退出代码 *。你可以通过设置
difftool.*name*.cmd
和mergetool.*name*.trustExitCode
来设置git config
。例如:还可以(但不是那么好:文件名将是怪异和无用的),如果在 *
path
* 的命令对于“继续到下一个diff”退出零并且对于“现在退出”退出非零。wz8daaqr3#
git diff
将显示在你的控制台如果这输出是短的,否则它将到你的寻呼机.即less
或more
git difftool
将显示在tkdiff,xxdiff,meld,比较gvimdiff,...或任何你设置Difftools通常允许您在页导航为只读时编辑文件
c90pui9n4#
比较工具(例如:http://meldmerge.org/)将在2、3甚至4个面板(您的版本、远程版本、合并版本、祖先版本)中显示差异。
在文本编辑器上打开diff(这是我的偏好)会显示
diff
特殊字符,指示内容的添加、删除和修改,以及一些上下文边界信息。cgyqldqp5#
您还有since Git v1.7.8 (Oct. 2011)
git jump
git jump
**是一个脚本,用于帮助您在编辑器中跳转到项目的"有趣"部分。它的工作原理是以"quickfix"格式输出一组有趣的点,像vim这样的编辑器可以将其用作访问位置的队列(这个特性通常用于跳转到编译器产生的错误)。
例如,给定一个如下的diff:
git jump
会将此内容提供给编辑器:请务必使用Git 2.35(2022年第一季度):
git jump
(在contrib/
中)的"merge
"子命令忽略了路径规范和其他参数。参见Jeff King (
peff
)的commit 67ba13e(2021年11月9日)。(由Junio C Hamano --
gitster
--合并到commit a0f3df5,2021年12月10日)git-jump
:将"merge
"参数传递给ls-files
签署人:杰夫·金
当前我们会丢弃所有给git jump merge "的参数。
我们应该将它们传递给ls-files,因为它们很可能是路径规范。
这与
git jump diff
等的行为相匹配。在Git 2.40(2023年第一季度)中,
git jump
(在contrib/
中)学会了将"quickfix list
"表示为标准输出(而不是让它被它调用的编辑器使用),并学会了驱动emacs/emacsclient。参见Jeff King (
peff
)的commit 64685cb(2022年11月27日)。参见commit 9508dfd、commit cfb7b3b(2022年11月27日)和Yoichi Nakayama (
yoichi
)。(由Junio C Hamano --
gitster
--合并至commit 06ae40f,2022年12月14日)git-jump
:添加可选参数"--stdout
"签署人:中山洋一
它可以与Emacs上的M-x
grep
一起使用。即:
M-x × 1米21英寸
<RET>
git jump --stdout diff
<RET>