【问题标题】:Diff of current and previous version using vim-fugitive使用 vim-fugitive 的当前版本和以前版本的差异
【发布时间】:2013-05-24 01:10:16
【问题描述】:

我知道:Glog 将使用当前缓冲区中文件的所有版本填充快速修复列表,并且我可以在这些上点击<enter> 以查看该特定版本的文件,但有没有简单的方法查看特定版本与以前版本的差异(轻松查看发生了什么变化)?

编辑:我所追求的是在 vim 的垂直差异中看到这些变化中的每一个:git log -p -- path/to/file.txt

【问题讨论】:

    标签: vim vim-fugitive


    【解决方案1】:

    这是我用的:

    :Gdiff [revision]
    

    请参阅:help Gdiff 了解其他选项(垂直拆分与水平拆分等)。

    例如:

    :Gdiff HEAD
    

    或者如果您有修订号(即:aaffdfdstsdgssetds):

    :Gdiff aaffdfds
    

    【讨论】:

      【解决方案2】:

      我相信它很简单:

      :vert diffsplit #
      

      【讨论】:

      • 这确实有效,所以我投了赞成票,但 Gdiff 实际上更好,因为它直接与更改列表相关。
      【解决方案3】:

      无法做我想做的事(它要么不做,要么我不知道如何使用它),但我确实找到了提供所需行为的插件:https://github.com/kablamo/vim-git-log

      (它不会在快速修复列表中显示差异,而是在完整大小的缓冲区中,这没关系)

      【讨论】:

      • 遗憾的是,vim-git-logsix outstanding issues 处于休眠状态。 (最后一次提交:2013 年初。)它也像罪恶一样丑陋。唯一的其他选择是vimgitlog。在积极维护的同时,后者安装起来并不简单,并且(至少在我的机器上)从根本上被破坏了——大概是由于 not 在引擎盖下使用vim-fugitive。谁认为这是个好主意?所以,如果有人可以分叉并再次开始积极维护vim-git-log,我会很高兴。 请。
      【解决方案4】:

      首先,打开你想要比较的文件。

      如果更改已提交,请输入:Gdiff HEAD~1
      如果更改提交,请输入:Gdiff HEAD

      【讨论】:

        【解决方案5】:

        要与之前的版本进行比较,请按照下列步骤操作:

        1. 使用Glog
        2. 导航到所需的版本
        3. 输入C,打开提交
        4. 转到包含diff --git a/you/file b/you/file 的行并按<cr>

        此外,要将以前的版本与 index 中的版本(工作版本)进行比较,您可以这样做:

        1. 使用Glog
        2. 导航到所需的版本
        3. 在这个新窗口中使用Gdiff,不带参数。 完成!

        Gdiff 不带参数会将当前缓冲区与 index 中的缓冲区进行比较,这正是您想要的

        您也可以考虑使用插件vim-unimpaired,它提供了两个地图]q[q 来导航快速修复列表。 (还有]Q[Q

        【讨论】:

          【解决方案6】:

          使用:Glog 时,您只需在diff --git 开头的行上按<cr>。它将打开差异。您可能还想查看:Gdiff。你可能想看看 Drew Neil 的 vimcastsThe Fugitive Series

          有关更多帮助,请参阅

          :h fugitive
          :h :Glog
          :h :Gdiff
          

          【讨论】:

          • 你描述的行为(只需按<cr>)正是我想要的,但我没有得到差异,我只是得到了那个特定版本的整个文件。
          • 确保您在线上diff --get a/somefile b/somefile
          • 所以我在 vim 中打开一个文件,然后执行:Glog。这会在 quickfix 列表中填充文件的版本列表。我在任何地方都没有看到diff --get 行……我一定是误解了你的指示。
          • 仍然无法正常工作...找到了一个具有我想要的行为的插件:github.com/kablamo/vim-git-log
          • 我相信@PeterRincker 的答案取决于首先运行:Glog -- %。这将(来自:h :Glog):为当前缓冲区加载所有“......以前的提交而不是以前的文件修订......”。这与:Glog 非常不同,后者将:“将当前文件的所有先前版本加载到快速修复列表中。”当缓冲区包含提交而不是文件修订时,您将看到 diff --get a/somefile b/somefile 行并且能够按照他的回答。
          【解决方案7】:

          您可以通过以下步骤实现此目的:

          1. 将焦点更改为 quickfix 窗口并导航到与您感兴趣的提交对应的行。
          2. 在该行中找到提交哈希并将其拉出(哈希现在位于0 寄存器中。
          3. 关闭快速修复缓冲区,然后执行:Gdiff <C-r>0

          这应该会引发适当的差异。

          您可以通过将此映射添加到您的 .vimrc 文件来自动执行第 2 步和第 3 步

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

          请注意,映射假定您的光标位于行首(.git// 部分之前)。

          【讨论】:

            【解决方案8】:

            试试:vert Gdiff。这将以左右模式显示当前文件的差异。

            【讨论】:

              【解决方案9】:

              查看提交差异的一种方法是:

              :Gedit [revision]
              

              【讨论】:

                【解决方案10】:

                我编写了一个函数,可以让您对比当前文件的先前版本。我用它来查看工作副本和修订“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
                

                您可以像这样调用该函数(下面的示例与第 3 版不同):

                :call Diffrev(2)

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2012-05-24
                  • 2012-04-11
                  • 1970-01-01
                  • 2013-08-30
                  • 1970-01-01
                  • 2021-07-07
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多