Diff текущей и предыдущей версии с использованием vim-fugitive - программирование
Подтвердить что ты не робот

Diff текущей и предыдущей версии с использованием vim-fugitive

Я знаю, что :Glog заполнит список быстрого устранения всеми версиями файла в текущем буфере и что я могу нажать <enter> на них, чтобы увидеть файл в этой конкретной версии, но есть простой способ чтобы увидеть разницу конкретной версии с предыдущей версией (чтобы легко увидеть, что изменилось)?

EDIT: то, что мне нужно, видит каждое из этих изменений в вертикальной разнице в vim: git log -p -- path/to/file.txt.

4b9b3361

Ответ 1

Не удалось убедить себя сделать то, что я хочу (он либо не делает этого, либо я не знаю, как его использовать), но я нашел плагин, который дает желаемое поведение: https://github.com/kablamo/vim-git-log.

(он не показывает разницу в списке быстрого удаления, а в полноразмерном буфере, который в порядке)

Ответ 2

Это то, что я использую:

:Gdiff [revision]

См. :help Gdiff для других параметров (вертикальные и горизонтальные разбиения и т.д.).

Например:

:Gdiff HEAD

или если у вас есть номер версии (например: aaffdfdstsdgssetds):

:Gdiff aaffdfds

Ответ 3

Я считаю, что это так просто:

:vert diffsplit #

Ответ 4

При использовании :Glog вы можете просто нажать <cr> на строке, начинающейся с diff --git. Он откроет diff. Вы также можете посмотреть :Gdiff. Вы можете посмотреть на Drew Neil vimcasts, Серия Fugitive.

Подробнее см.

:h fugitive
:h :Glog
:h :Gdiff

Ответ 5

Один из способов увидеть разницу фиксации - это:

:Gedit [revision]

Ответ 6

Сначала откройте файл, который вы хотите разграничить.

Если изменение зафиксировано, введите :Gdiff HEAD~1.
Если изменение выполнено НЕ, введите :Gdiff HEAD.

Ответ 7

Вы можете добиться этого, выполнив следующие шаги:

  • Измените фокус на окно быстрого вызова и перейдите к строке, соответствующей интересующей вас фиксации.
  • Найти хеш фиксации в строке и вытащить его (хеш теперь находится в регистре 0.
  • Закройте буфер быстрого исправления и сделайте :Gdiff <C-r>0.

Это должно привести к соответствующему разлому.

Вы можете автоматизировать шаги 2 и 3, добавив это сопоставление в ваш файл .vimrc:

nnoremap <Leader>gd /\.git<CR>wwwyw<Esc>:cclose<CR>:Gdiff <C-r>0<CR>

Обратите внимание, что отображение предполагает, что ваш курсор находится в начале строки (перед частью .git//).

Ответ 8

Чтобы выполнить различие с предыдущей версией, выполните следующие действия:

  • использовать Glog
  • перейти к нужной версии
  • type C, который открывает фиксацию
  • перейти к строке содержит diff --git a/you/file b/you/file и нажать <cr>

Кроме того, чтобы развернуть предыдущую версию с версией в индексе (рабочая версия), вы можете сделать это:

  • использовать Glog
  • перейти к нужной версии
  • используйте Gdiff в этом новом окне без параметров. Готово!

Gdiff без параметра будет различать текущий буфер с индексом index, который именно вы хотите

Вы также можете рассмотреть возможность использования плагина vim-unimpaired, который предоставляет две карты ]q и [q для навигации по списку быстрого удаления, (Также ]q и [q)

Ответ 9

Я написал функцию, которая позволяет вам сравнивать с предыдущей версией текущего файла. Я использую это для просмотра разницы между рабочей копией и ревизиями "n" раз назад.

Вот код, который нужно добавить в ваш .vimrc(требуется https://github.com/tpope/vim-fugitive):

"Diff the current file against n revision (instead of n commit)
function! Diffrev(...)

  let a:target = @%

  "check argument count
  if a:0 == 0
    "no revision number specified
    let a:revnum=0
  else
    "revision number specified
    let a:revnum=a:1
  endif

  let a:hash = system('git log -1 --skip='.a:revnum.' --pretty=format:"%h" ' . a:target)
  execute 'Gdiff' . a:hash
endfunc

Вы можете вызвать функцию так (пример ниже отличается от третьей версии назад):

:call Diffrev(2)