Як налаштувати та використовувати Meld як диффузол git?
git difftool відображає diff за допомогою програми diff графічного інтерфейсу (тобто Meld), а не відображення диференційного виходу у вашому терміналі.
Хоча ви можете встановити програму GUI у командному рядку, використовуючи -t <tool> / --tool=<tool>її, має сенс налаштувати її у своєму .gitconfigфайлі. [Примітка. Дивіться розділи про вимкнення цитат та шляхи до Windows внизу.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Примітка: ці налаштування не змінять поведінку, git diffяка продовжуватиме працювати як завжди.]
Ви використовуєте git difftoolточно так само, як і ви git diff. напр
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Якщо правильно налаштовано, відкриється вікно Meld, на якому відображатиметься diff за допомогою інтерфейсу GUI.
Порядок віконних панелей графічного інтерфейсу Meld можна керувати порядком $LOCALі $REMOTEв cmd, тобто, який файл відображається у лівій та який у правій області. Якщо ви хочете їх навпаки, просто обміняйте їх так:
cmd = meld "$REMOTE" "$LOCAL"
Нарешті, prompt = falseрядок просто зупиняє git від того, щоб підказати вам, чи хочете ви запустити Meld чи ні, за замовчуванням git видасть підказку.
Як налаштувати та використовувати Meld як мій gget mergetool?
git mergetool дозволяє використовувати програму злиття GUI (тобто Meld) для вирішення конфліктів злиття, що виникли під час злиття.
Як і difftool, ви можете встановити програму GUI в командному рядку за допомогою, -t <tool> / --tool=<tool>але, як і раніше, має сенс налаштувати її у вашому .gitconfigфайлі. [Примітка. Дивіться розділи про вимкнення цитат та шляхи до Windows внизу.]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
Ви НЕ використовуєте git mergetoolдля здійснення фактичного злиття. Перед використанням git mergetoolви виконуєте злиття звичайним чином з git. напр
git checkout master
git merge branch_name
Якщо є конфлікт злиття, git відобразить щось подібне:
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
У цей момент file_nameбуде міститись частково об'єднаний файл із конфліктною інформацією про злиття (це файл із усіма записами >>>>>>>та <<<<<<<записами в ньому).
Mergetool тепер може використовуватися для вирішення конфліктів злиття. Ви починаєте це дуже легко:
git mergetool
Якщо правильно налаштовано, відкриється вікно Meld із відображенням 3-х файлів. Кожен файл міститиметься в окремій області інтерфейсу GUI.
У наведеному .gitconfigвище прикладі в якості [mergetool "meld"] cmdрядка пропонуються 2 рядки . Насправді існують всілякі способи для досвідчених користувачів налаштувати cmdлінію, але це виходить за рамки цієї відповіді.
У цій відповіді є два альтернативних cmdрядки, які між ними будуть задовольняти більшість користувачів, і стане гарною відправною точкою для досвідчених користувачів, які бажають перенести інструмент на наступний рівень складності.
По-перше, ось що означають параметри:
$LOCAL - це файл у поточній гілці (наприклад, master).
$REMOTE це файл у гілці, що об'єднується (наприклад, ім'я гілки).
$MERGED це частково об'єднаний файл із конфліктною інформацією про об'єднання.
$BASEє спільним предком фіксації, $LOCALі $REMOTEце означає файл, як це було, коли гілка, що містить, $REMOTEбула створена спочатку.
Я пропоную вам скористатися будь-яким:
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
або:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
Вибір - використовувати $MERGEDчи $BASEміж ними $LOCALта між ними $REMOTE.
У будь-якому випадку Meld буде відображати 3 панелі з $LOCALі $REMOTEв лівій і правій панелях, або на $MERGEDабо $BASEсередній панелі.
У випадках BOTH середня панель - це файл, який слід відредагувати, щоб вирішити конфлікти злиття. Різниця полягає лише в тому, в якій початковій позиції редагування ви б хотіли віддати перевагу; $MERGEDдля файлу, який містить частково об'єднаний файл із конфліктною інформацією про злиття або $BASEдля предка спільного виконання комісій $LOCALта $REMOTE. [Оскільки обидва cmdрядки можуть бути корисними, я зберігаю їх обидва у своєму .gitconfigфайлі. Більшу частину часу я використовую $MERGEDрядок, і $BASEрядок коментується, але коментування може бути замінено, якщо я хочу використовувати $BASEрядок замість цього.]
Note On Output File: Не хвилюйтеся , що --output "$MERGED"використовується в cmdнезалежно від того , $MERGEDчи $BASEвикористовувався раніше в cmdлінії. Цей --outputпараметр просто повідомляє Meld, яке ім'я файлу git хоче зберегти файл вирішення конфлікту. Meld збереже ваші зміни конфлікту у цьому файлі незалежно від того, використовуєте ви $MERGEDабо $BASEяк початкову точку редагування.
Після редагування середньої панелі для вирішення конфліктів злиття просто збережіть файл та закрийте вікно Meld. Git виконає оновлення автоматично, і файл у поточній гілці (наприклад, master) тепер міститиме все, що ви закінчили на середній панелі.
git зробить резервну копію частково об'єднаного файла з конфліктною інформацією в ньому, додавши .origдо оригінального імені файлу. напр file_name.orig. Перевіривши, що ви задоволені злиттям та виконавши будь-які тести, які ви можете зробити, .origфайл можна видалити.
На даний момент ви можете взяти на себе зобов’язання здійснити зміни.
Якщо під час редагування конфліктів злиття в Meld ви хочете відмовитися від використання Meld, а потім закрийте Meld, не зберігаючи файл роздільної здатності на середній панелі. git відповість на повідомлення, file_name seems unchangedа потім запитає Was the merge successful? [y/n], якщо ви відповісте, nтоді вирішення конфлікту злиття буде скасовано, а файл залишиться незмінним. Зауважте, що якщо ви зберегли файл у Meld в будь-який момент, то ви не отримаєте попередження та підказку від git. [Звичайно, ви можете просто видалити файл і замінити його на .origфайл резервного копіювання, який створено для вас.]
Якщо у вас більше 1 файлу з конфліктами злиття, то git відкриє нове вікно Meld для кожного, по черзі, поки вони не будуть виконані. Усі вони не будуть відкриті одночасно, але коли ви закінчите редагувати конфлікти в одному і закриєте Meld, git відкриє наступний і так далі, поки всі конфлікти злиття не будуть вирішені.
Було б розумним створити фіктивний проект для перевірки використання, git mergetoolперш ніж використовувати його в реальному проекті. Не забудьте використати ім’я файлу, що містить пробіл у вашому тесті, якщо ваша ОС вимагає від вас уникнути лапок у cmdрядку, див. Нижче
Уникнення символів цитати
У деяких операційних системах може знадобитися відмовитись від лапок cmd. Менш досвідчені користувачі повинні пам’ятати, що командні рядки конфігурації повинні бути протестовані з іменами файлів, які містять пробіли, а якщо cmdрядки не працюють з іменами файлів, які містять пробіли, то спробуйте уникнути лапок. напр
cmd = meld \"$LOCAL\" \"$REMOTE\"
У деяких випадках може знадобитися складніша втеча цитати. Перше з посилань на шлях до Windows нижче містить приклад потрійного виходу кожної цитати. Це нудно, але іноді необхідно. напр
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Доріжки для Windows
Користувачі Windows, ймовірно, потребуватимуть додаткової конфігурації, доданої до cmdрядків Meld . Можливо, їм потрібно буде використовувати повний шлях до meldc, який призначений для виклику в Windows з командного рядка, або вони можуть потребувати або хочуть використовувати обгортку. Вони повинні читати сторінки StackOverflow, що посилаються нижче, про те, як встановити правильну cmdлінію Meld для Windows. Оскільки я користувач Linux, я не в змозі перевірити різні cmdрядки Windows і не маю додаткової інформації з цього приводу, окрім як рекомендувати використовувати мої приклади з додаванням повного шляху до Meld або meldcабо додавання папки програми Meld у свою path.
Ігнорування пробілу пробілу з Meld
Meld має ряд переваг, які можна налаштувати в GUI.
На Text Filtersвкладці налаштувань є кілька корисних фільтрів, щоб ігнорувати речі, такі як коментарі, виконуючи різницю. Хоча є фільтри, які потрібно ігнорувати, All whitespaceі Leading whitespaceнемає Trailing whitespaceфільтра ігнорування (це було запропоновано як доповнення до списку розсилки Meld, але воно не доступне в моїй версії).
Ігнорування пробілів пробілів часто є дуже корисним, особливо при співпраці, і його можна легко вручну додати простим регулярним виразом на вкладці Meld preferences Text Filters.
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Я сподіваюся, що це допомагає всім.