如何使用 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 【问题描述】:我可以用diff
和ssh
比较两个远程文件:
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
比较不在存储库中的两个远程文件?
== 更新 ==
这个问题不是关于用diff
和colordiff
代替git diff
,而是关于使用git diff --no-index
到ssh
。
【问题讨论】:
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&&
表示第二个 ssh 命令只有在第一个成功完成后才会运行。但是,在这种情况下不需要它,我已经对其进行了编辑。关于进程替换,this解释清楚【参考方案2】:
尝试使用
git diff --no-index
如发现here。
【讨论】:
同样的问题,同样的错误信息。我已经更新了我的问题。 我正在寻找如何显示彩色字符差异。 @OrtomalaLokni 你可能正在寻找diff -u --color <(ssh machine1 "sudo cat $FILE") <(ssh machine2 "sudo cat $FILE")
我在 macOS 上有diff: unrecognized option --color
。
@OrtomalaLokni 还有其他选择,请参阅this以上是关于如何使用 git diff 比较不在存储库中的两个远程文件?的主要内容,如果未能解决你的问题,请参考以下文章
不在存储库中时如何在终端中获取“git log”或使用 shell 脚本