Перегляд усіх "git diffs" з vimdiff


209

Я налаштовуюся, git diffщоб перетворитись на vimdiff, використовуючи " Git Diff with Vimdiff " в якості посібника, і він працює як очікувалося, якщо не буде багато файлів зі змінами.

Коли є декілька файлів із змінами, і я запускаю git diff, він відкриває перший файл, і після виходу з першого екземпляра vimdiff мені надходить таке повідомлення:

external diff died, stopping at filename

Це зовсім інша поведінка, ніж я звик. У мене було подібне налаштування в минулому з SVN, і, відрізняючись від декількох файлів, я переглянув би перший файл, потім записав і вийшов з використання, :wqі наступний файл з відмінностями відкрився б.

Це не так з Git. Я спробував :n[ext], але це не заповнює ліве вікно вихідним файлом, щоб його можна було відрізняти від модифікованої версії.

Відповіді:


337
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

Введення тексту git dдає очікувану поведінку, набираючи :wqцикли vim до наступного файлу в наборі змін.


22
Тільки два мої центи: я dfвідчужу diffі dtпережив difftool. Крім того, набравши :qaVim, перейдете до наступного набору змін, не зберігаючи нічого.
JC Yamokoski

2
Це рішення чудово, за винятком того, що для збереження змін вам потрібно ввести ": w!" замість: w
Асенар

2
@jonyamo Налаштування псевдоніму завжди має базуватися на тому, як часто ми використовуємо деякі команди. Я часто використовую, git diffніж git difftool. Тож я перейшов dдо "diff" і 'dt' to difftool ". Корисність - це значення, ніж створення псевдонімів з малюнком.
Хабіб Первад

Як змусити "git diff" використовувати vimdiff ?, ця відповідь змушує мене використовувати псевдонім. Якщо я псевдонім на "diff" не працює.
Ромбус

6
@Asenar "Це рішення чудове за винятком того, що при збереженні змін вам потрібно вводити :w!замість :w". Це тому, що git дзвінки vimdiffз -Rопцією. Ви можете її перекрити git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'. Це відкриє vimdiff в режимі запису.
wisbucky

103

Можна спробувати git difftool, він розроблений для цього.

По-перше, вам потрібно налаштувати різний інструмент для vimdiff

git config diff.tool vimdiff

Потім, коли ви хочете відрізнятись, просто використовуйте git difftoolзамість git diff. Він буде працювати, як ви очікуєте.


1
Майже там! Трохи модифікований, це саме те, що я шукаю. +1, хоча!
chuckg

1
Нещодавно оновлено mergetool vimdiff : git.kernel.org/?p=git/… (та кілька інших комісій , але це найбільший). Не впевнений, коли буде наступний випуск технічного обслуговування, але якщо ви готові створити з git.git, оновлення повинні бути вашими!
Каскабель

21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge

3
Ви відповідаєте за mergetool, а не difftool. Але це все-таки корисна відповідь. +1.
dotancohen

@dotancohen Дійсно Дякую, я ніколи не помічав, що на дурну помилку зараз я можу редагувати свою відповідь.
Nanhe Kumar

1
@NanheKumar, @dotancohen, замінюючи mergeз diffв наведених вище відповідей буде робити трюк, тобто git config --global diff.tool vimdiff .
Буде

2

Для людей, які хочуть використовувати інший інструмент різниці, не вказаний у git, скажімо, що nvim. ось що я в кінцевому підсумку використав:

git config --global alias.d difftool -x <tool name>

У моєму випадку, я поставив <tool name>в nvim -dі викликати команду дифф з

git d <file>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.