我正在寻找一种同时打开所有文件的方法 - 在BeyondCompare中,例如,这将在同一BC窗口中的选项卡中打开所有文件。
这将使审核复杂的变更集更加容易;在差异文件之间快速切换并忽略不重要的文件。
从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-diffall
脚本已包含在标准Git安装的contrib
中。git-diffall
项目在GitHub中进行安装。以下是该项目的描述:
git-diffall脚本为Git提供了基于目录的差异机制。 该脚本依赖于diff.tool配置选项来确定使用哪个差异查看器。
该脚本与用于指定要差异化的修订范围的所有形式兼容:
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>
:显示包含并到第二个提交的分支上的更改,从它们俩的公共祖先开始注意:所有形式都可以附加路径限制器
[--] [<path>]
此脚本基于Git列表上Thomas Rast提供的示例。
git difftool --dir-diff
和Beyond Compare的更新:我联系了Beyond Compare的作者Scooter Software,他们表示bcompare.exe
并不是一个受支持的解决方案,并且如果同时打开多个diff,则可能会导致问题。他们计划在将来的版本中为bcomp.exe
添加对文件夹diff的支持(与此同时,我将继续使用bcompare.exe
作为不受支持的解决方法)。 - Peter Rustgit difftool --dir-diff
方面没有成功,但https://github.com/thenigan/git-diffall与BC4集成得很好。FYI,我在Mac OS上。 - Tim D--dir-diff
命令可以与 Meld 完美配合。然后,它将允许您选择和查看单个文件的差异。 - mkasberg这是我最终采用的方案...
将以下代码复制到一个名为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
)
使用方法与git diff
相同:
git diffall
git diffall HEAD
git diffall --cached
git diffall rev1..rev2
etc...
说明:关键在于 & 参数,它告诉外部diff命令在后台任务中运行,以便立即处理文件。在BeyondCompare中,这将为每个文件打开一个带有自己选项卡的屏幕。
"$filename"
改为"../$filename"
。然后就可以与Beyond Compare完美配合了。 - Dave Cgit-diffall
文件添加到C:\ Program Files \ Git \ cmd
文件夹后,我们需要重新启动Windows吗?我按照指示进行了操作,但执行以下命令时出现错误:`$ git diffall
git: 'diffall' is not a git command. See 'git --help'.Did you mean this?
difftool` - nesdisC:\Program Files (x86)\Git\cmd
不在路径中。这种情况下,git-diffall文件需要放置在路径中的文件夹中。例如:C:\SPB_Data\bin
。在我的情况下,git实际上在路径 /mingw64/bin/git
中。 - nesdisGIT_ROOT=$(git rev-parse --show-toplevel)
,然后更改了difftool行,以便文件名以根目录为前缀:git difftool "$@" --no-prompt "$GIT_ROOT/$filename" &
。 - SteveDoniemeld
有一个不错的特性,如果你给它一个受版本控制的目录(Git、Mercurial、Subversion、Bazaar和可能还有其他),它将自动列出所有已更改的文件,并且你可以双击查看各个文件之间的差异。
我认为只需键入meld .
让它自行确定版本控制系统,比配置版本控制系统来启动meld
要容易得多。而且,您可以使用相同的命令,无论您的项目使用的是哪种版本控制系统,这对于经常在不同的版本控制系统之间切换的人来说非常方便。
唯一的缺点是,与从git/hg/svn传递更改相比,meld扫描更改的速度较慢,但是否足够慢以成为问题将取决于您如何使用它。
git diff
不提供的。 - kynanbranch1
,然后使用gitk
导航到branch2
并执行“mixed reset”。然后,我可以使用meld
查看从branch1
到branch2
更改的文件。 - kopporgit difftool --dir-diff origin/branch1..origin/branch2
打开所有文件,方便浏览的窗口。可以在origin/branch-name的位置使用changesets。
例如:git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1
git meld
=> https://github.com/wmanley/git-meld 是一个很棒的脚本,可以在单个窗口中打开所有文件的清晰差异。
diffuse -m
对于那些想在Mac OS X上使用Araxis的git-diffall的人,我在github上fork了git-diffall项目,并添加了一个AppleScript来包装Araxis Merge命令。注意:这是Araxis Merge for Mac OS X附带的araxisgitdiff
文件的略微修改的克隆版本。
GitNdiff master~3 .
例如,要比较三次提交前的主分支与当前工作树。
它非常亮和新,但可能充满了错误。一个缺点是还未添加到您的工作树中的文件会复制到两个工作树中。这也可能会很慢。