标签: git-difftool

Cygwin/MinGW中Git difftool的速度非常慢

我注意到这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 difftool259b5e6d33,结果非常缓慢:

$ 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)

git benchmarking cygwin mingw git-difftool

7
推荐指数
1
解决办法
1689
查看次数

使用meld作为git的difftool,但在一个窗口中列出所有文件

我想使用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目录.

相关问题:
查看分支与融合的差异?

git meld git-config difftool git-difftool

6
推荐指数
1
解决办法
8383
查看次数

Git Difftool Meld在Babun中不起作用

我目前正在使用以下命令设置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 cygwin meld git-difftool babun

6
推荐指数
1
解决办法
680
查看次数

如何让 git log 显示相对于当前目录的文件路径?

目前我正在处理的基于 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 diff git-diff git-difftool

6
推荐指数
1
解决办法
2001
查看次数

`git config interactive.diffFilter diff-highlight`:按行相同的差异 - 并且没有颜色

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

git config interactive.diffFilter diff-highlight git diff 没有颜色

我也试过: …

git git-diff git-difftool

6
推荐指数
1
解决办法
577
查看次数

在 git 中如何区分 microsoft word 文档?

我一直在关注本指南,了解如何区分 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)

git version-control diff git-diff git-difftool

5
推荐指数
1
解决办法
4934
查看次数

为什么 git difftool 在发生冲突时不打开 vimdiff?

读完这篇之后,我通过在 ~/.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 vimdiff git-difftool

5
推荐指数
1
解决办法
2168
查看次数

比较多个文件时,我可以中止 git difftool 吗?

我犯了一个巨大的错误。

我已经配置git difftool为使用vimdiff,然后我执行了一个比较整个存储库的命令:

git difftool tag1 tag2

现在 difftool 以 diff 模式为每个已更改的文件启动 vim。当我关闭 vim 时,它会用下一对文件再次启动。一般来说,这就是我想要的,但是如果队列中的文件太多,我可以以某种方式中止这个过程吗?我知道我可以关闭终端,但是有更好的方法吗?

git vimdiff git-diff git-difftool

5
推荐指数
1
解决办法
1134
查看次数

git difftool持有外壳

我在Windows上将git bash与Beyond&Compare用作difftool(但相同的事情发生在任何外部difftool上)。

我希望我的终端不要等待difftool退出以便将终端控制权还给我。对我来说,在命令行中执行其他git任务时,保持difftool会话保持打开状态很有用。

可能吗 ?

我不知道这是否有任何关系,trustexistcode但是此设置不会改变我想要的终端行为。

git shell git-bash git-difftool

5
推荐指数
1
解决办法
183
查看次数

git - 将 KDiff3 设置为默认合并工具

安装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)

git mergetool kdiff3 git-difftool

5
推荐指数
1
解决办法
1万
查看次数