Меню Рубрики

Git merge tool windows

Git на Windows: Как настроить mergetool?

Я пробовал msysGit и Git на Cygwin. Оба работают отлично и сами по себе, и оба отлично работают с gitk и Git-gui.

теперь, как, черт возьми, я могу настроить mergetool? (Vimdiff работает на Cygwin, но предпочтительно я хотел бы что-то более удобное для некоторых из наших сотрудников, любящих Windows.)

18 ответов

чтобы следить за ответом Чарльза Бейли, вот моя настройка git, которая использует p4merge (бесплатный кросс-платформенный инструмент слияния 3way); протестирован на msys Git (Windows) установить:

или из Windows cmd.exe shell, вторая строка становится :

изменения (относительно Чарльза Бейли):

  • добавлен в глобальную конфигурацию git, т. е. действителен для всех проектов git, а не только для текущего
  • конфигурация пользовательского инструмента значение находится в «mergetool.[инструмент.]cmd», а не «слияние».[инструмент.]cmd » (глупый я, потратил час на устранение неполадок, почему git продолжал жаловаться на несуществующий инструмент)
  • добавлены двойные кавычки для всех имен файлов, чтобы файлы с пробелами все еще можно было найти с помощью инструмента слияния (я тестировал это в msys Git из Powershell)
  • обратите внимание, что по умолчанию Perforce добавит свой установочный каталог в PATH, поэтому нет необходимости указывать полный путь к p4merge в команда

редактировать (февраля 2014 года)

как указал @Gregory Pakosz, последний префикса msys ГИТ теперь «нативно» поддерживает p4merge (проверено на 1.8.5.2.msysgit.0).

вы можете отобразить список поддерживаемых инструментов бег:

вы должны увидеть p4merge либо скачать или действительный список. Если нет, обновите git.

если p4merge значится как скачать, это в ваш путь и вам нужно только установить слияние.инструмент:

если он был указан как действительный, вы должны определить mergetool.p4merge.путь in дополнение к слияние.инструмент:

  • выше приведен пример пути, когда p4merge был установлен для текущего пользователя, а не для всей системы (не требуется прав администратора или высоты UAC)
  • хотя

должен расширяться до домашнего каталога текущего пользователя (поэтому теоретически путь должен быть

/AppData/Local/Perforce/p4merge.exe ), это не сработало для меня

  • еще лучше было бы воспользоваться переменной среды (например, $LOCALAPPDATA/Perforce/p4merge.exe ), git не кажется чтобы расширить переменные среды для путей (если вы знаете, как заставить это работать, сообщите мне или обновите этот ответ)
  • настройки mergetool.p4merge.cmd больше не будет работать, так как Git начал пытаться поддерживать p4merge, см. libexec/git-core/git-mergetool—lib.поэтому нам просто нужно указать путь mergetool для git, например p4merge:

    тогда он будет работать.

    Я использую портативный Git на WinXP (работает удовольствие!), и необходимо решить конфликт, который возник в ветвлении. Из всех gui я проверил,KDiff3 оказался наиболее прозрачным для использования.

    но я нашел инструкции, которые мне нужны, чтобы заставить его работать в Windows в этот блог, инструкции, которые немного отличаются от других подходов, перечисленных здесь. Это в основном составило добавление этих строк в my .gitconfig файл:

    работает хорошо сейчас!

    под Cygwin,только то, что сработало для меня, это следующее:

    кроме того, мне нравится отключать быстрое сообщение для difftool:

    git mergetool полностью настраивается, поэтому вы можете в значительной степени выбрать свой любимый инструмент.

    вкратце, вы можете установить mergetool по умолчанию, установив переменную конфигурации пользователя merge.tool .

    если инструмент слияния является одним из тех, которые поддерживаются изначально им, вам просто нужно установить mergetool. .path полный путь к инструменту (replace by что вы настроили merge.tool быть.

    в противном случае, вы можете установить mergetool. .cmd немного оболочки, чтобы быть eval’Ed во время выполнения с переменными оболочки $BASE, $LOCAL, $REMOTE, $MERGED установите соответствующие файлы. Вы должны быть немного осторожны с экранированием, если вы непосредственно редактируете файл конфигурации или устанавливаете переменную с .

    что-то вроде этого должно дать аромат того, что вы можете сделать («mymerge» — вымышленный инструмент).

    после установки ваш любимый инструмент слияния, это просто вопрос работает git mergetool когда у вас есть конфликты разрешать.

    инструмент p4merge от Perforce-довольно хороший автономный инструмент слияния.

    Кажется, что более новые версии git поддерживают p4merge напрямую, поэтому

    должно быть все, что вам нужно, если p4merge.ехе на вашем пути. Нет необходимости настраивать cmd или path.

    Источник

    karenyyng / Git_mergetool_tutorial.md

    Skip to the relevant sections if needed.

    Concepts for resolving Git conflicts

    For using mergetool in git , we need to understand the following terminology to understand what is being merged:

    • LOCAL — the head for the file(s) from the current branch on the machine that you are using.
    • REMOTE — the head for files(s) from a remote location that you are trying to merge into your LOCAL branch.
    • BASE — the common ancestor(s) of LOCAL and REMOTE .
    • MERGED — the tag / HEAD object after the merge — this is saved as a new commit.

    Common mergetool from editors will display both LOCAL and REMOTE so you can decide which changes to keep. Please read this tutorial explaining the HEAD objects if you do not know what it is. It will help your understanding of Git tremendously.

    Setting up different editors / tool for using git mergetool

    We have to change the git config to set a default mergetool. In this example, we will use vimdiff :

    We can also set the editor to display the common ancestor BASE while we examine what changes are in LOCAL and REMOTE with the following setting:

    Finding out what mergetool editors are supported

    And we list a few of them:

    Command line mergetool editors

    GUI mergetool editors

    • gvimdiff — almost identical to vimdiff but uses the Linux GUI for Vim , please refer to vimdiff if you still use the keyboard commands for GVim .
    • kdiff3
    • meld
    • tortoisemerge

    Or consult the community of your favorite editor to see how to do the equivalent operations for your editor.

    Other useful mergetool settings

    Do not prompt before launching the merge resolution tool

    mergetool simple code example

    creating the git repo

    Add some galaxy types into astrophy_obj.txt then save the file.

    save then commit the file.

    Change bar to barred in the file.

    Then you will see some error messages:

    We can bring up the mergetool :

    Then it will bring up the different versions of the file in different Vim splits panels.

    The top left split panel is the LOCAL , top middle split is BASE and top right split is REMOTE . The bottom split refers to the MERGED version. You can find this info in the bottom bar of each split (I have put 3 yellow rectangles to highlight that info).

    As you can see form the below image, my Vim has highlighted the differences in red for me.

    Now if your terminal has any GUI capability and you have compiled Vim correctly with GUI support, you can use your mouse to click on the bottom split to edit it. Or if you are a Vim ninja, you can use the keyboard shortcut to move to different splits.

    You can either incorporate the changes by manually editing the MERGED split, or use Vim shortcuts pull from one of the LOCAL , BASE ad REMOTE versions.

    save the changes then quit with :wqa to close all the splits. Remember to commit the merge.

    Resolving conflict from a git pull

    If you were trying to do a git pull when you ran into merge conflicts, follow all steps in the previous section for using the mergetool , then do:

    Forward-port local commits to the updated upstream HEAD.

    according to the documentation, meaning your local commits will be pushed to the upstream remote branch as a new forward commit that doesn’t interfere with previous commits. Hooray now you can claim that you can collaborate with others with Git without messing up with your collaborators’ commits.

    Other vimdiff keyboard shortcuts

    Other great references and tutorials

    Thanks to @ekalosak’s comment, I have fixed a mistake confusing the difference branches.

    Источник

    Обзор инструментов для визуального сравнения и разрешения конфликтов слияния

    На хабре уже было много статей о распределенных системах управления версиями (DVCS), их сравнений, а также сравнений GUI-клиентов для них. Также были обсуждения плагинов к IDE для работы с git и mercurial. Но практически не было информации об инструментах визуального сравнения и разрешения конфликтов слияния.


    Недавно я «перескочил» с mercurial (который до сих пор считаю более удобным и логичным) на git, потому что, подавляющее большинство проектов, которые мне интересны, используют git и хостятся на github. В связи с этим, встал вопрос о пересмотре арсенала инструментов, в частности вопрос выбора инструмента визуального сравнения и слияния (diff and merge). Дабы восполнить недостаток информации на хабре, я решил написать этот мини-обзор. Как говориться — по горячим следам.

    Под катом Вы также найдете примеры настроек Git для использования с DiffMerge и WinMerge под Windows. Думаю многим сэкономит время.

    KDiff3

    [скриншот]

    DiffMerge

    [скриншот] [скриншот]

    Diffuse

    [скриншот]

    TKDiff

    [скриншот]

    SmartSynchronize

    [скриншот]

    BeyondCompare

    [скриншот]

    Araxis Merge

    [скриншот]
    Название Особенности Платформа
    С этим инструментом скорее всего сталкивались как пользователи git, так и пользователи системы mercurial, тем не менее пару строк не помешает.

    Плюсы:

    • бесплатен;
    • поддерживает трехстороннее слияние;
    • умеет сравнивать директории;
    • с различными кодировками работает нормально;

    Минусы:

    • без дополнений не подсвечивает синтаксис.

    Примечание: устанавливается вместе с TortoiseHg.

    Windows, Mac OS X, Linux
    Плюсы:

    • бесплатен;
    • поддерживает трехстороннее слияние;
    • умеет сравнивать директории.

    Минусы:

    • бывают проблемы при работе с кириллицей. Думаю, со временем, исправят.
    • DiffMerge по умолчанию, не поддерживает подсветку синтаксиса языков программирования.

    WinMerge

    [скриншот]
    Плюсы:

    • Open Source;
    • никаких проблем с кодировками;
    • подсветка синтаксиса без лишних телодвижений;
    • сравнение директорий.

    Минусы:

    • инструмент слияния является двусторонним, что может создавать неудобства в некоторых случаях;
    • Windows only.

    Примечание: этим инструментом я начал пользоваться очень давно (еще до того, как стал использовать mercurial и git) и тот факт, что инструмент слияния является двусторонним в большинстве случаев не доставляет особых неудобств.

    Windows
    Плюсы:

    • GPL v2;
    • двустороннее и трехстороннее слияние файлов;
    • сравнение директорий;
    • подсветка синтаксиса (при установленном GtkSourceView).

    Минусы:

    • для установки под Windows требуется установить Python, GTK+, Glib, GtkSourceView, что не каждому понравиться.

    Windows, Mac OS X, Linux
    Инструкция по установке под Windows:
    https://live.gnome.org/Meld/Windows
    Плюсы:

    • GPL;
    • поддержка 2-way, 3-way и n-way (произвольное количество файлов) слияния;
    • подсветка синтаксиса;
    • отлично работает с UTF-8;
    • неограниченная глубина отмен (Undo);
    • удобная навигация по коду.

    Минусы:

    • разве что, невозможность сравнивать директории.

    Примечаие: при слиянии с помощью команды git mergetool через Git Bash под Windows открывается четвертое — «лишнее» окно.
    Убрать можно, подправив конфиг c:/Git/libexec/git-core/mergetools/diffuse

    Windows, Mac OS X, Linux
    Примечание: при установке под Windows уже включает в себя все зависимости (в отличие от Meld), а именно Python и пакет PyGTK.
    Плюсы:

    • GPLv2;
    • можно добавлять закладки для различий;
    • с кодировками работает нормально;

    Минусы:

    • интерфейс менее удобен и выглядит очень бедно (см. скриншот), чем у других продуктов.
    • нет подсветки синтаксиса;
    • не умеет сравнивать директории.

    Windows, Mac OS X, Linux
    Плюсы:

    • трехстороннее слияние;
    • нет проблем с кодировками;
    • помимо файлов, может сравнивать директории.

    Минусы:

    • для коммерческого использования требуется лицензия;
    • подсветка синтаксиса для языков программирования по умолчанию не предусмотрена. Не исключено, что можно как-то сделать.

    Примечание: SmartySynctonize встроен в программу SmartGit — удобный GUI-инструмент для работы с Git (тоже бесплатен для некоммерческого использования).

    Windows, Mac OS X, Linux
    Плюсы:

    • трехстороннее слияние;
    • может сравнивать файлы, директории, удаленные директории, архивы, а также MP3-файлы, изображения и др. Но последние пункты — это в принципе не нужный функционал.

    Минусы:

    • ShareWare;
    • нет версии под Mac.

    Windows, Linux
    Плюсы:

    • трехстороннее слияние;
    • нет проблем с кодировками;
    • подсвечивает синтаксис;
    • помимо файлов, может сравнивать директории и синхронизировать их;
    • хорошо работает на сравнении больших файлов (гигабайты) и больших директорий;
    • генерация отчётов по результатам сравнения.
    • Ribbon-интерфейс (если это можно назвать плюсом).

    Минусы:

    • ShareWare;
    • нет версии под Linux.

    Примечание: в комментариях многие расхваливают и советуют этот инструмент, несмотря на высокую стоимость.

    Windows, Mac OS X

    В принципе, все перечисленные инструменты хорошо справляются со своими задачами и данный обзор не тема для спора, т.к. каждый выбирает инструмент по вкусу.
    Далее приводятся примеры настроек Git для работы с DiffMerge и WinMerge. По аналогии можно настроить взаимодействие Git с другими инструментами.

    Git и DiffMerge

    1) Добавим в директорию c:/Git/libexec/git-core/mergetools/
    файл diffmerge следующего содержания:

    2) Теперь добавим в файл c:/Users/swipe/.gitconfig
    следующие строки:

    3) Создадим конфликт и вызовем DiffMerge для его разрешения

    Выводится сообщение о конфликте слияния, чего мы и добивались.

    В среднем окне, приведем файл к требуемому состоянию и сохраним изменения.
    Конфликт разрешен.
    Настройку DiffMegre подсмотрел тут:
    http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x/

    Git и WinMerge

    1) Добавим в директорию c:/Git/libexec/git-core/mergetools/
    файл winmerge следующего содержания:

    Когда Git не может автоматически объединить изменения, происходит конфликт слияния и в конфликтующий файл добавляются маркеры слияния ( >>>>>>). Они необходимы для разрешения конфликта с помощью сторонних инструментов.
    Рассмотрим файл readme.txt который образуется в результате выполнения слияния веток master и new в приведенном выше примере:

    Мы можем открыть файл конфликтов с помощью программы WinMerge для разрешения конфликта.

    После этого откроется средство двухстороннего слияния:

    Исходя из описанной логики перепишем команду слияния merge_cmd следующим образом:

    По сути, оба приведенных варианта эквивалентны.

    2) Отредактируем .gitconfig

    последняя строчка отменяет сохранение backup-файлов в директории репозитория.

    3) Создадим конфликт при слиянии двух веток (см. пример с использованием DiffMerge).

    Для разрешения конфликта при слиянии веток, воспользуемся командой

    Источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Git hub connect the dots и windows iot
  • Git gui for windows руководство
  • Git for windows portable
  • Git cmd for windows
  • Git client for windows command line