100

在 Linux 中,我最喜欢的合并工具是 Meld,我在使用或配置它以与 Git 一起工作时没有遇到任何问题。但是,在 Windows 中,情况就不同了。

首先,我从在这里找到的捆绑包中安装了 Meld:https ://code.google.com/p/meld-installer/

然后,我像这样配置了我的 .gitconfig 以支持 Meld 作为默认的合并工具

[merge]                                                      
    tool = meld                                                                         

[mergetool "meld"]                                           
    path = C:\\Program Files (x86)\\Meld\\meld\\meld.exe
    keepBackup = false                                   
    trustExitCode = false

因此,当我遇到冲突时,我会使用 git difftool 而 Meld 实际上会打开。但是,Git 写入传递给 diff 工具的文件的路径不正确。例如,即使 Git 在存储库目录(我调用 git mergetool 的位置)中生成 BASE、LOCAL 和 REMOTE 文件,Meld 也会尝试在可执行文件的目录中打开这些文件中的每一个。

Meld 没有打开 C:\repo\roses.txt.LOCAL.2760.txt,而是尝试打开 C:\Program Files (x86)\Meld\meld\roses.txt.LOCAL.2760.txt。

有没有人遇到过这个问题或者知道如何配置 Git / Meld 在 Windows 中正常工作?

4

9 回答 9

160

为什么你不在 Windows 上使用 git bash?

简单地安装融合后:

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe" <- path to meld here

就这样!

于 2015-03-02T23:50:22.777 回答
27

Schuess,小心目录中的空格字符!

[merge]
    tool = meld
[mergetool "meld"]
    prompt = false
    keepBackup = false
    keepTemporaries = false
    path = C:/Program Files (x86)/Meld/Meld.exe
    cmd = \"/C/Program Files (x86)/Meld/Meld.exe\" \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"--output=$PWD/$MERGED\"
于 2013-02-25T18:57:21.040 回答
14

如何使用 meldgit difftool代替git diff(另请参阅下面的 meld 截图):

1. 窗户:

下载并安装适用于 Windows 的 Git,其中包括一个类似于“Git Bash”的 Linux 终端,一旦您安装了适用于 Windows 的 Git,就可以通过 Windows 资源管理器中任何文件夹中的右键菜单访问。

从这里下载并安装 meld:https ://meldmerge.org/ 。

然后,meldgit difftool可以在 Git for Windows bash 终端中使用这两个命令(如 Arugin 所说),使用正确的 Meld.exe 路径来制作您的 .

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"

或者您可以直接编辑您的C:\Users\YOUR_USER_NAME\.gitconfig文件并将以下内容添加到它的末尾(注意这里强制使用双反斜杠 [ \\] 作为路径分隔符!):

[merge]
  tool = meld
[mergetool "meld"]
  path = C:\\Program Files (x86)\\Meld\\Meld.exe

现在调用git difftool你的Git for Windows bash 终端,Meld 将作为你的默认 difftool 查看器打开!如果您还不知道:您可以通过右键单击 Windows 资源管理器中的文件夹并转到 --> "Git Bash" 或其他任何名称来在 Windows 中打开所述终端。

2.Linux:

如果没有别的,我也不妨将 Linux 说明也放在这里供我自己参考:

对于 Linux,它更容易:

# 1. install meld
sudo apt update
sudo apt install meld
# 2. edit your ~/.gitconfig file (gedit GUI editor will open)
gedit ~/.gitconfig

然后在 .gitconfig 文件的底部添加:

[diff]
    tool = meld

就是这样!git difftool现在可以在 Linux Ubuntu 上运行!

3.Mac 操作系统

在 Mac OS 上安装 Meld:https ://superuser.com/questions/360007/how-to-install-meld-with-homebrew-on-mac-osx/1177575#1177575 。

Meld 的示例屏幕截图

https://i.stack.imgur.com/sNR7J.png

来源在此处输入图像描述

Meld的使用

# 1. See changes you've made since your last commit (do this in place of 
# `git diff`)
git difftool

# 2. Calling meld directly to compare two files:
meld path/to/file1.txt path/to/file2.txt

要在您的计算机上本地查看其他人的 GitHub PR,请使用meld

注意:下面的命令假设他们的分支在你的同一个代码仓库中,因为你是队友。如果不是这种情况,您将不得不稍微修改命令以从他们的分叉存储库而不是从您的公共存储库中签出。当在线查看 PR 时,GitHub 将向您展示他们推荐的用于检查其分支的命令。

  1. 仅命令
    git fetch origin someone_elses_branch
    git checkout someone_elses_branch
    git difftool main...HEAD  # 3 dots, NOT 2!    
    
  2. 带有详细注释的命令
    # 1. Fetch their remote changes to your local machine into your 
    # locally-stored,remote-tracking hidden branch named
    # `origin/someone_elses_branch`
    git fetch origin someone_elses_branch
    # 2. Check out this branch locally (this creates the locally-stored branch
    # named `someone_elses_branch` from the locally-stored remote-tracking
    # hidden branch named `origin/someone_elses_branch`)
    git checkout someone_elses_branch
    # 3. Do a difftool comparison (using meld now) to see the changes
    # made on this branch from the point where they last checked out
    # and forked off of `main`. This cmd (using 3 dots) is the equivalent of
    # `git difftool $(git merge-base main HEAD) HEAD`.
    git difftool main...HEAD  # 3 dots, NOT 2!
    

有关的:

  1. 3 点与 2 点:Git diff 提交范围中的双点“..”和三点“...”有什么区别?
  2. [我对我的回答git blametool]有没有类似于 bzr qannotate 的 git blame gui?
  3. 从这里下载并安装 meld:https ://meldmerge.org/
  4. [我的回答]如何让 Git 使用我选择的编辑器进行提交?
  5. [我的仓库] https://github.com/ElectricRCAAircraftGuy/eRCaGuy_dotfiles
  6. 在 Mac OS 上安装 Meld:https ://superuser.com/questions/360007/how-to-install-meld-with-homebrew-on-mac-osx/1177575#1177575
于 2018-02-26T00:29:08.843 回答
10

我遇到了完全相同的问题,并发现我必须以蛮力的方式让它工作。这是我放在 .gitconfig 文件中的内容。(注意我的融合可执行文件在不同的位置)

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"
于 2013-02-20T01:56:56.247 回答
4

我在这个页面上的 meld 安装程序的错误报告中找到了一个解决方案:

https://code.google.com/p/meld-installer/issues/detail?id=11

据我了解,问题在于 meld.exe 程序(通过 python 解释器运行 meld)不必要地将命令的工作目录设置为 meld.exe 的工作目录。当作为命令行参数传递时,这会导致相对路径被错误地解释。

解决方案是将提供的 meld.exe 替换为使用 AHK2EXe(AutoHotKey 脚本 -> exe)编译 meld.ahk 文件生成的一个。只需下载页面最下方的脚本,因为那里已经发布了几个版本。

于 2013-06-12T16:02:25.333 回答
4

我也遇到过类似的问题。使用的操作系统是 Windows 10,以下更改对我有用。看起来更像是路径问题

git config --global mergetool.meld.path "/c/Program Files (x86)/Meld/Meld.exe" <- path to meld here
于 2016-11-18T12:24:47.687 回答
3

由于某种原因,在 Windows 10 中,PATH 环境变量在安装过程中无法正确设置,因此引发了一个奇怪的异常,说它无法找到“C:\Program Files (x86)/ 下的某些 .dll”融合/bin”目录。

我的一个解决方法是,在 git bash 中执行:

export PATH=$PATH:"/C/Program Files (x86)/Meld/lib" 

或者添加到windows PATH

C:\Program Files (x86)/Meld/bin
于 2019-06-26T09:23:11.417 回答
2

没有一个答案对我有用。我最终在 .gitconfig 文件中得到了这个:

[merge]
  tool = meld
[mergetool "meld"]
  cmd = 'C:/Program Files (x86)/Meld/Meld.exe' $LOCAL $BASE $REMOTE --output=$MERGED
[mergetool]
  prompt = false

git merge mybranch以冲突结束后,您只需键入git mergetool并融合即可打开。保存后,您必须在 git 中提交并解决冲突。

出于某种原因,这只适用于 Meld 3.18.x,Meld 3.20.x 给了我一个错误。

于 2019-02-06T13:30:01.290 回答
0

在尝试了上述所有方法之后,将 Meld 设置为以管理员身份运行对我有用。

  1. 右键单击 Meld.exe
  2. 转到属性>兼容性并选中Run this program as an administrator复选框

我收到的错误引用了类似的临时文件c:\windows\temp\meld-*,这些文件没有被创建。提升 Meld 的权限似乎可以解决问题,因为它现在可以与这两者一起使用git difftool并在 Meld 中手动运行。

于 2016-12-16T17:55:35.283 回答