如何使用 git diff 比较不在存储库中的两个远程文件?

Posted

技术标签:

【中文标题】如何使用 git diff 比较不在存储库中的两个远程文件?【英文标题】:How to compare, with git diff, two remote files which are not in a repository? 【发布时间】:2020-08-02 22:42:03 【问题描述】:

我可以用diffssh比较两个远程文件:

diff <(ssh machine1 "sudo cat $FILE") <(ssh machine2 "sudo cat $FILE")

但如果我尝试使用git diff

git diff --no-index --color-words <(ssh machine1 "sudo cat $FILE") <(ssh machine2 "sudo cat $FILE")

我得到:

error: /dev/fd/14: unsupported file type
fatal: cannot hash /dev/fd/14

我如何使用git diff 比较不在存储库中的两个远程文件?

== 更新 ==

这个问题不是关于用diffcolordiff 代替git diff,而是关于使用git diff --no-indexssh

【问题讨论】:

git diff 似乎不适用于进程替换,请参阅this,为什么不直接使用 diff ? 我更喜欢使用git diff,它有更好的输出格式。 你可以让diff输出像git diff,见this 【参考方案1】:

由于forgotten patch 无法使用进程替换,唯一的选择(因为您想使用git diff)是:

ssh machine1 "sudo cat $FILE" > temp1 
ssh machine2 "sudo cat $FILE" > temp2
git diff --no-index temp1 temp2

您可以使用diff(它保持与git diff 类似的格式和颜色)来实现相同的效果,它也适用于进程替换

diff -u --color <(ssh machine1 "sudo cat $FILE") <(ssh machine2 "sudo cat $FILE")

【讨论】:

@OrtomalaLokni &amp;&amp; 表示第二个 ssh 命令只有在第一个成功完成后才会运行。但是,在这种情况下不需要它,我已经对其进行了编辑。关于进程替换,this解释清楚【参考方案2】:

尝试使用

git diff --no-index

如发现here。

【讨论】:

同样的问题,同样的错误信息。我已经更新了我的问题。 我正在寻找如何显示彩色字符差异。 @OrtomalaLokni 你可能正在寻找diff -u --color &lt;(ssh machine1 "sudo cat $FILE") &lt;(ssh machine2 "sudo cat $FILE") 我在 macOS 上有diff: unrecognized option --color @OrtomalaLokni 还有其他选择,请参阅this

以上是关于如何使用 git diff 比较不在存储库中的两个远程文件?的主要内容,如果未能解决你的问题,请参考以下文章

gitlog和diff区别

如何使用 git diff 创建两个电子表格的可读差异?

不在存储库中时如何在终端中获取“git log”或使用 shell 脚本

GIt:使用BFG从存储库中删除了几个文件,并且存在巨大的提交差异

Git diff 比较两个版本文件之间的差异

仅将两个文本大文件与 Java 中的 URL 与外部存储器进行比较?