мерзавец, vimdiff и dirdiff - PullRequest
       8

мерзавец, vimdiff и dirdiff

20 голосов
/ 16 ноября 2011

Я пытаюсь использовать vimdiff + dirdiff.vim для сравнения внутри Vim нескольких файлов с версией Git.

Для Mercurial это возможно с расширением mercurial extdiff .

Единственный способ, которым я нашел в Интернете интеграцию Vim с Git diff, - это использовать vimdiff для отдельного файла, как описано в этом посте .

Кто-нибудь знает, как использовать vimdiff + dirdiff + git?

Ответы [ 4 ]

16 голосов
/ 17 ноября 2011

До версии git 1.7.11

git-diffall это то, что мне нужно, большое спасибо. С помощью этой страницы о git difftool и этой one о запуске vim + dirdiff из командной строки я написал $HOME/.gitconfig как:

* * 1010

После помещения git-diffall в мой PATH я могу сравнить, например, рабочий каталог с веткой dev с:

git diffall dev

--copy-back - это также то, что мне нужно, если я хочу срочно изменить рабочий каталог из Vim:

git diffall --copy-back dev

Начиная с git версии 1.7.11

Начиная с версии 1.7.11 , "git difftool" узнал опцию "--dir-diff", которая упрощает вещи, и git-diffall больше не нужен.

.gitconfig содержит:

[diff]
  tool = default-difftool
[difftool "default-difftool"]
  cmd = vim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)' $LOCAL $REMOTE '+syntax off'

И различие, например, рабочего каталога с веткой dev выполняется с помощью:

git difftool -d dev
6 голосов
/ 16 ноября 2011

Беглец Тима Поупа - наиболее существенный плагин для git для vim. Он может не иметь функциональности dirdiff, но он прекрасно интегрирует вывод git status с клавишами, чтобы легко перемещаться между измененными файлами. Любые файлы, перечисленные в вашем git status выводе, могут быть легко преобразованы с помощью сопоставления D , что позволяет вам точно настроить изменения, вносимые в ваши изменения.

2 голосов
/ 18 июня 2012

Было бы интересно отслеживать коммиты для модуля Vim fugitive , потому что, начиная с ( git 1.7.11 , июнь 2012), git теперь может различаться каталоги (т.е. отображать все файлы для сравнения перед открытием difftool)

См. "git difftool, чтобы сравнить каталог? "

Таким образом, добавление этой функции к fugitive.vim будет эволюцией от файла к разностному подходу.

Однако Zyx указывает в комментарии пределы этого подхода:

Все, что вам нужно, чтобы получить эту работу:

  1. git diff --name-status и
  2. git cat-file,

больше ничего (кроме некоторого vimscript кода).
И, в отличие от git difftool, это работает для любых VCS с vcs diff и vcs cat-file с поддержкой

Zyx упоминает в качестве примера такого подхода к файлу файлов его проект aurum :

Мой aurum имеет функцию, похожую на dirdiff (AuVimDiff full открывает кучу вкладок с vimdiff просмотром файлов, имеющих различия), и он никогда не использовал какую-либо поддержку difftool.

(см. Сценарий aurum / autoload / aurum / vimdiff.vim)

Zyx добавляет:

это не может быть хорошим руководством для человека, который хочет добавить эту функцию в беглеца:
Фактический вызов git diff --name-status скрыт внутри драйвера git в функции, вызываемой s:git.status, доступной как repo.functions.status (потому что mercurial использует hg status -r rev1:rev2, а не hg diff --name-status, и я нахожу это довольно логичным).
Таким образом, здесь вы должны пройти три уровня абстракции (интерфейс репозитория, оболочка команд оболочки и только потом фактический вызов git).
Все быстрее писать с нуля

2 голосов
/ 16 ноября 2011

Git не поддерживает директивные различия напрямую, но это можно сделать с помощью стороннего расширения.

Извлечь git diffall (раскрытие: я написал этот скрипт).Этот скрипт работает с инструментом, установленным git config diff.tool <TOOL> для выполнения истинного сравнения каталогов.

Также посмотрите следующие вопросы:

...