Як налаштувати та використовувати 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]*$
Я сподіваюся, що це допомагає всім.