Diff бягучай і папярэдняй версіі з дапамогай Вім-ўцекача

I know that :Glog will populate the quickfix list with all the versions of the file in the current buffer and that I can hit on these to see the file at that particular version, but is there an easy way to see the diff of a particular version with the previous version (to easily see what has changed)?

EDIT: Тое, што я пасля таго, як бачыць кожны з гэтых змяненняў у вертыкальнай дифф ў Vim: мярзотнік увайсці -p - шлях/да/file.txt .

14

9 адказы

Гэта тое, што я выкарыстоўваю:

:Gdiff [revision]

См : дапамагчы Gdiff іншых варыянтаў, а таксама (па вертыкалі супраць гарызантальных расколаў, і г.д.).

Напрыклад:

:Gdiff HEAD

або калі ў вас ёсць нумар версіі (напрыклад: aaffdfdstsdgssetds):

:Gdiff aaffdfds
8
дададзена

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

(Яна не паказвае адрозненняў у спісе QuickFix але ў буфер поўнага памеру, які ў норме)

3
дададзена
На жаль, Вім-гіт-часопіс знаходзіцца ў стане спакою з < A HREF = "https://github.com/kablamo/vim-git-log/issues" отн = "NOFOLLOW noreferrer"> шэсць нявырашаных пытанняў . (Апошні раз здзейсніць: ранні 2013.) Гэта таксама непрыгожа, як грэх. Адзінай альтэрнатывай з'яўляецца vimgitlog . Актыўна падтрымліваецца, апошняя нетрывіяльна для ўстаноўкі і (на маёй машыне, па меншай меры) прынцыпова парушаная - меркавана з-за не , выкарыстоўваючы Вім-збеглага пад капотам. Хто думаў, што гэта добрая ідэя? Такім чынам, я хацеў бы, калі б хто-то мог бы раскашэліцца і пачаць актыўна падтрымліваць Вім-GIT-часопіс зноў. <�Я> Pleaaase.
дададзена аўтар Cecil Curry, крыніца

Я лічу, што гэта так проста, як:

:vert diffsplit #
3
дададзена
Гэта робіць працу, так што я upvoted, але Gdiff на самай справе лепш, таму што яна звязвае непасрэдна ў спісе зменаў.
дададзена аўтар SkyLeach, крыніца

When using :Glog you can simply press on the line that starts diff --git. It will open the diff. You may also want to look into :Gdiff. You may want to look at Drew Neil's vimcasts, The Fugitive Series.

Для атрымання дадатковай даведкі звярніцеся да падзелу

:h fugitive
:h :Glog
:h :Gdiff
1
дададзена
Паводзіны вы апісалі (проста націсніце ) менавіта тое, што я хацеў бы, але я не атрымліваю адрозненняў, я проста атрымаць увесь файл у гэтай канкрэтнай версіі.
дададзена аўтар zoran119, крыніца
Так я адкрываю файл у Vim, а затым зрабіць : GLog . Гэта запоўніць спіс версій файла ў спісе QuickFix. Я не бачу дифф --get лінія ўсюды, дзе ёсць ... Я павінен быць недаразумення вашых інструкцый.
дададзена аўтар zoran119, крыніца
Да гэтага часу не мог прымусіць яго працаваць ... Знайшоў убудова з паводзінамі я хацеў: GitHub. кім/kablamo/Вім-гіт-часопіс
дададзена аўтар zoran119, крыніца
Пераканайцеся, што вы знаходзіцеся на лініі дифф --get а/б нейкі-файл/нейкі-файл .
дададзена аўтар Peter Rincker, крыніца
Вы павінны пайсці да фактычнай фіксацыі аб'екта. У : сп або : cfirst
дададзена аўтар Peter Rincker, крыніца
Я лічу, што адказ @ PeterRincker з'яўляецца залежным ад запуску : GLog -% першы. Гэта (ад : ч: GLog ): Загрузіць усе «... папярэдні здзяйсняе замест папярэдніх рэвізій файлаў ...» для бягучага буфера. Гэта вельмі адрозніваецца, чым проста : GLog , які будзе: «Загрузіць ўсе папярэднія рэвізіі бягучага файла ў спіс QuickFix.» Калі буфер змяшчае абавязацельства, замест рэвізіі файла, вы ўбачыце дифф --get а/б нейкі-файл/нейкі-файл лініі і будзе мець магчымасць сачыць за яго адказ.
дададзена аўтар irkenInvader, крыніца

Вы можаце дамагчыся гэтага, выканаўшы наступныя дзеянні:

  1. Change focus to the quickfix window and navigate to the line corresponding to the commit you're interested in.
  2. Find the commit hash in the line and yank it (the hash is now in the 0 register.
  3. Close the quickfix buffer, and do :Gdiff 0.

Гэта павінна запусціць правільны диф.

You can automate steps 2 and 3 by adding this mapping to your .vimrc file:

nnoremap gd /\.gitwwwyw:cclose:Gdiff 0

Звярніце ўвагу на тое, што адлюстраванне прымае курсор знаходзіцца ў пачатку радка (перад .git// часткі).

1
дададзена

Я напісаў функцыю, якая дазваляе дифф ад папярэдняй рэвізіі бягучага файла. Я выкарыстоўваю гэта для прагляду адрозненняў паміж рабочай копіяй і пераглядаў «п» раз таму.

Вось код, каб пакласці ў .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

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

<�Код> : Выклік Diffrev (2)

0
дададзена

Па-першае, адкрыць файл, які вы хочаце для атрымання зменаў.

Калі змяненне здзяйсняецца, увядзіце : Gdiff ГАЛАВЫ ~ 1
. Калі змяненне <�моцны> НЕ дасканалыя, увядзіце : Gdiff ГАЛАВЫ .

0
дададзена

Адзін са спосабаў, каб убачыць дифф камітаў гэта:

:Gedit [revision]
0
дададзена

Для дифф з яго папярэдняй версіяй, выканайце наступныя дзеянні:

  1. use Glog
  2. navigate to the desired version
  3. type C, which opens the commit
  4. go to the line contains diff --git a/you/file b/you/file and press

Акрамя таго, для дифф папярэдняй версіі з нумарам версіі ў Індэкс (рабочая версія), вы можаце зрабіць гэта:

  1. use Glog
  2. navigate to the desired version
  3. use Gdiff in this new window without parameter. Done!

Gdiff without parameter will diff the current buffer with the one in index, which is exactly what you want

Вы можаце таксама разгледзець магчымасць выкарыстання ўбудовы Вім-нераздзеленага , які забяспечвае дзве карты ] д і для перамяшчэння па спісе QuickFix. (Таксама ] Q і [Q )

0
дададзена