linux - git diff --numstat 按字符串而不是文件路径

标签 linux bash git diff git-diff

我正在尝试运行 git diff --no-index --numstat <string> <string>在 Linux(Debian Docker 容器)上,但我找不到实现此目的的方法。本质上,我想将文件的内容作为字符串而不是文件路径传递。目标是从 --numstat 检索统计信息旗帜。

这个命令应该可以在 git 之外执行存储库/目录和 Linux。到目前为止,我发现了两个缺少以前要求的解决方案:

  1. git diff --no-index --numstat /dev/fd/3 /dev/fd/4 3<<<$(echo "<string>") 4<<<$(echo "<string>") : 这适用于 MacOS,但不适用于 Linux。
  2. git diff --numstat $(echo <string> | git hash-object -w --stdin) $(echo <string> | git hash-object -w --stdin) : 仅在 git 内有效存储库(从 here 获得此部分解决方案)

当然必须有办法实现这一点,要么通过一些git命令或其他 bash我不知道的概念。任何帮助都会很棒。

谢谢!

最佳答案

解决方案 1 不起作用的原因是 /dev/fd/3/dev/fd/4 是符号链接(symbolic link)和 git diff 不遵循符号链接(symbolic link),而是使用它们的链接目标字符串作为它们的“内容”。

将字符串而不是文件直接传递给 git diff 的唯一方法是作为标准输入——这显然只适用于其中一个文件。所以我只看到两种可能的解决方案来解决您的问题:

  1. 首先将字符串写入(临时)文件,然后将它们传递给 git diff
  2. 按照 @B--rian 的建议使用另一个工具在评论中

1. 使用 process substitution 的另一个较短版本会是:

git diff --no-index --numstat <(echo "<string1>") <(echo "<string2>")

不幸的是,由于同样的原因/因为 git diff 不支持进程替换,这不起作用,请参阅 https://stackoverflow.com/a/49636553/11932806

关于linux - git diff --numstat 按字符串而不是文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57526196/

相关文章:

node.js - 如何为开发和部署组织单独的客户端和服务器存储库?

linux - 如何结合DRBD、OCFs2和LUKS?

linux - 如何使用udp对llinux机器的eth0和eth1进行环回测试

linux - 将十进制数与其他数字进行比较的脚本

linux - 如何使用正确的 SSH key 从 Windows 上的 Git Bash 连接到远程服务器?

java - 如何使用 gitExtension 将存储库从 Linux 克隆到我的 Windows 桌面

ruby - 在 Linux 上安装 newgem 时出错

c++ - 从 init.d 脚本启动时程序无法打开文件

bash - Shell 脚本和 CRON 问题

bash - 如何将带有管道符号的多个参数传递到 bash 脚本 case 语句中