Как разрешить конфликты при слиянии и обновлении файлов в git? - PullRequest
5 голосов
/ 02 февраля 2011

Я чувствую, что подхожу ко всему неправильно.

Я работаю как часть команды, и мы используем git. Теперь, когда я получаю обновления от моей команды, время от времени возникают конфликты - кажется, git вставляет кучу текста в файлы, что плохо.

Во всяком случае, есть ли приличный способ справиться с этими конфликтами (я нахожусь на Windows).

Я использовал winmerge, но из того, что я вижу, он может сравнивать только 2 каталога. Это облегчает разрешение конфликтов, но требует, чтобы у меня было 2 состояния источника в 2 разных местах.

Кто-нибудь знает лучший способ сделать это или как интегрировать два?

Ответы [ 2 ]

5 голосов
/ 02 февраля 2011

Вы можете определить mergetool для Git, который запускается для каждого конфликтующего файла. Это прекрасно работает, если у вас есть только небольшое количество конфликтов. Некоторые ссылки: Использование Beyond Compare , обсуждение этого на SO , более общие инструкции и справочная страница .

Есть несколько пакетов скриптов, которые можно использовать, если у вас много изменений.

По сути, вам нужно получить, например, Beyond Compare для работы в 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 голосов
/ 02 февраля 2011

Вот связанный вопрос с ответами, который также может вам помочь:

Git в Windows: как настроить 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 my .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...