如何在GIT中禁用自动合并?
目的是在调用命令链期间具有与自动合并中的冲突合并解析相同的行为:
$ git fetch
$ git merge some_branch
$ git mergetool
Run Code Online (Sandbox Code Playgroud)
在合并冲突的情况下,最后一个命令引导我们对文件进行3向合并.我想有一个简单的方法在没有冲突合并的情况下对文件执行相同的3向合并.
我在互联网上找不到任何解决方案,有没有?
我有一些解决方法,但它宁愿避免它.
提前致谢,
阿莱克斯
想要使用KDiff3作为TortoiseSVN的冲突解决工具,我按照此处和此处的说明配置TortoiseSVN以使用KDiff3.因此,我在TortoiseSVN中的合并工具设置是:
C:\Program Files (x86)\KDiff3\kdiff3.exe %base %mine %theirs -o %merged --L1 %bname --L2 %yname --L3 %tname
Run Code Online (Sandbox Code Playgroud)
执行合并时,可能会检测到冲突.如果是,我点击"编辑冲突"按钮启动KDiff3并协调合并冲突.
但是,当我保存合并时,结果将保存到.svn文件夹中的临时文件中,而不是保存在实际工作文件中C:\projects\my-new-project\src\mvags1.mxml.临时位置也可以在KDiff3输出窗口中看到.

我是否错误地配置了任何内容,或者我对KDiff3如何与TortoiseSVN一起工作的期望不正确?
我使用的是TortoiseSVN 1.7.5和KDiff3 0.9.96.
我读了一篇关于三向合并的文章(diff3).它给出了一个如何检测冲突的示例.例子是:
A=[1,4,5,2,3,6]
O=[1,2,3,4,5,6] <<< Origin
B=[1,2,4,5,3,6]
Run Code Online (Sandbox Code Playgroud)
在第一次计算OA和OB之后的差异时:
A=[1,4,5,2,3, ,6]
O=[1, ,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
和
O=[1,2,3,4,5, ,6]
B=[1,2, ,4,5,3,6]
Run Code Online (Sandbox Code Playgroud)
之后diff3 parse:
Run Code Online (Sandbox Code Playgroud)A=[1,4,5,2, 3 ,6] O=[1, ,2, 3,4,5 ,6] <<< Origin B=[1, ,2, 4,5,3 ,6]
在发现冲突后:
1
4
5
2
<<<<<<<<<A
3
|||||||O
3
4
5
=======
4
5
3
>>>>>>B
6
Run Code Online (Sandbox Code Playgroud)
按照这种方法来检测冲突,我尝试一个简单的例子:最初我有文件:
a;
b;
Run Code Online (Sandbox Code Playgroud)
我做了更新用户1更新"a;","a=0;"
用户2更新"b;","b=0;"
我得到这个结果:
xx
<<<<<<< A
int a=0;
int b;
||||||| O
int a;
int b;
=======
int a;
int b=0; …Run Code Online (Sandbox Code Playgroud) 我正在尝试让我的cygwin git安装与kdiff3一起工作.
我跟随Noam Lewis的指示:http://noamlewis.wordpress.com/2011/03/22/how-to-use-kdiff3-as-a-difftool-mergetool-with-cygwin-git/
但它不起作用:(
运行
git mergetool -t kdiff3
Run Code Online (Sandbox Code Playgroud)
给出这个结果:
Normal merge conflict for ...
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (kdiff3):
The merge tool kdiff3 is not available as '~/kdiff3.sh'
Run Code Online (Sandbox Code Playgroud)
但是,跑步
~/kdiff3.sh
Run Code Online (Sandbox Code Playgroud)
按预期打开kdiff3.
这是我的.gitconfig:
[diff]
tool = kdiff3
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = ~/kdiff3.sh
keepBackup = false
trustExitCode = false
Run Code Online (Sandbox Code Playgroud)
kdiff3.sh
#!/bin/sh
RESULT=""
for arg
do
if [[ "" != "$arg" ]] && [[ -e …Run Code Online (Sandbox Code Playgroud) 安装KDiff3用于管理冲突后git,仍然为我打开默认的:
这是这个答案中提到的配置:
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false
Run Code Online (Sandbox Code Playgroud)
注意:我可以KDiff3使用简单文件单独运行,但无法在我的 git 项目中运行它。任何想法?
编辑:这是我的 .gitconfig :
[user]
email = vahid.vdn@gmail.com
name = vahid najafi
[diff]
tool = kdiff3
guitool = kdiff3
[merge]
tool = diffmerge
tool = kdiff3
tool = kdiff3 …Run Code Online (Sandbox Code Playgroud) 我在.gitconfig中有kdiff3的以下difftool配置,
[difftool "kdiff3"]
external = '"C:/Program Files/KDiff3/kdiff3.exe" "$LOCAL" "$REMOTE" --output "$MERGED"'
trustExitCode = false
[difftool]
prompt = false
[diff]
Run Code Online (Sandbox Code Playgroud)
我正在使用以下命令来查看差异文件,
git difftool config/application.config.php -t kdiff3
Run Code Online (Sandbox Code Playgroud)
但是,当kdiff3打开时,我无法编辑该文件。如何在difftool中的kdiff3中编辑文件?
目前我在 KDiff 中合并文件时遇到了困难。假设我有文件 A 和 B。A 在左侧,B 在右侧。现在我想将文件 B 合并到 A,但是当我单击“合并当前文件”按钮时,它会显示合并编辑器,其中 B 文件作为合并的输出。如何选择 A 作为输出文件?
如何让 KDiff3 自动进行三向合并,使其不显示 UI?理想情况下,如果成功,则返回成功,如果不能(需要手动合并),则返回错误代码。
我读过的所有内容似乎都暗示以下内容应该有效:
"c:\Program Files\KDiff3\kdiff3.exe" --auto base.txt src.txt tar.txt -o merge.txt
Run Code Online (Sandbox Code Playgroud)
然而,事实并非如此。当我运行它时,会弹出一个消息框,上面写着:
Total number of conflicts: 3
Nr of automatically solved conflicts: 3
Nr of unsolved conflicts: 0
Run Code Online (Sandbox Code Playgroud)
我如何让它在没有这个弹出窗口的情况下运行,如果失败,根本没有 GUI?
brew cask install kdiff3
Error: Cask 'kdiff3' is unavailable: No Cask with this name exists.
brew install kdiff3
Error: No available formula with the name "kdiff3"
==> Searching for a previously deleted formula (in the last month)...
Warning: homebrew/core is shallow clone. To get complete history run:
git -C "$(brew --repo homebrew/core)" fetch --unshallow
Error: No previously deleted formula found.
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub... …Run Code Online (Sandbox Code Playgroud) 我刚刚在我的 mac 上升级了 kdiff3(使用brew)。由于我这样做了,每次运行时git difftool --dir-diff branch <branch2>都会出现一个标题为“无法处理某些文件”的模式对话框。并有一个文本区域,其中包含零个或多个“链接和普通文件的混合”。
如果我省略它,--dir-diff它会按预期工作。
我不确定这意味着什么。目录中没有符号链接(至少find . -type l是空的)。也许我在做一些愚蠢的事情,但我不知道它想抱怨什么。
我可以单击“确定”,然后继续,然后我得到了实际的差异,有两个问题(不知道这些问题是否相关)。对于每个文件(但不是目录)
这看起来很相似,但事实并非如此,我尝试了测试用例,它甚至没有给我带来错误。
我无法理解这一点,也许这是我遇到的问题,它肯定有很多相同的症状。但我看到的唯一回应是对测试用例的请求。
所以:
非常感谢。