GVKun编程网logo

设置和使用 Meld 作为你的 git difftool 和 mergetool(git mergetool 配置)

18

本文将为您提供关于设置和使用Meld作为你的gitdifftool和mergetool的详细介绍,我们还将为您解释gitmergetool配置的相关知识,同时,我们还将为您提供关于eclipsegit

本文将为您提供关于设置和使用 Meld 作为你的 git difftool 和 mergetool的详细介绍,我们还将为您解释git mergetool 配置的相关知识,同时,我们还将为您提供关于eclipse git 解决冲突 解决 mergetool 不能使用问题、git diff/difftool、git difftool 详解、git difftool和mergetool图形化的实用信息。

本文目录一览:

设置和使用 Meld 作为你的 git difftool 和 mergetool(git mergetool 配置)

设置和使用 Meld 作为你的 git difftool 和 mergetool(git mergetool 配置)

尽管这个问题和答案中的大部分信息都可以在StackOverflow上找到,但它分布在很多页面上,并且在其他错误或误导性的答案中。我花了一段时间才把我想知道的一切拼凑起来。

有很多不同的程序可以用作您的 git difftool 和 mergetool,对于哪个是最好的当然没有共识(意见、要求和操作系统会明显不同)。

以下2个问题将在我的回答中得到回答:

  • 如何设置和使用 Meld 作为我的 git difftool?
  • 如何设置和使用 Meld 作为我的 git 合并工具?

注意: difftool 和 mergetool 不必使用相同的程序,可以为两者设置不同的程序。

答案1

小编典典

如何设置和使用 Meld 作为我的 git difftool?

git difftool使用 GUI 差异程序(即 Meld)显示差异,而不是在终端中显示差异输出。

尽管您可以在命令行上设置 GUI 程序,但在文件-t <tool> / --tool=<tool>中配置它更有意义。.gitconfig[注意:请参阅底部有关转义引号和 Windows 路径的部分。]

# Add the following to your .gitconfig file.[diff]    tool = meld[difftool]    prompt = false[difftool "meld"]    cmd = meld "$LOCAL" "$REMOTE"

[注意:这些设置不会改变其行为git diff将继续照常运行。]

您使用git difftool的方式与使用git diff. 例如

git difftool <COMMIT_HASH> file_namegit difftool <BRANCH_NAME> file_namegit difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name

如果配置正确,将打开一个 Meld 窗口,使用 GUI 界面显示差异。

Meld GUI 窗口窗格的顺序可以通过$LOCAL$REMOTEin的顺序来控制cmd,即哪个文件显示在左窗格中,哪个文件显示在右窗格中。如果您希望它们反过来,只需像这样交换它们:

    cmd = meld "$REMOTE" "$LOCAL"

最后,该prompt = false行只是停止 git 提示您是否要启动 Meld,默认情况下 git 会发出提示。


如何设置和使用 Meld 作为我的 git 合并工具?

git mergetool允许您使用 GUI 合并程序(即 Meld)来解决合并期间发生的合并冲突。

与 difftool 一样,您可以使用命令行在命令行上设置 GUI 程序,但和以前一样,在文件-t <tool> / --tool=<tool>中配置它更有意义。.gitconfig[注意:请参阅底部有关转义引号和 Windows 路径的部分。]

# Add the following to your .gitconfig file.[merge]    tool = meld[mergetool "meld"]    # Choose one of these 2 lines (not both!) explained below.    cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"    cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"

您不git mergetool用于执行实际的合并。在使用之前,git mergetool您可以使用 git 以通常的方式执行合并。例如

git checkout mastergit merge branch_name

如果存在合并冲突,git 将显示如下内容:

$ git merge branch_nameAuto-merging file_nameCONFLICT (content): Merge conflict in file_nameAutomatic merge failed; fix conflicts and then commit the result.

此时file_name将包含带有合并冲突信息的部分合并文件(即包含所有>>>>>>><<<<<<<条目的文件)。

Mergetool 现在可用于解决合并冲突。您可以通过以下方式轻松启动它:

git mergetool

如果配置正确,将打开一个 Meld 窗口,显示 3 个文件。每个文件都将包含在其 GUI 界面的单独窗格中。

在上面的示例.gitconfig条目中,建议使用 2 行作为[mergetool "meld"] cmd行。事实上,高级用户配置cmd线路的方式有很多种,但这超出了本回答的范围。

这个答案有 2 条替代cmd线,它们之间将迎合大多数用户,对于希望将该工具提升到下一个复杂程度的高级用户来说,这将是一个很好的起点。

首先是参数的含义:

  • $LOCAL是当前分支中的文件(例如 master)。
  • $REMOTE是正在合并的分支中的文件(例如,branch_name)。
  • $MERGED是其中包含合并冲突信息的部分合并文件。
  • $BASE``$LOCAL是and的共享提交祖先,$REMOTE也就是说文件与$REMOTE最初创建包含的分支时一样。

我建议你使用:

[mergetool "meld"]    cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"

要么:

[mergetool "meld"]    cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"    # See ''Note On Output File'' which explains --output "$MERGED".

选择是使用$MERGED还是$BASE介于$LOCALand之间$REMOTE

无论哪种方式,Meld 都会在左右窗格中显示 3个窗格$LOCAL,在中间窗格中显示 和。$REMOTE``$MERGED``$BASE

在这两种情况下,中间窗格都是您应该编辑以解决合并冲突的文件。不同之处在于您更喜欢哪个起始编辑位置;$MERGED对于包含具有合并冲突信息的部分合并文件的文件或$BASE对于$LOCALand的共享提交祖先$REMOTE。[由于这两cmd行都很有用,我将它们都保存在我的.gitconfig文件中。大多数时候我使用该$MERGED行并且该$BASE行被注释掉,但是如果我想使用该$BASE行代替,可以交换注释掉。]

输出文件注意事项:不要担心无论是否在行中--output "$MERGED"使用过或之前使用过。该选项只是告诉 Meld git 希望将冲突解决文件保存在哪个文件名中。无论您是使用还是作为起始编辑点,Meld 都会将您的冲突编辑保存在该文件中。cmd``$MERGED``$BASE``cmd``--output``$MERGED``$BASE

编辑中间窗格以解决合并冲突后,只需保存文件并关闭 Meld 窗口。Git 将自动进行更新,当前分支(例如 master)中的文件现在将包含您在中间窗格中最终得到的任何内容。

git 将通过附加.orig到原始文件名来备份部分合并的文件,其中包含合并冲突信息。例如file_name.orig。在检查您对合并感到满意并运行您可能希望执行的任何测试后,.orig可以删除该文件。

此时,您现在可以进行提交以提交更改。

如果在 Meld 中编辑合并冲突时,您希望放弃使用 Meld,则退出 Meld,而不在中间窗格中保存合并解决方案文件。git 将回复消息file_name seems unchanged然后询问Was the merge successful? [y/n],如果您回答,n则合并冲突解决将被中止,文件将保持不变。请注意,如果您在任何时候将文件保存在 Meld 中,那么您将不会收到来自 git 的警告和提示。[当然你可以直接删除文件,然后用.origgit 为你制作的备份文件替换它。]

如果您有超过 1 个文件存在合并冲突,那么 git 将为每个文件打开一个新的 Meld 窗口,一个接一个,直到它们全部完成。它们不会同时打开,但是当您完成对一个冲突的编辑并关闭 Meld 时,git 将打开下一个,依此类推,直到所有合并冲突都已解决。

在实际git mergetool项目中使用它之前,创建一个虚拟项目来测试它的使用是明智的。请务必在测试中使用包含空格的文件名,以防操作系统要求您转义行中的引号,请参见下文。cmd


转义引号字符

某些操作系统可能需要cmd转义引号。经验不足的用户应该记住,配置命令行应该使用包含空格的文件名进行测试,如果这些cmd行不适用于包含空格的文件名,请尝试转义引号。例如

cmd = meld \"$LOCAL\" \"$REMOTE\"

在某些情况下,可能需要更复杂的引号转义。下面的第一个 Windows 路径链接包含对每个引号进行三次转义的示例。这很无聊,但有时是必要的。例如

cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"

Windows 路径

Windows 用户可能需要在 Meldcmd行中添加额外的配置。他们可能需要使用 的完整路径meldc,该路径旨在从命令行在 Windows 上调用,或者他们可能需要或想要使用包装器。他们应该阅读下面链接的StackOverflowcmd页面,这些页面是关于为 Windows 设置正确的 Meld 行的。由于我是 Linux 用户,因此我无法测试各种 Windowscmd行,也没有关于该主题的更多信息,除了建议使用我的示例并添加 Meld 或 的完整路径meldc,或者将 Meld 程序文件夹添加到您的path.

使用 Meld 忽略尾随空格

Meld 有许多可以在 GUI 中配置的首选项。

在首Text Filters选项选项卡中,有几个有用的过滤器可以在执行差异时忽略评论等内容。尽管有过滤器可以忽略All whitespaceLeading whitespace,但没有忽略Trailing whitespace过滤器(这已被建议作为 Meld 邮件列表中的附加项,但在我的版本中不可用)。

忽略尾随空格通常非常有用,尤其是在协作时,并且可以使用 Meld 首Text Filters选项选项卡中的简单正则表达式轻松手动添加。

# Use either of these regexes depending on how comprehensive you want it to be.[ \t]*$[ \t\r\f\v]*$

我希望这对每个人都有帮助。

eclipse git 解决冲突 解决 mergetool 不能使用问题

eclipse git 解决冲突 解决 mergetool 不能使用问题

eclipse git 解决冲突 解决 mergetool 不能使用问题

  1. 本地代码

  2. 远程代码

第一步 --> 同步远程资源库,检查是否存在冲突

这里有冲突出现

第二步 --> 如果存在冲突,将本地代码提交到本地仓库

**注意:**这里是点击 commit,而不是点击 commit push

第三步 --> pull远程代码

第四步 --> 使用 merge tool 解决冲突

右键文件,选择 merge tool

第五步 --> 解决冲突

上传自己的本地代码到远程

点击 commit push

完成操作!

原文出处:https://www.cnblogs.com/upuptop/p/12215098.html

git diff/difftool

git diff/difftool

 

参考好文:使用命令和P4Merge进行diff::https://www.cnblogs.com/cgzl/p/8597066.html

git difftool 即可弹出比较工具的界面 哈哈

 

===========================

本地区域

git diff/difftool  filepath

不带任何命令参数,工作区(本地文件)与暂存区比较,后面不带filepath的话,比较所有不同。Filepath可以时文件名子或文件夹。

 

git diff/difftool  HEAD  filepath

工作区与HEAD (当前工作分支, 最后一次commit) 比较。

 

git diff/difftool --staged filepath

暂存区与HEAD比较  

 

git diff commitIDx commitIDy

比较两次commit的区别,commitIDx 和commitIDy都表示commit的 id,最后一次commit可以用HEAD表示。  commitIDy内容显示在界面右侧。

git diff HEAD HEAD^

比较的是HEAD 和 HEAD的上一次

 

git diff branchName filepath  

当前分支的文件(filepath)与branchName 分支的文件进行比较!  

拓展:

git diff branch1 branch2 -- path/file.txt (可以不加--)

对比两个分支中的同一个文件,,branch可以时远端的origin/branch1; 若不指定file的话,对比两个分支所有的不同之处。

 

 

git diff commitId filepath 与某一次提交进行比较    - 待验证

 

本地vs远端

git diff/difftool branchX origin/branchY

这就是比较本地的branchX分支和远程的branchY分支.  也可用于比较两个本地的分支!

 

git difftool 详解

git difftool 详解

一、如何比较两个版本之间的差异

1.显示版本得到版本的commit id

image

2.执行difftool命令

image

按Y进行比较,我用的是DiffMerge这个软件对代码进行比较的

image

二、比较当前所修改的内容

git difftool

git difftool和mergetool图形化

git difftool和mergetool图形化

1.当然是先安装Beyond Compare3 (此处省略安装步骤,自行百度)

 

2.设置difftool

git config --global diff.tool bc3

git config --global difftool.bc3.path "/usr/bin/bcompare

git config --global difftool.prompt false

 

3.设置mergetool

git config --global merge.tool bc3

git config --global mergetool.bc3.path "/usr/bin/bcompare"

git config --global mergetool.bc3.trustExitCode true

____________________________________________________________________________________________

Windows git difftool和mergetool图形化
1.当然是先安装Beyond Compare3 (此处省略安装步骤,自行百度)

 

2.设置difftool

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

 

3.设置mergetool

git config --global merge.tool bc3
git config --global mergetool.bc3.cmd "\"c:/program files/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\""
git config --global mergetool.bc3.trustExitCode true

____________________________________________________________________________________________


使用时:

diff时,用git difftool <file_name>来查看就会直接弹出bcompare.

merge时,要先用git merge <branch_name> 来merge一下,然后如果提示merge有冲突,才用git mergetool来调用bcompare来merge

---------------------

我们今天的关于设置和使用 Meld 作为你的 git difftool 和 mergetoolgit mergetool 配置的分享就到这里,谢谢您的阅读,如果想了解更多关于eclipse git 解决冲突 解决 mergetool 不能使用问题、git diff/difftool、git difftool 详解、git difftool和mergetool图形化的相关信息,可以在本站进行搜索。

本文标签: