实时git差异比较

5
我通常在查看git差异时输入我的git提交消息。
我非常喜欢由git的这个小perl插件产生的输出,它会突出显示已更改行的相应部分,并从git diff 中提取以下内容(这是git log -p的屏幕截图,但您可以理解这个想法):
因为它可以突出显示已更改行的相应部分,所以很容易看出发生了什么变化。只是想分享一下,因为似乎没有多少人使用它,对我来说,它比使用外部独立的diff工具等要好得多,因为这个插件可以在终端上运行!它也比像vimdiff这样的工具更加友好。虽然vimdiff也很方便,但在紧急情况下也很有用。
总之,show-and-tell与这里的真正问题只有间接关系,即:我能否设置一个终端窗口,在其中显示git差异,但使其动态化,以便在保存文件时刷新git diff?基本的想法是将终端窗口作为实时显示我即将提交的确切更改的方式,这样我就可以在阅读整个变化集的同时直接从文本编辑器切换到输入git提交命令,并且这种工作流程也可以在Linux机器上通过SSH实现。
那将是一个非常棒的工作流程,我认为一些cmdline fu可以让我达到目标,但我不知道从哪里开始。似乎OS X和Linux需要分别实现。我发现fswatch可能适合我,而且显然与Linux上的inotify-watch类似。我不需要将其设置在除我的OS X开发机器之外的更多机器上,但是像我之前提到的那样,在SSH上具有此功能将是史诗级的。
还有其他快速简便的UNIX方法解决这个问题吗?

在 Emacs 中使用 vc-dir,您可以在差异窗口中按下 g 来更新其内容。 - choroba
这很好,但我更喜欢使用vim;另外,需要输入才能更新是不令人满意的。我想要的是可以轮询(不好!但直接)或被通知文件系统更新的东西。 - Steven Lu
2个回答

4
你需要类似于“watch git diff”的功能。 “watch”命令会重复运行一个命令并显示输出的第一页。
你需要更多的输出页面,而且你不想在更新时被移动到输出的顶部 - 你希望在滚动之前一直查看diff中的相同偏移量。
我没有尝试过,但是你可能可以使用“screen”或“tmux”提供一个大的虚拟屏幕。(参见https://serverfault.com/questions/50772/is-there-a-paging-version-of-watch。)

1
有什么问题使用普通的内置git commit -v吗?它会在提交信息下方显示要提交的全部更改差异。 (Vim可以很好地突出显示这个差异,使用默认设置即可)

啊,好建议。我仍然不后悔构建这个实时系统,因为我在提交之前就能得到它,甚至还没想到。确实,Vim非常充分地突出显示这些内容。 - Steven Lu

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