Git mergetool与Windows上的Meld

dldeef67  于 2023-06-28  发布在  Git
关注(0)|答案(9)|浏览(142)

在Linux中,我最喜欢的合并工具是Meld,我在使用或配置它与Git一起工作时没有遇到任何问题。但是,在Windows中,情况就不同了。
首先,我从这里找到的一个包安装了Meld:https://code.google.com/p/meld-installer/
然后,我像这样配置我的.gitconfig,以支持Meld作为默认的mergetool

[merge]                                                      
    tool = meld                                                                         

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

所以,当我有冲突时,我会使用git difftool,而Meld实际上会打开。但是,Git写入并传递给diff工具的文件路径是不正确的。例如,即使Git在repository目录(我调用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中正确工作?

vh0rcniy

vh0rcniy1#

为什么不使用git bash for Windows?
安装后只需合并:

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

就这些!

dfuffjeb

dfuffjeb2#

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

c9qzyr3d3#

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

(see下面的截图也是meld的):

1. Windows:

下载并安装Git for Windows,它包含一个类似于Linux的"Git Bash"终端,一旦安装了Git for Windows,就可以通过Windows资源管理器中任何文件夹的右键菜单访问。
从这里下载并安装meld:https://meldmerge.org/
然后,要使meld成为您的git difftool,您可以在Git for Windows bash终端(as Arugin says)中使用这两个命令,并使用正确的Meld.exe路径。注意:对于旧版本的Windows,您的路径可能是"C:\Program Files (x86)\Meld\Meld.exe"

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

或者你可以直接编辑你的C:\Users\YOUR_USER_NAME\.gitconfig文件,然后在它的末尾添加以下内容(注意这里必须使用双反斜杠[\\]作为路径分隔符!)。注意:同样,对于旧版本的Windows,您的路径可能是C:\\Program Files (x86)\\Meld\\Meld.exe

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

现在在你的Git for Windows bash终端中调用git difftool,Meld将作为默认的difftool查看器打开!如果你还不知道:你可以在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 OS

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

融合示例截图

source

合并的用法

# 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

使用meld在本地查看他人的GitHub PR

  • 注意:下面的命令假设它们的分支在同一个代码库中,因为你们是队友。如果不是这种情况,您将不得不稍微修改命令以从其forked repo而不是从您的公共repo checkout 。GitHub会向你展示他们推荐的命令,当你在线查看PR时,可以使用这些命令来查看他们的分支。*

1.命令仅

git fetch origin someone_elses_branch
git checkout someone_elses_branch
git difftool main...HEAD  # 3 dots, NOT 2!

1.带有详细注解的命令

# 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.关于how to compare binary files, hex files, and Intel hex firmware files with meld

  1. 3点vs 2点:Git diff commit ranges中的双点".."和三点"..."有什么区别?
    1.[我在git blametool上的回答]有类似于bzr qannotate的git blame gui吗?
    1.从这里下载并安装meld:https://meldmerge.org/
    1.[我的回答]如何让git使用我选择的编辑器来编辑提交消息?
    1.[我的仓库] https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
    1.在Mac OS上安装Meld:www.example.com https://superuser.com/questions/360007/how-to-install-meld-with-homebrew-on-mac-osx/1177575#1177575
qxgroojn

qxgroojn4#

我有完全相同的问题,发现我必须蛮力我的方式让它工作。下面是我在.gitconfig文件中的内容。(注意我的meld可执行文件在不同的位置)

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

eivgtgni5#

我在meld安装程序的错误报告中找到了解决方案,在此页面上:
https://code.google.com/p/meld-installer/issues/detail?id=11
据我所知,问题是meld.exe程序(通过python解释器运行meld)不必要地将命令的工作目录设置为meld.exe的工作目录。这会导致相对路径在作为命令行参数传递时被错误地解释。
解决方案是使用AHK 2 EXe(AutoHotKey脚本-> exe)将提供的meld.exe替换为通过编译meld.ahk文件生成的文件。只要下载脚本最远的网页,因为有几个版本张贴在那里。

l7wslrjt

l7wslrjt6#

我也遇到了类似的问题。使用的操作系统是Windows 10,以下更改对我有效。这似乎更像是路径问题

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

gfttwv5a7#

由于某种原因,在Windows 10中,PATH环境变量在安装过程中无法正确设置,因此会出现一个奇怪的异常,即无法找到“C:\Program Files(x86)/Meld/bin”目录下的一些.dll。
我的解决方法是,在git bash中执行:

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

或添加到Windows PATH

C:\Program Files (x86)/Meld/bin
sgtfey8w

sgtfey8w8#

没有一个答案对我有用。我在. 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,meld就会打开。保存后,你必须在git中提交,冲突就解决了。
由于某种原因,这只适用于Meld 3.18.x,Meld 3.20.x给了我一个错误。

tjjdgumg

tjjdgumg9#

在尝试了以上所有方法后,将Meld设置为以管理员身份运行对我来说很有效。
1.右键单击Meld.exe
1.进入属性>兼容性,选中Run this program as an administrator复选框
我收到的错误引用了像c:\windows\temp\meld-*这样的临时文件,这些文件没有被创建。提升Meld的权限似乎可以做到这一点,因为它现在既可以在git difftool上运行,也可以在Meld中手动运行。

相关问题