git 可以在回购文件和外部(非回购)文件之间进行区分吗?

Can git do a diff between a repo file and an external (non-repo) file?

我需要在 master~2 中的 myfile 版本与存储库本身外部存在的 myfile 副本之间进行区分(比如 D:\folder\myfile).

git-diff under --no-index 中的措辞是:

git diff --no-index [--options] [--] […]

This form is to compare the given two paths on the filesystem. You can omit the --no-index option when running the command in a working tree controlled by Git and at least one of the paths points outside the working tree

措辞"at least one"似乎暗示可以在一个repo文件和一个非repo文件之间进行比较,但实际上:

$ git diff master~2:myfile D:/folder/myfile  
error: Could not access: 'master~2:myfile'

$ git diff master~2:myfile -- D:/folder/myfile  
fatal: D:/folder/myfile: 'D:/folder/myfile' is outside repository  

$ git diff --no-index master~2:myfile -- D:/folder/myfile  
usage: git diff --no-index <path> <path>

实现这种比较的最简单方法是什么?

在不使用 git-diff 的情况下,我找到了一种间接的方法来实现这一点 - this blog post 中给出的方法,只需使用外部文件作为原始文件 "current file",并确保在执行 git show 之前将 repo 目录作为当前目录。

涉及的步骤是:

  1. 以通常的方式vim打开外部非回购文件
  2. 做一个:vsp new垂直分割一个新的(空白)window
  3. :cd 到 git 存储库的工作目录
  4. :read !git show master~2:myfile 读取 myfile 的内容,因为它是 2 次提交前的内容
  5. setf yourfiletypehere 语法高亮(可选)
  6. :diffthis 在一个 window 中,然后切换到另一个 window 和 运行 :diffthis 再次,你有你的 diff