Перейти к содержимому

Vimdiff и Git все сразу

5

Я использую vimdiff в качестве моего difftool с git.

Допустим, я изменил двенадцать файлов. Проблема в том, что иногда я запускаю git diffи вокруг четвертого или пятого файла я вижу что-то, что я хочу отредактировать / изменить. Иногда мне нужно сделать еще несколько изменений вне этого. Проблема в том, что я не могу просто :qaвернуться к взлому, потому что в vimdiff появилось еще шесть или семь различий. Это становится действительно утомительным для :qaвсех этих файлов, не смотря каждый раз, когда я хочу прервать git diff.

Есть ли способ настроить vimdiff как difftool для git, чтобы все diff-файлы открывались в одном и том же экземпляре vim, например, в отдельных вкладках?

2 645 просмотров
So8res спросил 14 лет назад
S 806

3 ответа

4
Принятый ответ

You could use the vim plugins published here. Then you just need to set the difftool:

[multidiff] tool = vd -f 

As an alternative application I would suggest meld, which will show you modified files - you can then select just the files who's diffs you want to see.

See the screenshot here for an example.

Further to Marcos useful comment, as a third (manual alternative) if you want to use vimdiff I would recommend following meld's strategy in a script (possibly python):

  • use git diff-files --name-status and git diff-index --name-status --cached HEAD to identify files that need to be examined.
  • Get cached versions of these files and place in /tmp/
  • Open all of these files - the changed files and their cached versions - at once in vimdiff - though most likely not possible in the sense that you require- see below.

However, as vimdiff itself doesn't seem to handle multiple diff tabs natively I recommend one of my other suggestions above.

Это было бы лучше использовать в качестве комментария, поскольку он не отвечает на вопрос вообще.

Marco · 14 лет назад · 0

Спасибо за ваше предложение @Marco - я надеюсь, что мои изменения улучшили мой ответ.

jmetz · 14 лет назад · 0

Они сделали определенно. Это не то, что я бы назвал элегантным, но, похоже, работает. Я дам ему две недели тестирования, если это практическое решение. Спасибо за то, что поделились этим «вторжением» vim, в то время как diffing всегда беспокоил меня.

Marco · 14 лет назад · 1
jmetz ответил 14 лет назад
J 794
3

Очень простой обходной путь - добавить эту опцию в ваш файл ~ / .gitconfig.

[difftool] tool = vimdiff $LOCAL $REMOTE prompt = true 

Таким образом, перед каждым сравнением файлов вам будет предложено пропустить файл, ответив «нет», или прервать сравнение файлов с помощью Ctrl + C.

Пример:

$ git difftool Viewing: 'file1.js' Launch 'vimdiff' [Y/n]: y 2 files to edit  Viewing: 'file2.js' Launch 'vimdiff' [Y/n]: n 
Laurent Winkler ответил 13 лет назад
L 91
1

Это то, что я использую. Требуется, чтобы вы использовали vim-fugitive

[alias] dt = "!f() { vim -p $(git diff --name-only) +\"tabdo Gdiff $@\" +tabfirst; }; f"

git dtзатем откроет каждую пару различий в отдельной вкладке. Затем :tabcloseзакрыть одну пару или :qaвыйти.

источник

Будет ли это работать с несколькими ссылками вместо сравнения с рабочими файлами?

Spidey · 7 лет назад · 0

Нет, так как это работает, открывая все рабочие файлы и запуская Gdiff на каждой вкладке.

Lewis R · 7 лет назад · 0
Lewis R ответил 8 лет назад
L 11