ChatGPT解决这个技术问题 Extra ChatGPT

在 Windows 上使用 Meld 的 Git 合并工具

在 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 中正常工作?

我不知道这是否有任何尝试的意义,但我使用 KDiff3,并且在我的 gitconfig 中设置的路径是:path = C:/Program Files (x86)/KDiff3/kdiff3.exe 而不是 C:\\等等
你能解决问题吗?
我一直没能。其中一个答案可能是正确的,但我不愿将任何答案标记为这样,因为我实际上无法让 Meld 表现正常:-/
@Nelson别担心,我也不能:(
请评论并投票给 upstream issue,这样未来的用户甚至不需要担心这一点。

F
Frames Catherine White

为什么你不在 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

就这样!


这个解决方案对我有用,我也做了下面的命令,每次打开工具 git config --global mergetool.prompt false
该解决方案适用于 Meld 3.16.2,还添加了 git config --global mergetool.keepBackup false 以删除那些讨厌的备份。
出于某种原因,应用此解决方案后,所有内容都显示为红色(已更改),我不得不这样做:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
使用此解决方案,我得到 Cannot import: GTK+DLL load failed
@Juergen 答案是路径不匹配。如果您要复制 libgirepository-1.0-1.dll,它位于您的 lib 目录中的上一个目录(与 Meld.exe 相同的目录)并启动,您会发现一切正常,
G
GusGold

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\"

在我看来,这些编辑已经破坏了解决方案。原始修订版对我有用,所以+1。我确实发现它似乎在没有路径线的情况下工作。
当我使用不带 pathcmd 并使用反引号而不是单引号、单引号而不是斜线双引号时,这对我有用。
使用 Win10 1903 和 WSL,我尝试了一堆这些配置方法,但 git 无法调用 meld。我最终符号链接 Program_Files_x86 -> 'Program Files (x86)/' 并使用了 [mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
G
Gabriel Staples

如何使用 meld 作为 git difftool 代替 git diff

(另见下面的融合截图):

1. 窗户:

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

从此处下载并安装 meld:https://meldmerge.org/

然后,要使 meld 成为您的 git difftool,您可以在 Git for Windows bash 终端 (as Arugin says) 中使用这两个命令,并使用正确的 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 for Windows bash 终端中调用 git difftool,Meld 将作为您的默认 difftool 查看器打开!如果您还不知道:您可以通过右键单击 Windows 资源管理器中的文件夹并转到 --> 在 Windows 中打开所述终端。 “Git Bash”或其他任何名称。

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

https://i.stack.imgur.com/ZyGsF.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 将向您展示他们推荐的用于检查其分支的命令。

这些命令只有 git fetch origin someone_elses_branch git checkout someone_elses_branch git difftool main...HEAD # 3 点,不是 2!带有详细注释的命令 # 1. 将他们对本地机器的远程更改提取到名为 # `origin/someone_elses_branch` 的 # local-stored,remote-tracking hidden 分支中 git fetch origin someone_elses_branch # 2. 在本地查看此分支(这会创建本地存储的分支 # 名为 `someone_elses_branch` 来自本地存储的远程跟踪 # 隐藏的分支名为 `origin/someone_elses_branch`) git checkout someone_elses_branch # 3. 进行 difftool 比较(现在使用融合)以查看对此所做的更改从他们上次签出的点开始分支 # 并从 `main` 分叉。这个 cmd(使用 3 个点)相当于 # `git difftool $(git merge-base main HEAD) HEAD`。 git difftool main...HEAD # 3 个点,不是 2 个!

有关的:

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


s
schuess

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

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"

这对我来说确实很好,无论如何我都选择了自定义安装路径。值得注意的是,大多数指南使用的“路径”与此处指定的“cmd”之间存在差异。
我已经尝试了你和马丁的解决方案,但都没有奏效。我认为还有其他事情正在发生。一个窗口打开然后立即关闭,然后 Meld 打开,路径指向 Meld 的安装目录而不是 repo。传递给 Meld 的 arg 是否会导致它死亡,然后它会检测到问题并使用默认路径重新启动?我抓住了这里,但我不知道如何解决这个问题......
您确定您使用的是 meld.exe 而不是(我认为)bin 文件夹中的 meld 文件。我记得有一个问题,我只使用了 meld 文件,它在 git 有机会将文件放入临时文件夹之前启动应用程序。
我使用了您的解决方案,但使用了 bin 目录中的 meld 文件(我实际上重命名了文件 meld.py)并且它没有问题地工作。
s
star99ers

我在这个页面上的 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 文件生成的一个。只需下载页面最下方的脚本,因为那里已经发布了几个版本。


问题跟踪器未设置为自动将问题分配给我,所以我错过了有评论。对于后来发现这个的谷歌用户;这个问题已被解决。
P
Pravin

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

git config --global mergetool.meld.path "/c/Program Files (x86)/Meld/Meld.exe" <- path to meld here

D
David L.

由于某种原因,在 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

J
Jeremy Benks

没有一个答案对我有用。我最终在 .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 给了我一个错误。


D
Drey

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

右键单击 Meld.exe 转到属性 > 兼容性并选中以管理员身份运行此程序复选框

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