Зовнішні інструменти діфа та злиття
Переглядач діфів Gitcito і резолвер із трьома панелями справляються з більшістю днів. Але не з усіма: згенерований файл на 4 000 рядків, злиття, де треба бачити чотири колонки одночасно, або просто інструмент, яким ви користуєтеся десять років і читаєте швидше за будь-який новий.
Налаштування → Загальні → Зовнішні інструменти діфа та злиття.
Це список git, а не наш
Gitcito не тримає власної таблиці. Випадні списки — це git difftool --tool-help
і git mergetool --tool-help, і саме тому:
Інструменти, які git уже знайшов на вашій машині, показані першими; ті, про які він знає, але не може знайти, — після них, із позначкою не встановлено.
Власний інструмент працює без жодної додаткової підтримки. Якщо у вас є
git config --global difftool.mine.cmd 'mycompare "$LOCAL" "$REMOTE"'то
mineз’явиться у списку нарівні з будь-яким вбудованим.Ваш вибір записується в
diff.toolіmerge.toolвашої глобальної конфігурації git — ті самі ключі, які читає ваш термінал. Налаштуйте тут — іgit difftoolу командному рядку поведеться так само. Налаштуйте там — і Gitcito це підхопить.
Git знає з коробки близько тридцяти інструментів, серед них Kaleidoscope, Beyond Compare, Meld, KDiff3, P4Merge, Araxis, DiffMerge, WinMerge, FileMerge, VS Code і родина vim.
Де з’являються дії
| Місце | Дія |
|---|---|
| Змінений файл у композері коміту | Diff in <tool> — робоче дерево проти індексу |
| Резолвер конфліктів | Merge in <tool> — повне тристороннє злиття |
Обидва пункти з’являються лише тоді, коли інструмент справді налаштовано;
неналаштований git difftool просто впав би з помилкою, а мертва кнопка гірша за
відсутню.
Що відбувається, поки інструмент відкритий
Gitcito чекає, доки він закриється. Це навмисно — git mergetool індексує
розв’язаний файл лише після виходу з інструмента, тож має бути справжній
результат, про який можна повідомити, — і саме тому кнопка показує спінер, а не
повертається одразу.
Решта застосунку лишається чуйною: усе це виконується поза блокуванням окремого репозиторію, яке серіалізує звичайні операції git, тож інструмент злиття, покинутий відкритим на час обіду, не заморожує вкладку за ним.
Коли зовнішнє злиття вдається, git сам індексує файл, а Gitcito закриває резолвер і оновлює стан. Якщо ви закриєте інструмент, не зберігши, git так і скаже, і нічого не зміниться.
Файл .orig
git mergetool типово лишає поруч із розв’язаним файлом резервну копію
<file>.orig — це поведінка git, а не Gitcito. Перемикач у налаштуваннях
записує mergetool.keepBackup; вимкніть його — і розв’язаний файл не лишить по
собі нічого.
Обмеження
- Лише діфи робочого дерева. Пункт у композері порівнює те, що у вас зараз, з індексом. Порівняння двох історичних комітів у зовнішньому інструменті не реалізоване — для цього скористайтеся вбудованим переглядачем діфів або порівнянням.
- По одному файлу за раз. Жодного прогону «зробити діф для кожного зміненого файлу» немає.
- Gitcito нічого не встановлює. Інструмент, позначений як не встановлено, лишається доступним для вибору, бо git може знайти його після того, як ви його встановите, — але доти він падатиме.