протиріччя та злиття конфліктів


14

Під час об'єднання гілок під контролем джерел часто виникає проблема конфлікту злиття з іншими розробниками.

Я знаю, що ми можемо використовувати vimdiff для різниці змін коду від контролю джерела , але чи є також спосіб, яким ми можемо скористатися vimdiff, щоб допомогти вирішити конфлікти злиття конфліктів.

Мене особисто більше цікавить git, але було б корисно зрозуміти, чи є плагіни / методи для інших інструментів / систем управління джерелами.


Ви ніколи не спробували Meld ?
Eric Sabelhaus

1
@EricSabelhaus: Це краще, ніж непереборник у вирішенні конфліктів? Цей сайт про запитання / відповіді на питання про vim.
Мартін Йорк

Це залежить від випадку використання, який я думаю. Якщо я працюю над кодом, який живе віддалено, я, звичайно, буду використовувати vimdiff. Якщо я працюю локально на своїй машині розробки, я буду використовувати Meld, оскільки він надає багатофункціональний інтерфейс, щоб допомогти розробнику у виконанні складних тривимірних злиттів.
Ерік Сабельгаус

1
@EricSabelhaus: Для мене термін feature rich UIвводить в оману; vimdiff може не мати гарний інтерфейс користувача, він, безумовно, багатий на функції. Я також вважаю, що vim є набагато більш продуктивним середовищем, яким користувалися всі редактори GUI (але я ним користувався давно, і це була крута крива навчання). Мені цікавіше, якщо Мелд робить щось, що не робить цього, що зробило б це вартим, навіть якщо дивитися.
Мартін Йорк

Я не можу конкретно сказати, чи має він більш надійний набір функцій, але це, безумовно, в тій самій царині, що і vimdiff.
Ерік Сабельгаус

Відповіді:


18

Я зазвичай використовую git у командному рядку.

Але коли виникає конфлікт злиття, я використовую Vim для їх вирішення (особисто я це роблю з плагіном-втікачем). Примітка: втікач корисний для багатьох маніпуляцій з git зсередини Vim. Моя улюблена особливість - це 3-х різний конфлікт злиття.

git підтримує це у vimdiff через git mergetool. Я встановив втікача, але ви можете встановити його вручну (спасибі @ Джей Томпсон).

Налаштування вручну:

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

Вихід трохи відрізняється від описаного нижче (я особисто цього не використовував). Але принцип той самий, але у вас внизу четверте вікно, яке містить результат.

введіть тут опис зображення

Налаштуйте з втікачем

vim-fugitive - це плагін git обгортка / інтеграційний плагін для Vim; вона може зробити багато речей, і вирішення конфліктів - одна з них.

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. Перегляд 2 (зліва): код, який був у вашій філії.
  2. Перегляд 1 (посередині): об'єднаний код (із конфліктами)
  3. Перегляд 3 (праворуч): код, який був об'єднаний у ваш код.

Тепер ви можете витягнути і отримати текст з двох інших подань у центральний вигляд (який містить усі виправлення вручну). Після того як ви вирішите всі конфлікти вручну, просто вийдіть з vimdiff

введіть тут опис зображення

Хоча ви можете використовувати :diffget <view number>та :diffput <view number>перетягувати речі між видами. Я особисто не вважаю це дуже корисним. Весь код уже знаходиться в середньому вікні. Тому я просто люблю редагувати цей погляд вручну, поки конфлікт не буде вирішений. Можливість бачити обидві версії коду з обох боків вікна мого редактора, хоча це надзвичайно корисно.

Також дуже хороша демонстрація його використання тут


1
Якщо ви не хочете використовувати або встановлювати Fugitive з якихось причин, ви також можете просто встановити, git config --global merge.tool vimdiffа потім запустити, git mergetoolщоб запустити vim в режимі diff.
Джей Томпсон

Чи підтримує це стиль конфліктів злиття "diff3", де показані "об'єднані спільні предки"?
alxndr

@alxndr: Я раніше не чув про diff3. Але після швидкого гугла. Вихід конфлікту злиття в git (та іншому контролі джерела, який я використовував) такий же, як a diff3 -E. Отже, зображення, що перераховані вище, генеруються з файлів, у яких є ці маркери.
Мартін Йорк

Тепер, коли я придивляюся уважно, перший знімок показує стиль diff3 злиття; середня верхня панель "БАЗА" є загальним предком, від якого розходилися ліва і права панелі.
alxndr

1
Важливо пам’ятати, що кожен з цих 4 переглядів - це лише буфер. Це означає, що ви можете відкрити іншу вкладку (або навіть залишитися в тому ж вікні) і вибрати лише ті буфери, які ви хочете подивитися в будь-який момент. Немає жодної причини тримати всі вікна відразу, якщо ви не використовуєте їх.
опитування Коді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.