我注意到这git difftool很慢.每次diff调用之间会出现大约1..2秒的延迟.
要对它进行基准测试,我编写了一个自定义difftool命
#!/bin/sh
echo $0 $1 $2
Run Code Online (Sandbox Code Playgroud)
并配置Git在我的使用中使用此工具 ~/.gitconfig
[diff]
tool = mydiff
[difftool "mydiff"]
prompt = false
cmd = "~/mydiff \"$LOCAL\" \"$REMOTE\""
Run Code Online (Sandbox Code Playgroud)
我在Git源代码上测试了它:
$ git clone https://github.com/git/git.git
$ cd git
$ git rev-parse HEAD
1bc8feaa7cc752fe3b902ccf83ae9332e40921db
$ git diff head~10 --stat --name-only | wc -l
23
Run Code Online (Sandbox Code Playgroud)
当我计时git difftool时259b5e6d33,结果非常缓慢:
$ time git difftool 259b5
mydiff /dev/null Documentation/RelNotes/2.6.3.txt
...
mydiff /tmp/mY2T6l_upload-pack.c upload-pack.c
real 0m10.381s
user 0m1.997s
sys 0m6.667s
Run Code Online (Sandbox Code Playgroud)
通过尝试更简单的脚本,它会更快:
$ time git diff …Run Code Online (Sandbox Code Playgroud) 我想使用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目录.
相关问题:
查看分支与融合的差异?
我目前正在使用以下命令设置Meld difftool在Babun中工作:
git config --global diff.tool meld
git config --global difftool.prompt false
git config --global difftool.meld.path "/cygdrive/c/Program\ Files\ \(x86\)/Meld/Meld.exe"
git config --global difftool.meld.cmd '/cygdrive/c/Program\ Files\ \(x86\)/Meld/Meld.exe $LOCAL $REMOTE'
Run Code Online (Sandbox Code Playgroud)
这是有效的,当我运行时,Meld会打开两个文件
git difftool HEAD HEAD^
Run Code Online (Sandbox Code Playgroud)
但是,第二个文件(来自远程)没有打开,我得到了
There was a problem opening the file "\tmp\xxx_FILENAME.EXTENSION"
Run Code Online (Sandbox Code Playgroud)
但是,当我从git bash运行difftool时,它可以工作.我的设置有问题吗?
目前我正在处理的基于 Git 的项目,我通常总是在一个子目录中。
下面是我git log --name-only从存储库根目录的子目录运行命令时的输出。
commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date: Mon Mar 27 09:36:24 2017 +1300
Commit message
child_dir1_from_root/file1 | 184 +--
child_dir2_from_root/file2 | 2 +-
Run Code Online (Sandbox Code Playgroud)
我如何git log才能输出类似下面的内容?这使得比较列出的文件非常容易,只需复制文件路径并运行,git diff HEAD~ {copied_file_path}而不必手动修改文件路径然后运行命令。
commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date: Mon Mar 27 09:36:24 2017 +1300
Commit message
file1 | 184 +--
../child_dir2_from_root/file2 | 2 +-
Run Code Online (Sandbox Code Playgroud)
我查看了git log文档,但没有任何突出之处。我可以编写一个脚本来做到这一点,但我很好奇 Git 是否有内置方式。
在git config --global interactive.diffFilter diff-highlight我之后.gitconfig:
# This is Git's per-user configuration file.
[user]
name = Vitaly Zdanevich
email = vitaly.zdanevich@xxx.com
[core]
excludesfile = /Users/vitaly/.gitignore_global
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge --skip -- %f
process = git-lfs filter-process --skip
required = true
[diff]
tool = vimdiff
context = 20
[difftool]
prompt = false
[interactive]
diffFilter = diff-highlight
Run Code Online (Sandbox Code Playgroud)
但是在git commit -p并且git add -p我看到默认情况下没有颜色的相同差异逐行terminal.app:
我也试过: …
我一直在关注本指南,了解如何区分 Microsoft Word 文档,但我遇到了这个错误:
Usage: /usr/bin/docx2txt.pl [infile.docx|-|-h] [outfile.txt|-]
/usr/bin/docx2txt.pl < infile.docx
/usr/bin/docx2txt.pl < infile.docx > outfile.txt
In second usage, output is dumped on STDOUT.
Use '-h' as the first argument to get this usage information.
Use '-' as the infile name to read the docx file from STDIN.
Use '-' as the outfile name to dump the text on STDOUT.
Output is saved in infile.txt if second argument is omitted.
Note: infile.docx can also be a directory name …Run Code Online (Sandbox Code Playgroud) 读完这篇之后,我通过在 ~/.gitconfig 中添加以下几行,将 git 配置为使用 vimdiff 作为 diff/merge 工具:
[diff]
tool = vimdiff
[merge]
tool = vimdiff
[difftool]
prompt = false
[alias]
d = difftool
Run Code Online (Sandbox Code Playgroud)
但git difftool仍然只是打印差异(没有 vimdiff)。有任何想法吗?
更新。
似乎git difftool工作正常,如果我在 repo 中有一些未提交的更改,即它按预期打开 vimdiff。但是如果我git difftool在与冲突合并后打开 vimdiff,它就无法打开。任何想法为什么?
我犯了一个巨大的错误。
我已经配置git difftool为使用vimdiff,然后我执行了一个比较整个存储库的命令:
git difftool tag1 tag2
现在 difftool 以 diff 模式为每个已更改的文件启动 vim。当我关闭 vim 时,它会用下一对文件再次启动。一般来说,这就是我想要的,但是如果队列中的文件太多,我可以以某种方式中止这个过程吗?我知道我可以关闭终端,但是有更好的方法吗?
我在Windows上将git bash与Beyond&Compare用作difftool(但相同的事情发生在任何外部difftool上)。
我希望我的终端不要等待difftool退出以便将终端控制权还给我。对我来说,在命令行中执行其他git任务时,保持difftool会话保持打开状态很有用。
可能吗 ?
我不知道这是否有任何关系,trustexistcode但是此设置不会改变我想要的终端行为。
安装KDiff3用于管理冲突后git,仍然为我打开默认的:
这是这个答案中提到的配置:
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false
Run Code Online (Sandbox Code Playgroud)
注意:我可以KDiff3使用简单文件单独运行,但无法在我的 git 项目中运行它。任何想法?
编辑:这是我的 .gitconfig :
[user]
email = vahid.vdn@gmail.com
name = vahid najafi
[diff]
tool = kdiff3
guitool = kdiff3
[merge]
tool = diffmerge
tool = kdiff3
tool = kdiff3 …Run Code Online (Sandbox Code Playgroud)