我正在尝试运行 git diff --no-index --numstat <string> <string>
在 Linux(Debian Docker 容器)上,但我找不到实现此目的的方法。本质上,我想将文件的内容作为字符串而不是文件路径传递。目标是从 --numstat
检索统计信息旗帜。
这个命令应该可以在 git
之外执行存储库/目录和 Linux。到目前为止,我发现了两个缺少以前要求的解决方案:
-
git diff --no-index --numstat /dev/fd/3 /dev/fd/4 3<<<$(echo "<string>") 4<<<$(echo "<string>")
: 这适用于 MacOS,但不适用于 Linux。 -
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
的唯一方法是作为标准输入——这显然只适用于其中一个文件。所以我只看到两种可能的解决方案来解决您的问题:
- 首先将字符串写入(临时)文件,然后将它们传递给
git diff
- 按照 @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/