默认的git差异行为是依次打开每个差异文件(等待上一个文件关闭后再打开下一个文件)。

我正在寻找一种方法来打开所有的文件一次-在BeyondCompare例如,这将打开所有的文件在选项卡内同一BC窗口。

这将使审查一组复杂的变更更加容易;在差异文件之间来回切换,忽略不重要的文件。


当前回答

这是我决定的……

复制以下代码到一个名为git-diffall的文件(没有扩展名):

#!/bin/sh
git diff --name-only "$@" | while read filename; do
    git difftool "$@" --no-prompt "$filename" &
done

将文件放在git安装目录的cmd文件夹中(例如C:\Program Files (x86)\Git\ cmd)

然后使用like you would git diff:

git diffall
git diffall HEAD
git diffall --cached 
git diffall rev1..rev2
etc...

注意:它的关键是&参数,它告诉外部diff命令在后台任务中运行,以便立即处理文件。在BeyondCompare的情况下,这将打开一个屏幕,每个文件都在自己的选项卡中。

其他回答

写了一个小工具,打开所有文件作为标签页在vim。

https://github.com/balki/vimtabdiff

您可以使用gitk同时查看所有的差异

Diffuse也有VCS集成。它与大量其他VCS进行互操作,包括SVN、Mercurial、Bazaar……对于Git来说,如果部分更改(但不是全部更改)是阶段性的,它甚至会显示三个窗格。在冲突的情况下,甚至会有四个窗格。

使用

diffuse -m

在Git工作副本中。

要我说,这是十年来我见过的最好的视觉差异。(我也试过融合。)

下面使用meld和kdiff3

git difftool --dir-diff origin/branch1..origin/branch2

在您可以轻松浏览的窗口中打开所有文件。 可以在原点/分支名称的地方使用变更集吗

例如:git difftool——dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1

注意这里Araxis Merge有一个'-nowait'命令选项:

-nowait防止compare等待比较被关闭

也许这会返回一个立即退出码,可以工作,有人经历过吗?找不到类似的BeyondCompare选项…