git能否区分回购文件和外部(非回购)文件?

git能否区分回购文件和外部(非回购)文件?,git,version-control,diff,git-diff,Git,Version Control,Diff,Git Diff,我需要在master~2中的myfile版本与存储库本身之外的myfile副本(例如D:\folder\myfile)之间进行区分 --no index下的git diff中的文字说明: git diff--无索引[--选项][--][…] 此表单用于比较文件系统上给定的两个路径。在工作环境中运行命令时,可以省略--no index选项 由Git控制的树,并且至少有一条路径指向外部 工作树 “至少一个”的措辞似乎意味着可以在一个回购文件和一个非回购文件之间进行比较,但在实践中: $git dif

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

--no index
下的
git diff
中的文字说明:

git diff--无索引[--选项][--][…]

此表单用于比较文件系统上给定的两个路径。在工作环境中运行命令时,可以省略--no index选项 由Git控制的树,并且至少有一条路径指向外部 工作树

“至少一个”的措辞似乎意味着可以在一个回购文件和一个非回购文件之间进行比较,但在实践中:

$git diff master~2:myfile D:/folder/myfile
错误:无法访问:“master~2:myfile”
$git diff master~2:myfile--D:/folder/myfile
致命:D:/folder/myfile:'D:/folder/myfile'在存储库之外
$git diff--no index master~2:myfile--D:/folder/myfile
用法:git diff--无索引

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

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

所涉及的步骤包括:

  • 以通常的方式在vim中打开外部非回购文件
  • 执行
    :vsp new
    垂直拆分新(空白)窗口
  • :cd
    到git存储库的工作目录
  • :读!git show master~2:myfile
    读取2次提交前的myfile内容
  • 在此处设置文件类型
    以突出显示语法(可选)
  • :diffthis
    在一个窗口中,然后切换到另一个窗口并再次运行
    :diffthis
    ,您就有了您的diff

  • 您的
    master~2:myfile
    不符合规定的“文件系统上给定两条路径”标准。我相信这是为了说明您可以执行
    git diff myfile/path/to/otherfile
    ,其中一个文件在您的工作目录中,另一个不在,而不是其中一个可以是需要从您的对象存储中提取的通用blob refspec…啊,这非常有意义,谢谢@twalberg。认真阅读的一课。
    $ 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>