Можно ли легко изменить маркеры конфликта по умолчанию в Git? - PullRequest
0 голосов
/ 29 июля 2011

В Git, возможно ли изменить маркеры конфликта по умолчанию на что-то еще?

По умолчанию они выглядят так:

<<<<<<< HEAD

    [some code]

||||||| merged common ancestors

    [some code]

=======

    [some code]

>>>>>>> some commit message

Например, я подумал, что в файлах C # было бы неплохо, чтобы они начинались с символов комментария:

// <<<<<<< HEAD

Таким образом, ошибки компиляции из маркеров конфликта не помешают ошибкам компиляции из самого кода, пока я разрешаю слияние.

Есть ли способ сделать это?

(Пожалуйста, не давайте ответ, который говорит: «Вы не должны этого делать». Я уже знаю последствия, и я в порядке с ними. Git разработан для гибкости.)

Ответы [ 4 ]

1 голос
/ 29 июля 2011

Что если вы перекомпилируете свой собственный форк Git?Исходный код здесь: http://git.kernel.org/?p=git/git.git;a=summary (через http://git -scm.com / ).

1 голос
/ 29 июля 2011

Вот как бы я это сделал, если бы мне пришлось (действовать с осторожностью):

добавьте шаг прекомпиляции в ваши проекты (из вашего профиля я предполагаю, что вы используете C #) для запуска sed (при условии, что вы установили git с командами bash, доступными для всех). Имейте sed вставьте '//' маркеры, где когда-либо найден маркер конфликта.

Почему это плохая идея:

Я бы не рекомендовал это, поскольку эффект не принесет вам никакой выгоды. Вы ХОТИТЕ эффектно потерпеть неудачу, когда существует неразрешенный конфликт, который был сохранен, добавлен и зафиксирован. Делать то, что вы предлагаете здесь, - это напрашиваться на неприятности. Если вам это удастся, действуйте с осторожностью.

Надеюсь, это поможет.

0 голосов
/ 13 июня 2012

Это зависит от индивидуального драйвера слияния.Из man gitattributes (5) :

Существует несколько встроенных низкоуровневых драйверов слияния, которые можно запрашивать с помощью атрибута слияния.

text

Обычное трехстороннее слияние на уровне файлов для текстовых файлов.Конфликтующие регионы помечаются маркерами конфликта <<<<<<<, ======= и >>>>>>>.Версия из вашей ветви отображается перед маркером =======, а версия из объединенной ветви - после маркера =======.

[…]

Определение пользовательского драйвера слияния

Определение драйвера слияния выполняется в файле .git / config, а не в файле gitattributes, поэтому, строго говоря, эта страница руководства является неправильным местомговорить об этом.Однако…

Чтобы определить пользовательский файл драйвера слияния, добавьте раздел в файл $ GIT_DIR / config (или файл $ HOME / .gitconfig), например:

[merge "filfre"]
         name = feel-free merge driver
         driver = filfre %O %A %B
         recursive = binary

То есть: драйвер слияния «текст» делает то, что вам не нравится, и не может быть настроен относительно того, какой символ использовать (хотя вы можете настроить его для использования большего количества маркеров).Но вы можете скопировать и вставить драйвер, переименовать его, заменить символ на ваш, а затем настроить git для использования вашего драйвера.

0 голосов
/ 04 августа 2011

Не существует способа сделать это.Git действительно разработан для гибкости, но в этом случае он обеспечивает эту гибкость, позволяя людям предоставлять свои собственные драйверы слияния.Это не тривиальный объем работы.Другой вариант - взломать исходный код, что будет не намного проще.

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

Если вы решите пойти по этому пути, чтобы можно было компилировать во время разрешения слияния, я бы рекомендовал вместо того, чтобы просто закомментировать маркеры конфликта, закомментировать всеконфликтный код, кроме вашей локальной версии изменений.Таким образом, у вас больше шансов создать что-то компилируемое.И, возможно, добавьте прагму #warning или аналогичную, чтобы напомнить вам на случай, если вы случайно оставите один из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...