为什么Git社区似乎忽略了并排差异[关闭]


33

我曾经使用Windows,SVN,Tortoise SVN和Beyond Compare。这是进行代码审查的绝佳组合。

现在,我使用OSX和Git。我已经设法将bash脚本与Gitx和DiffMerge融合在一起,提出了几乎无法接受的解决方案。

一年多来,我一直在与这种设置以及类似的设置混为一谈。我也尝试过使用Github差异查看器和Gitx差异查看器,所以好像我没有给他们机会。

有这么多聪明的人用Git做伟大的事情。为什么不选择查看整个文件的并排差异?与曾经使用过这两种方式的人一起,我从来没有听说过有人更喜欢单+/-视图,至少在快速检查之外。


您可以将TortoiseGit设置为使用Beyond Compare来解决差异,在这种情况下,您将并排看到整个文件(但是我从来没有亲自测试过此设置[但是计划,这几天之一))。
wildpeaks 2011年

1
只是评论,我曾经使用Windows,SVN和Beyond Compare。但是,现在我使用Ubuntu + Git。幸运的是,我仍然可以使用我的老朋友Beyond Compare。它在Ubuntu上工作正常。虽然不是免费的,但对我来说却是值得的。:)抱歉,我无法在OSX上为您提供解决方案,但不想让人们认为Beyond Compare是仅Windows的解决方案。
David S

7年后,我仍然有这种感觉,但是我训练了自己,除了最复杂的情​​况以外,我都喜欢内联差异。然后,我与我的老朋友Beyond Compare爆发了。
凯尔·赫罗尼穆斯

Answers:


19

在这方面,我不能代表Linus,但是从哲学上讲,git处理difftools的方式是非常矛盾的。git做得很好,并使用外部工具进行其他所有操作,包括更复杂的差异化和合并。

我在OS X上也使用了DiffMerge和git,而且我不必求助于任何bash shell。这很棘手,但是我将git的difftool和mergetool设置配置为直接调用DiffMerge,现在我可以使用出色的可视化第三方工具查看diff并解决合并冲突。

这是我的配置:

[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"
[merge]
        tool = diffmerge
[diff]
        tool = diffmerge

1
这样做可以,但是当多个文件更改时,我可以一次查看它们,以git决定向我展示它们。我必须关闭一个才能打开另一个。这就是为什么当我想一次查看所有文件时也使用bash脚本的原因。
Kyle

我不知道您期望“一次全部看到它们”看到什么。但是请检查一下git diff --stat。为您提供所有更改文件的漂亮图形列表,以及更改的行数。
丹·雷

多考虑一下“一次全部打开”的事情...您一次可以编辑/查看多少个文件?我只能在任何给定时刻查看一个文件。我想我只是没有得到您希望的结果。
丹·雷

2
最好的例子是带有Beyond Compare的TortoiseSVN。例如,如果我的同事的上一次提交更改了3个文件,它将在列表中显示这三个文件。然后,我可以单击适当的文件以查看差异。我也可以打开3个单独的窗口,每个窗口都有不同的文件。然后,我可以根据需要在它们之间来回检查更改。基本上,它允许您以自己的方式查看所有更改,而不是以vcs指示的顺序依次查看。
凯尔·赫罗尼穆斯

1
你知道,你应该看看塔。这是我见过的最好的Mac git gui,它可以做您正在谈论的事情,并且还有更多。git-tower.com
Dan Ray

16

您会注意到,SVN本身也不提供并行解决方案。您列出的是第三方工具。与git中的大多数内容一样,它是非常可配置的,并且具有开箱即用的强大工具支持。您是否设置了mergetool?如果没有,您应该。如果这样做,请尝试git difftool。然后查看手册页中的配置选项。

我将KDiff3用作我的合并工具,因为它是一个很好的跨平台工具,并且无需进一步配置即可git difftool完全满足您的要求。


2
实际上,使用difftool可以,但是在查看大量文件时仍然失败。它们必须一次打开一次。要同时打开它们,我必须进行bash脚本黑客攻击。
Kyle Heironimus

9

这是* nix哲学。许多使用这些工具的人在终端上花费大量时间。终端不需要我们将手从键盘移动到鼠标。我知道我比视觉差异/合并工具更喜欢+/-样式,这主要是因为我只关心差异。我关心更改周围的3-4行以及更改本身。除此之外,还有很多其他信息对我毫无帮助。

差异通常用于快速查看已更改的内容。不看代码。

与GNU系统上的默认差异相比,我从未发现视觉差异工具非常有用。他们让我做的所有事情就是开始用鼠标弄乱,迫使我滚动浏览文件,弄清楚他们的用户界面,然后努力回到命令行,以便我对差异中遇到的问题可以做些什么。


1
vimdiff还可以,它通常只向您显示零件。我将其用于合并;无需鼠标。
替代

8
您是否看过同事所做的更改?在您不熟悉的代码区域?我一直都在做,而且我无法想象没有所有代码并排执行。对我来说,+ /-非常适合be所做的更改,但不适用于其他人。并不是说您错了或坏了或什么。只是问问。
Kyle Heironimus

1
我经常跳入同事更改的代码,通常是在我不熟悉的领域。我想我曾经并肩使用过3到4次,如果没有的话,很容易做到。这仅取决于您首选的操作方式。它为您工作,我认为这是不必要的。
Brian Knoblauch

0

从我个人的使用情况来看,我认为答案主要是差异比较短,没有关系。

对于代码审阅,我使用功能齐全的代码审阅工具,该工具为我提供了我喜欢的所有内容-例如注释,语法突出显示和并排视图。

git diff在暂存代码以进行提交时,我几乎只使用它。在这种情况下,差异就足够小了,而且足够新,所以我不需要查看上下文就可以记住发生了什么。

我选择的代码审查工具Phabricator,或者可能是IDE集成的工具,具有语言上下文感知能力。我认为github的pull-request流对于代码审查很糟糕,主要是因为它显示了统一的diff而不是并排的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.