Fab*_*aux 139
这是中间人:BASE.
事实上,BASE不是共同的祖先,而是冲突标记为>>>>和的半完成合并<<<<.
您可以在meld编辑窗口的顶部看到文件名.

您可以BASE根据需要使用或不使用meld命令编辑文件.
你也可以摆脱融合,只需用你喜欢的文本编辑器编辑文件.
<<<< HEAD和=====标记之间的代码是合并之前的本地文件之一.====和之间的代码>>>> <branch name>是远程文件之一.小智 106
Meld 通过传递第4个参数激活隐藏的3向合并功能:
meld $LOCAL $BASE $REMOTE $MERGED
Run Code Online (Sandbox Code Playgroud)
右窗格和左窗格以只读模式打开,因此您不会意外地合并错误的方式.中间窗格显示合并的结果.对于冲突,它显示基本版本,以便您可以看到所有重要位:中间的原始文本和两侧的冲突修改.最后,当您按下"保存"按钮时,会写入$ MERGED文件 - 与git完全一样.
我使用的〜/ .gitconfig文件包含以下设置:
[merge]
tool = mymeld
conflictstyle = diff3
[mergetool "mymeld"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE $MERGED
Run Code Online (Sandbox Code Playgroud)
这打开了3个选项卡,包含我正在尝试合并的简单差异的第1和第2个选项卡,默认情况下打开的第3个选项卡显示3向合并视图.
现在,隐藏功能的原因是它还不够精致.它现在非常有用,但是合并作者Kai Willadsen指出几个需要熨烫的皱纹.例如,没有用于启动3向合并模式的GUI,命令行语法有点晦涩,等等.如果你说python并且有时间在手上 - 你知道该怎么做.
编辑:在较新版本的Meld中,synax略有改变.这是在评论中,但它属于答案.
meld命令现在使用--output选项,因此上面代码段的最后一行应该是:
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED
Run Code Online (Sandbox Code Playgroud)
use*_*631 54
涉及4个文件:
$LOCAL您要合并的分支上的文件; 在向您显示合并过程时未触及
$REMOTE您要合并的分支上的文件; 在向您显示合并过程时未触及
$BASE$ LOCAL和$ REMOTE的共同祖先,即.两个分支开始转移所考虑的文件的点; 在向您显示合并过程时未触及
$MERGED部分合并的文件,有冲突; 这是合并过程中唯一触及的文件,实际上,从未向您显示过meld
该$MERGED文件是包含了一个<<<<<<,>>>>>>,=====(和,也许,||||||)标志(即划定冲突).这是您手动编辑以更正冲突的文件.
手动冲突编辑和视觉冲突编辑在不同的文件上完成,并呈现不同的信息.
当使用合并工具(假设meld),即看到在其中的文件是:$LOCAL,$BASE,$REMOTE.请注意,您没有看到该$MERGED文件,尽管这是作为隐藏参数传递的,meld以便在那里写入编辑结果.
换句话说,在meld中间,您正在编辑文件,$BASE文件,并从左侧或右侧手动选择所有更改.这是一个干净的文件,合并过程没有触及.唯一的故障是,当你保存时,你不会保存到$BASE文件中,而是保存在第四个隐藏参数中meld,即$MERGED文件(你甚至看不到).该$BASE文件并没有包含任何冲突或部分成功的合并,因为它不是$MERGED文件.
在可视化编辑中,当向您呈现$BASE文件(而不是$MERGED文件)时,git基本上丢弃所有尝试进行合并(这些尝试在$ MERGED文件中可见,如果您需要)并让您完全进行合并从头开始.
最重要的是,在手动和视觉合并冲突中,您不会查看相同的文件,但最终结果将写入同一文件(即$MERGED文件).
冲突的手动校正上完成$MERGED,因为git 没有平均值为您呈现三个文件,所以它从瓜类三个文件(信息$LOCAL,$BASE,$REMOTE)在该$MERGED文件中.
但可视化工具有办法给你看三个文件:他们给你的$LOCAL,$BASE,$REMOTE文件.您正在从$LOCAL和$REMOTE文件中选择更改,并将这些更改带入$BASE文件,完全重新构建甚至覆盖合并$MERGED文件的失败尝试.
Saa*_*lik 15
Cosmin的解决方案有效,但$ BASE文件已更新 - 而非$ MERGED.这将更新$ MERGED文件:
MELD: v1.8.4
[merge]
conflictstyle = diff3
tool = mymeld
[mergetool "mymeld"]
cmd = meld --auto-merge --output $MERGED $LOCAL $BASE $REMOTE --diff $BASE $LOCAL --diff $BASE $REMOTE
Run Code Online (Sandbox Code Playgroud)
lum*_*ric 13
使用Meld 1.7,Tomek Bury的解决方案不再适用.
在默认设置并不能满足我:

相反,对于Meld> = 1.7,我建议使用另外两种解决方案之一.
第一个解决方案:
meld $LOCAL $BASE $REMOTE --auto-merge
Run Code Online (Sandbox Code Playgroud)

二解决方案:
meld $LOCAL $MERGED $REMOTE
Run Code Online (Sandbox Code Playgroud)

的.gitconfig
将其复制并粘贴到您的.gitconfig文件中以获得上述解决方案:
[merge]
tool = meld16
[mergetool "meld17"]
# use this for Meld >=1.7
# see http://stackoverflow.com/a/22911793/859591
# second solution:
cmd = meld $LOCAL $MERGED $REMOTE
# first solution:
#cmd = meld $LOCAL $BASE $REMOTE --auto-merge
[mergetool "meld16"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED
[include]
# requires git v1.7.10+
path = .gitconfig.local
Run Code Online (Sandbox Code Playgroud)
.gitconfig.local如果您在多台计算机上使用.gitconfig,请将此文件复制并粘贴到文件中以仅为此计算机设置meld17或meld16:
# This is a host specific config file!
# Note that git 1.7.10+ is needed
# http://stackoverflow.com/a/9733277/859591
[merge]
tool = meld17
Run Code Online (Sandbox Code Playgroud)
Tho*_*ard 11
我发现没有显示任何默认文件.MELD被显示$LOCAL,$REMOTE并$BASE在默认情况下.为了使它工作,我需要制作融合表演$MERGED而不是$BASE.把这个放在我的~/.gitconfig修复中:
[merge]
tool = mymeld
[mergetool "mymeld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE"
Run Code Online (Sandbox Code Playgroud)
我正在使用Arch,其中:
$ git --version
git version 1.8.2
$ meld --version
meld 1.7.1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92784 次 |
| 最近记录: |