Git, vimdiff и dirdiff
Я пытаюсь использовать vimdiff + dirdiff.vim, чтобы различать файлы Vim с версиями Git.
Для Mercurial это возможно с расширением mercurial extdiff.
Единственный способ, которым я нашел в Интернете интеграцию Vim с Git diff - использовать vimdiff в одном файле, как описано в этом сообщении.
Кто-нибудь знает, как использовать vimdiff + dirdiff + git?
Ответы
Ответ 1
До git версия 1.7.11
git-diffall
- это то, что мне нужно, большое спасибо. С помощью этой страницы о git difftool и этой one о запуске vim + dirdiff из командной строки, я написал свой $HOME/.gitconfig
как:
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = vim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)' $LOCAL $REMOTE
[difftool]
prompt = false
После размещения git-diffall
в моем PATH
, я могу разделить, например, рабочий каталог с веткой dev
с помощью:
git diffall dev
--copy-back
- это то, что мне нужно, если я хочу постоянно изменять рабочий каталог из Vim:
git diffall --copy-back dev
Так как git версия 1.7.11
Поскольку версия 1.7.11, "git diffftool" узнал опцию "--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
Ответ 2
Тим Папа fugitive - это квинтэссенциальный git плагин для vim. Он может не иметь функциональности dirdiff, но он отлично интегрирует вывод git status
, при этом сопоставления клавиш легко перемещаются между измененными файлами. Любые файлы, перечисленные в вашем выводе git status
, могут быть легко различимы с отображением D, что позволяет настраивать точные изменения, внесенные в ваши изменения.
Ответ 3
Git не поддерживает дистрибутивы каталога напрямую, но это может быть сделано с сторонним расширением.
Отъезд git diffall
(раскрытие: я написал это script). Этот script работает с набором инструментов, установленным git config diff.tool <TOOL>
, для выполнения истинного diff каталога.
Также см. следующие вопросы:
Ответ 4
Было бы интересно следить за для модуля Vim для скрытых объектов, потому что, начиная с (git 1.7.11, июнь 2012 г.), git теперь могут создавать каталоги diff (т.е. отображать все файлы, которые нужно сравнить, перед тем, как открыть difftool
)
См. "git difftool
, чтобы сравнить каталог?"
Поэтому добавление этой функции в fugitive.vim
будет эволюцией от подхода к файлу diff.
Однако Zyx указывает в комментарии пределы этого подхода:
Все, что вам нужно для этого:
-
git diff --name-status
и -
git cat-file
,
ничего больше (кроме некоторого кода vimscript
).
И, в отличие от git difftool
, это работает для любого VCS с поддержкой vcs diff
и vcs cat-file
Zyx упоминает в качестве примера того, что этот файловый файл использует свой проект aurum:
У моего aurum есть функция типа dirdiff (AuVimDiff full
открывает кучу вкладок с просмотром vimdiff
файлов с различиями) и никогда не использовала какую-либо поддержку difftool
.
(см. script 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).
С самого начала писать все с нуля