我正在使用来获取分支更改以供审核git log -p master..newbranch
,但这仅给了我diff文件。如何使用外部工具(如Meld)查看此差异?我想看看仅在此特定分支中有什么更改(从分支开始到技巧)。
我知道我可以使用git difftool
该--dir-diff
选项来一次性比较所有文件。
但是使用difftool
with prompt 有它的用处(对于相当少的文件进行比较),特别是从 git 1.7.8 开始,你可以跳过一个文件。
但是,该提示不会显示差异队列中有多少文件或已经差异了多少。
您将如何在difftool
提示中显示该信息?
我正在考虑以一种并不真正适合的方式使用子模块,但我的目标是为开发人员简化一些事情。我有一个项目基本上仅由子模块组成 - 其中 4 个。重要的是它们彼此独立,否则我只会制作一个大的回购协议。从父存储库中,我可以通过执行 立即查看所有子模块的差异git diff --submodule=diff
。
但我真正想要的是相当于git difftool -d
但同时适用于所有子模块。理论上 difftool 应该与该--submodule=diff
标志一起使用(因为git difftool
具有与 diff 相同的选项),但事实并非如此。有想法吗?
默认的 git diff 工具(和合并工具)是什么?
我在哪里(以及如何)可以找到它?
我从未明确为 git difftool(也没有 mergetool)设置任何配置,
因此git config --get difftool
没有显示任何内容。
git 文档说(https://git-scm.com/docs/git-difftool):
diff.tool
如果未设置配置变量,git difftool
将选择合适的默认值。
我怎样才能知道它选择了哪一个?“合适
”
的算法是如何工作的?
让我分享一下我试图通过 git 找出当前选择的 diff 工具的原因:
我在执行时遇到了一些奇怪的 diff 结果git diff
(我怀疑 BOM 处理问题)。
我想询问供应商(例如,p4merge
),
但不确定是否是p4merge
,vimdiff
或其他什么。
我预计可能会有类似的命令git difftool --current
。
在Mercurial中,可以为外部差异和合并工具定义模式(以便仅为匹配指定模式的文件调用它们):
[diff-patterns]
**.ext = difftool
[merge-patterns]
**.ext = mergetool
Run Code Online (Sandbox Code Playgroud)
如何在Git中定义这样的模式?
git-config(1)中的[mergetool]部分未提及任何模式,掩码或任何类似的模式.
编辑:
这是我的.git/config的相关部分:
[diff]
tool = difftool
[difftool "difftool"]
cmd = difftool.git.sh "$LOCAL" "$REMOTE" "$BASE"
[merge]
tool = mergetool
[mergetool "mergetool"]
cmd = mergetool.git.sh "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
Run Code Online (Sandbox Code Playgroud)
现在它适用于所有文件.
我希望只为名称以.结尾的文件调用difftool和mergetool.ext
编辑:
我添加了一个文件.git/info/attributes,其中包含以下内容:
*.ext diff=difftool
*.ext merge=mergetool
Run Code Online (Sandbox Code Playgroud)
我还补充道
[diff "difftool"]
name = my custom diff driver
driver = difftool.git.sh %A %B %O
[merge "mergetool"]
name = my custom merge driver
driver = mergetool.git.sh %A %B %O …
Run Code Online (Sandbox Code Playgroud) 我使用git difftool来比较VIM中的2个大文件.我只想导航到不同的行.
如何使用GIT difftool在不同的行之间快速导航?
我正在寻找类似winmerge快捷键的东西:
Alt + down - 下一步更改
Alt + Up - Prev Change
我想使用meld作为git的diff工具.
如果我这样配置.gitconfig
:
[difftool]
prompt = false
[diff]
tool = meld
Run Code Online (Sandbox Code Playgroud)
并运行命令:$ git difftool
然后git为每个有更改的文件打开一个meld窗口.
但我希望在meld列表框中显示一个包含所有文件的窗口.我已经阅读了一些关于-d
或--dir-diff
选择的内容.
当我尝试:$ git difftool -d
然后打开一个窗口,每个meld部分中有一个目录树,但是包含空目录.
我无法从这里打开我的文件.
有关信息:
$ git --version
git version 1.9.1
$ meld --version
meld 1.8.4
$ lsb_release -d
Description: Ubuntu 14.04.2 LTS
Run Code Online (Sandbox Code Playgroud)
我git svn
也在使用,但我不认为这与我的问题有关; 因为据我所知git-svn,我的目录是一个简单的git目录.
相关问题:
查看分支与融合的差异?
我正在使用配置为difftool的Kaleidoscope的git.它已经好几个月了.它也在一两天前工作.今天,当我尝试做一个"git difftool"时,突然,git报道
fatal: unable to create temp-file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在谷歌上搜索建议这可能是本地git仓库中的目录权限问题.但是,即使在git repo上递归chown后,情况也没有改善.
Git的-difftool文件没有提到在那里它可能会试图创建此临时文件.有没有人对如何找到它有任何想法?
我是否可以将此工具配置为默认左侧而不是右侧的每个不同块的选择?
现在,解决方法是交换侧面,但这有点令人困惑.
嗨伙计我正在努力与git制作运行Beyond Compare作为我的difftool.
我正在使用"Git For Windows",Windows 7 32位和Beyond Compare 4
$ git --version
git version 1.9.5.msysgit.1
$ git config --list
[diff]
tool = bc3
[difftool "bc3"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
[merge]
tool = bc3
[mergetool "bc3"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
Run Code Online (Sandbox Code Playgroud)
现在我已经在这里和那里阅读了其他问题,并遵循以下说明:
我已经意识到它总是启动默认的diff控制台查看器/工具(vimdiff,如果我没错),尽管将上面提到的参数'--tool = bc3'或'--tool = anyname'传递给' git difftool'命令.
最后,它只适用于'git mergetool',在这种情况下,无法比较启动,你可以看到参数是相同的.
如果我忘记了某些内容或需要更多细节,请告诉我们谢谢
"当我输入命令git difftool"