2011-02-02 118 views
5

我觉得我接近这一切都是错误的。如何在git中合并和更新文件时解决冲突?

我作为团队的一部分工作,我们使用git。现在,当我从团队中提取更新时,显然存在冲突--git似乎在文件中插入了大量不好的文本。

无论如何,是否有一个体面的方式来管理这些冲突(我在Windows上)。

我用winmerge,但是从我所能看到的,它只能比较2个目录。它使得解决冲突变得轻而易举,但要求我在两个不同的位置有两个状态的来源。

有没有人知道更好的方法来做到这一点或如何将两者结合?

回答

5

您可以为每个冲突文件启动的Git定义mergetool。如果您只有少量冲突,这可以正常工作。一些链接:Using Beyond Compare,discussion about this on SO,more general instructionsman page

如果您有很多更改,可以使用一些脚本包。

基本上你需要做的是得到超越比较在Linux中工作:

git config --global merge.conflictstyle=diff3 
git config --global merge.tool=bc3 
git config --global mergetool.bc3.cmd=/usr/bin/bcompare $LOCAL $REMOTE $BASE $MERGED 
git config --global mergetool.bc3.trustexitcode=true 

你可以很容易地找到其他工具的信息,而且Git已经支持几种工具。

+0

这也不错:http://blog.wuwon.id.au/2010/09/painless-merge-conflict-resolution-in.html – Ben 2011-02-02 09:00:31

0

这里的答案一个相关的问题,可能还帮你:

Git on Windows: How do you set up a mergetool?

我亲自走了p4merge(免费),用下面的设置(这对我的作品,它可能不是“正确”的方式来做事):

C:\Program Files\Git\cmd

,我有一个文件git-merge.sh它看起来像这样:

#!/bin/sh 

# Passing the following parameters to mergetool: 
# local base remote merge_result 

base=$1 
alocal=$2 
remote=$3 
result=$4 

if [ -f $base ] 
then 
    p4merge.exe -dl "$base" "$alocal" "$remote" "$result" 
else 
    p4merge.exe -dl "$result" "$alocal" "$remote" "$result" 
fi

C:\Documents and Settings\me.gitconfig包含以下内容:

[merge]  
    keepBackup = false 
    tool = p4merge 
[mergetool "p4merge"] 
    cmd = \"c:/Program Files/Perforce/p4merge.exe\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" 
    keepTemporaries = false 
    trustExitCode = false 
    keepBackup = false 
    path = C:/Program Files/Perforce/p4merge.exe 
[mergetool] 
    keepBackup = false