当我输入git diff时,我希望看到一个并排的diff,就像用diff -y一样,或者像在kdiff3这样的交互式diff工具中显示diff。如何做到这一点呢?
当前回答
其他几个人已经提到了用于git的cdiff,但没有人给出它的完整实现。
设置cdiff:
git clone https://github.com/ymattw/cdiff.git
cd cdiff
ln -s `pwd`/cdiff ~/bin/cdiff
hash -r # refresh your PATH executable in bash (or 'rehash' if you use tcsh)
# or just create a new terminal
编辑~ /。Gitconfig插入这些行:
[pager]
diff = false
show = false
[diff]
tool = cdiff
external = "cdiff -s $2 $5 #"
[difftool "cdiff"]
cmd = cdiff -s \"$LOCAL\" \"$REMOTE\"
[alias]
showw = show --ext-dif
关闭寻呼机是cdiff与Diff一起工作所必需的,它本质上是一个寻呼机,所以这很好。不管这些设置,Difftool都能正常工作。
需要show别名,因为git show仅通过参数支持外部差异工具。
diff external命令后面的“#”很重要。Git的diff命令向diff命令追加了一个$@(所有可用的diff变量),但我们只想要这两个文件名。因此,我们用$2和$5显式地调用这两个,然后将$@隐藏在注释后面,否则会使sdiff混淆。导致如下错误:
fatal: <FILENAME>: no such path in the working tree
Use 'git <command> -- <path>...' to specify paths that do not exist locally.
Git命令现在产生并排差异:
git diff <SHA1> <SHA2>
git difftool <SHA1> <SHA2>
git showw <SHA>
Cdiff usage:
'SPACEBAR' - Advances the page of the current file.
'Q' - Quits current file, thus advancing you to the next file.
你现在通过git diff和difftool得到了并行的diff。如果需要,还可以使用cdiff python源代码进行高级用户定制。
其他回答
我用色差。
在Mac OS X上,使用
$ sudo port install colordiff
在Linux上可能会安装colordiff或类似的东西,这取决于你的发行版。
然后:
$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD
或者创建别名
$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""
然后你就可以使用它了
$ git diffy HEAD^ HEAD
我称它为“diffy”,因为diff -y是unix中并排的diff。Colordiff还添加了更好的颜色。 在选项-ydw中,y表示并排,w表示忽略空白,d表示产生最小的diff(通常作为diff会得到更好的结果)
当我在寻找一种使用git内置方式来定位差异的快速方法时,这个问题出现了。我的解决方案标准:
快速启动,需要内置选项 可以处理多种格式,xml,不同的编程语言 快速识别大文本文件中的小代码更改
我找到这个答案是为了给git上色。
为了获得并排diff而不是行diff,我调整了mb14在这个问题上的优秀答案,使用以下参数:
$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]"
如果你不喜欢额外的[-或{+选项——word-diff=color可以使用。
$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]" --word-diff=color
这有助于与json和xml文本以及java代码进行适当的比较。
总之,——word-diff-regex选项与颜色设置一起具有非常有用的可见性,与标准行差异相比,当浏览带有小行更改的大文件时,可以获得彩色的并排源代码体验。
export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'
然后简单的:
git diff
对于unix,只组合git和内置的diff:
git show HEAD:path/to/file | diff -y - path/to/file
当然,您可以用任何其他git引用替换HEAD,并且您可能希望在diff命令中添加-W 170之类的东西。
这里假设您只是将您的目录内容与过去的提交进行比较。两个提交之间的比较比较复杂。如果你的shell是bash,你可以使用“进程替换”:
diff -y -W 170 <(git show REF1:path/to/file) <(git show REF2:path/to/file)
其中REF1和REF2是git引用-标签,分支或哈希。
我个人非常喜欢icdiff !
如果你在Mac OS X上使用HomeBrew,只需安装icdiff即可。
为了获得正确的文件标签,加上其他很酷的功能,我在~/.gitconfig中有:
[pager]
difftool = true
[diff]
tool = icdiff
[difftool "icdiff"]
cmd = icdiff --head=5000 --highlight --line-numbers -L \"$BASE\" -L \"$REMOTE\" \"$LOCAL\" \"$REMOTE\"
我用git difftool
推荐文章
- 为什么调用git分支——unset-upstream来修复?
- Windows git“警告:LF将被CRLF取代”,这是警告尾巴向后吗?
- git中的哈希冲突
- git可以自动在空格和制表符之间切换吗?
- Git暂存文件列表
- 如何将git配置存储为存储库的一部分?
- 如何修改GitHub拉请求?
- 如何在Github和本地删除最后n次提交?
- 我如何调试git/git-shell相关的问题?
- 错误:无法使用rebase进行拉取:您有未分阶段的更改
- Git隐藏未缓存:如何把所有未分期的变化?
- 真实的恶魔
- 如何从另一个分支获得更改
- Git:权限被拒绝(publickey)致命-无法从远程存储库读取。克隆Git存储库时
- git reflog和log有什么区别?