默认的git差异行为是依次打开每个差异文件(等待上一个文件关闭后再打开下一个文件)。
我正在寻找一种方法来打开所有的文件一次-在BeyondCompare例如,这将打开所有的文件在选项卡内同一BC窗口。
这将使审查一组复杂的变更更加容易;在差异文件之间来回切换,忽略不重要的文件。
我确实找到了这个方法 (GitDiff.bat和GitDiff.rb),它将文件复制到旧/新临时dirs,然后对它们进行文件夹比较。
但是我宁愿直接查看工作文件(从工作目录),因为BeyondCompare有一个方便的功能,可以在diff窗口内编辑文件,这对于快速清理非常好。
编辑:在git邮件列表中回答我的问题的类似的方法。
Araxis Merge有一个'-nowait'命令选项的注意到这里:
-nowait防止compare等待比较被关闭
也许这会返回一个立即退出码,可以工作,有人经历过吗?找不到类似的BeyondCompare选项…
你可以使用gitk同时查看所有的差异
如果你想要做的就是打开当前修改过的所有文件,试试下面的方法:
vi $(git status | sed -n '/.*modified: */s///p')
如果您正在提交“复杂的更改集”,您可能需要重新考虑您的工作流。git的一个非常好的特性是,它使开发人员可以轻松地将复杂的更改集简化为一系列简单的补丁。与其尝试编辑当前修改的所有文件,你可能想要查看
Git添加补丁
这是我决定的……
将以下代码复制到名为git-diffall的文件(无扩展名):
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)
cmd
C:\Program Files (x86)\Git\cmd
并像git diff一样使用:
git diff
git diffall git diffall HEAD git diffall --cached git diffall rev1..rev2 etc...
注意:它的关键是,参数,它告诉外部diff命令在后台任务中运行,以便立即处理文件。在BeyondCompare的情况下,这将打开一个屏幕,每个文件都在自己的选项卡中。
从git v1.7.11开始,可以使用git difftool --dir-diff执行目录差异。
git
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}" )
下面的答案适用于v1.7.11之前的git安装。
同样的问题也被问到了Git邮件列表上。
我在电子邮件线程的基础上组合了一个shell脚本,它在任意提交之间执行目录差异。
从git v1.7.10开始,git-diffall脚本包含在标准git安装的contrib中。
contrib
对于v1.7.10之前的版本,您可以从GitHub上的git-diffall项目进行安装。
以下是项目描述:
git-diffall脚本提供了一个 基于目录的差异机制 git。脚本依赖于 Diff.tool配置选项 决定使用什么diff查看器 该脚本兼容所有的 的范围 diff的修正: 1) git diffall:显示差异之间 工作树和阶段性更改 2) git diffall --cached [<commit>]:显示 分段更改和HEAD之间的差异 (或其他命名的提交) 3) git diffall <commit>:显示差异之间 工作树,命名为commit 4) git diffall <commit> <commit>: show diff 在两个命名的提交 5) git diffall <commit>..<commit>:与 以上< br > 6) git diffall <commit>...<commit>:显示变化 在树枝上包含和向上 第二,从共同出发 <commit> 注意:所有表单都有可选路径 限幅器[--] [<path>] < / p > 此脚本基于的示例 由Thomas Rast提供 列表< / > . < / p >
git-diffall脚本提供了一个 基于目录的差异机制 git。脚本依赖于 Diff.tool配置选项 决定使用什么diff查看器
该脚本兼容所有的 的范围 diff的修正:
1) git diffall:显示差异之间 工作树和阶段性更改 2) git diffall --cached [<commit>]:显示 分段更改和HEAD之间的差异 (或其他命名的提交) 3) git diffall <commit>:显示差异之间 工作树,命名为commit 4) git diffall <commit> <commit>: show diff 在两个命名的提交 5) git diffall <commit>..<commit>:与 以上< br > 6) git diffall <commit>...<commit>:显示变化 在树枝上包含和向上 第二,从共同出发 <commit>
git diffall
git diffall --cached [<commit>]
HEAD
git diffall <commit>
git diffall <commit> <commit>
git diffall <commit>..<commit>
git diffall <commit>...<commit>
<commit>
注意:所有表单都有可选路径 限幅器[--] [<path>] < / p >
[--] [<path>]
此脚本基于的示例 由Thomas Rast提供 列表< / > . < / p >
我写了一个powershell脚本,将复制两个工作树,并与DiffMerge进行比较。所以你可以这样做:
GitNdiff master~3 .
例如,比较三个签入前的主分支与当前工作树。
它又新又亮,可能满是虫子。一个缺点是,工作树中尚未添加的文件将被复制到两个工作树中。它也可能很慢。
http://github.com/fschwiet/GitNdiff
meld有一个很好的特性,如果你给它一个在源代码控制下的目录(Git, Mercurial, Subversion, Bazaar和其他),它会自动列出所有更改的文件,你可以双击查看单个差异。
meld
在我看来,键入meld .并让它找出VCS要比配置VCS来启动meld容易得多。另外,无论你的项目使用什么VCS,你都可以使用相同的命令,如果你经常在它们之间切换,这是很棒的。
meld .
唯一的缺点是,meld扫描更改比从git/hg/svn传递更改要慢,尽管它是否慢到足以成为一个问题,这将取决于您如何使用它。
对于那些有兴趣在Mac OS X和Araxis上使用git-diffall的人,我在github上分叉了git-diffall项目,并添加了一个包装Araxis合并命令的AppleScript。注意:这是Mac OS X的Araxis Merge附带的araxisgitdiff文件的稍微修改克隆。
araxisgitdiff
https://github.com/sorens/git-diffall
git meld => https://github.com/wmanley/git-meld是一个很棒的脚本,它将在一个窗口中打开所有文件的整齐差异。
git meld
扩散也有VCS集成。它与大量其他VCS进行互操作,包括SVN、Mercurial、Bazaar……对于Git来说,如果部分更改(但不是全部更改)是阶段性的,它甚至会显示三个窗格。在冲突的情况下,甚至会有四个窗格。
使用
diffuse -m
在Git工作副本中。
要我说,这是十年来我见过的最好的视觉差异。(我也试过融合。)
下面使用meld和kdiff3
git difftool --dir-diff origin/branch1..origin/branch2
在一个窗口中打开您可以轻松浏览的所有文件。 可以在origin/branch-name
例如:git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1
git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1