默认的git diff行为是依次打开每个diff文件(等待上一个文件关闭后再打开下一个文件)。
我正在寻找一次打开所有文件的方法-例如,在BeyondCompare中,这将打开同一BC窗口中选项卡中的所有文件。
这样可以更轻松地审查一组复杂的更改;在diff文件之间来回滑动并忽略不重要的文件。
默认的git diff行为是依次打开每个diff文件(等待上一个文件关闭后再打开下一个文件)。
我正在寻找一次打开所有文件的方法-例如,在BeyondCompare中,这将打开同一BC窗口中选项卡中的所有文件。
这样可以更轻松地审查一组复杂的更改;在diff文件之间来回滑动并忽略不重要的文件。
Answers:
从git
v1.7.11 开始,您可以git difftool --dir-diff
用来执行目录差异。
例如,此功能可与Meld 3.14.2配合使用,并让您浏览所有已修改的文件:
git difftool --dir-diff --tool=meld HEAD~ HEAD
这是一个方便的Bash函数:
git-diff-meld() (
git difftool --dir-diff --tool=meld "${1:-HEAD~}" "${2:-HEAD}"
)
以下答案适用git
于v1.7.11之前的安装。
在git邮件列表上也问了同样的问题。
我根据该电子邮件线程整理了一个shell脚本,该脚本在任意提交之间执行目录差异。
从git v1.7.10开始,该git-diffall
脚本包含在contrib
标准git安装的中。
对于v1.7.10之前的版本,可以从GitHub上的git-diffall
项目安装。
这是项目说明:
git-diffall脚本为git提供了基于目录的diff机制。该脚本依靠diff.tool配置选项来确定使用哪种diff查看器。
该脚本与用于指定diff修订范围的所有格式兼容:
1)
git diffall
:显示工作树和已执行的更改之间的差异
2)git diffall --cached [<commit>]
:显示工作树和已更改HEAD
(或其他命名的提交)之间的差异
3)git diffall <commit>
:显示工作树和已命名的提交之间的差异
4)git diffall <commit> <commit>
:显示两个已命名的提交之间的差异
5)git diffall <commit>..<commit>
:相同如上
6)git diffall <commit>...<commit>
:显示包含且直到第二个分支的变化,从两个分支的共同祖先开始<commit>
注意:所有表格均采用可选的路径限制器
[--] [<path>]
该脚本基于Thomas Rast在Git列表上提供的示例。
git difftool --dir-diff
和超越比较):我联系了Scooter Software(超越比较的作者),他们说这bcompare.exe
不是受支持的解决方案,并且如果一次打开的差异超过一个,可能会引起问题。他们计划bcomp.exe
在将来的版本中增加对文件夹diff的支持(与此同时,我将继续使用它bcompare.exe
作为不受支持的解决方法)。
--dir-diff
与Meld完美搭配。从那里,它可以让您选择和查看单个文件的差异。
这就是我所决定的...
将以下代码复制到一个名为git-diffall
(无扩展名)的文件中:
#!/bin/sh
git diff --name-only "$@" | while read filename; do
git difftool "$@" --no-prompt "$filename" &
done
将文件放在cmd
git install dir 的文件夹中(例如C:\Program Files (x86)\Git\cmd
)
并像您一样使用git diff
:
git diffall
git diffall HEAD
git diffall --cached
git diffall rev1..rev2
etc...
注意:关键是&参数,它告诉外部diff命令在后台任务中运行,以便立即处理文件。对于BeyondCompare,这将打开一个屏幕,每个文件都位于其自己的标签中。
"$filename"
为"../$filename"
。然后,它与Beyond Compare
git-diffall
文件添加到C:\Program Files\Git\cmd
文件夹后,是否需要重新启动Windows ?我完全按照指示进行了操作,但是这样做了 $ git diffall git: 'diffall' is not a git command. See 'git --help'. Did you mean this? difftool
meld
具有一个巧妙的功能,如果您在源代码管理下为它提供目录(Git,Mercurial,Subversion,Bazaar以及其他),它将自动列出所有更改的文件,您可以双击以查看各个差异。
与IMO相比,键入meld .
它并弄清楚VCS比配置VCS启动要容易得多meld
。另外,无论您的项目正使用哪种VCS,您都可以使用相同的命令,如果您在它们之间进行了很多切换,那将是一个很好的选择。
唯一的缺点是,对于meld来说,扫描更改要比从git / hg / svn传递更改慢,尽管我确定它是否足够慢才成为问题,但这取决于您的使用方式。
git diff
不提供)。
git meld
=> https://github.com/wmanley/git-meld是一个很棒的脚本,它将在一个窗口中打开所有文件的完整差异。
在这里注意到 Araxis Merge有一个'-nowait'命令选项:
-nowait防止比较等待比较结束
也许这会返回立即退出代码并且可以正常工作,有人遇到过这种情况吗?找不到BeyondCompare的类似选项...
Diffuse还具有VCS集成。它可以与大量其他VCS(包括SVN,Mercurial,Bazaar等)进行互操作。对于Git,如果上演了部分但不是全部更改,它甚至会显示三个窗格。在发生冲突的情况下,甚至会有四个窗格。
调用
diffuse -m
在您的Git工作副本中。
如果您问我,十年来最好的视觉效果就与众不同。(我也尝试过融合)。
我编写了一个powershell脚本,该脚本将复制两个工作树并与DiffMerge进行比较。因此,您可以执行以下操作:
GitNdiff master~3 .
例如,要将三个签入之前的master分支与当前工作树进行比较。
它的光泽和新的,可能充满了错误。缺点之一是工作树中尚未添加的文件被复制到两个工作树中。它也可能很慢。
对于那些对在具有Araxis的Mac OS X上使用git-diffall感兴趣的人,我在github上创建了git-diffall项目,并添加了一个包含Araxis Merge命令的AppleScript。注意:这是araxisgitdiff
Araxis Merge for Mac OS X附带的文件的稍作修改的副本。