如何使用fugitive比较两个分支?

11

通过:Gstatus,我可以在新的窗口中获取Git状态,在该窗口中按下D键即可在新的分屏中查看文件差异。

还可以使用:Glog来获取文件的所有版本,并使用:Glog --加载所有以前的提交。

我想做的是为两个分支之间的差异获取一个Gstatus窗口。例如,我的topicdevelopment分支,这样我就可以比较所有已更改的文件。

是否可能获得一个交互式窗口,其中包含在两个提交之间更改的所有文件?


正如 ZyX 所提到的,将一个命令添加到 Fugitive 中以将 git diff --name-status {REV1}..{REV2} 拉入窗口可能会很方便。或者也许有更好的工作流程……我会收藏并关注任何神奇的想法。 - Dan Fitch
注意:这也作为fugitive GitHub问题#270打开 - Tim Pope回复了一个解决方法:Git diff branch1 branch2 --。然而,这并不理想,因为它只显示标准的diff输出。 - icc97
2个回答

4
由于Git不支持Mercurial/Bazaar状态之间的差异,因此fugitive也无法支持。相反,Git使用“git diff --name-status”来替代,但简单的grep命令可以发现,在fugitive中这个特性从未被使用,除了在执行“:Gw”和相关命令时检查某些文件是否干净(即未修改)。
如果你不怕尝试一些实验性的代码,那么你可以尝试使用我写的aurum,它可以为你带来一个状态窗口。
AuStatus rev topic wdrev development

使用 C 命令查看特定文件的 vimdiff(默认情况下会关闭状态窗口,使用 let g:aurum_statwincmd='k' 可以避免)。请注意:如果使用 hg-git 并且编译时启用了 +python 选项,则 aurum 将使用更稳定的代码,因为我使用 mercurial 作为主要版本控制系统。


另一个想法是使用 vcscommand,mercurial/bazaar 和 hg-git/bzr-git。然后可以通过以下方式查看状态:

VCSStatus -r topic -r development
< p >(水星,不记得如何在bazaar中操作)。我对vcscommand不熟悉,所以无法确定它是否像fugitive或aurum一样在状态缓冲区中提供许多交互功能(似乎没有:nmap <buffer>在git状态缓冲区中没有显示任何内容)。根据文档,上述代码应该可以工作,但我尚未测试。


你把 aurum 移到别的地方了吗?它现在已经被删除了。 - icc97
1
@icc97 我已经在答案中更新了链接:由于我没有找到一个好的免费mercurial托管,它已经被移动到gitlab上。请注意,aurum已经很多年没有得到维护了。 - ZyX
1
@icc97 我已经在回答中更新了链接:由于我没有找到一个好的免费mercurial托管服务,所以它已经迁移到了gitlab上。不过需要注意的是,aurum已经有好几年没有维护了。 - ZyX
我维护着一个GitHub替代品列表,其中列出了一些Mercurial的替代品 - 我听说https://sourcehut.org/不错。 - icc97

1
根据Tim Pope在相关的Fugitive GitHub问题#270上的评论,Fugitive无法处理此问题并且没有计划解决。
然而,在搜索时,我发现了基于Fugitive的Merginal
引用: Merginal旨在提供一个良好的界面来处理Git分支。它提供交互式TUI以进行以下操作: - 查看分支列表 - 从该列表中检出分支 - 创建新分支 - 删除分支 - 合并分支 - 变基分支 - 解决合并冲突 - 重命名分支 - 查看分支的git历史记录
Merginal基于Fugitive,因此需要Fugitive。
它没有明确说明您可以在两个分支之间执行git diff
安装Merginal后,假设你有一个mainmaster)分支,并且你想在Vim中将develop分支与其进行比较,以查看即将合并的更改。
  1. :Git checkout main
  2. :Merginal
  3. You should see something like this in the left panel:
    Press ? for help
    
      develop
    * master
    
  4. Move your cursor over the develop branch
    1. If you look in the help ?
      gd   Open diff files buffer to diff
           against the branch under the
           cursor.
      
  5. Type gd (similar to any Fugitive command)
  6. This should should produce something like this in the left panel:
    Press ? for help
    
    === Diffing With: ===
    develop
    =====================
    
    M   README.md
    
  7. Then as with Fugitive you can press dv with the cursor over the file and it will open a vertical diffsplit:

Vim vertical diffsplit of README.md


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接