Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以根据标准输入对文件进行git区分?_Git - Fatal编程技术网

是否可以根据标准输入对文件进行git区分?

是否可以根据标准输入对文件进行git区分?,git,Git,假设我正在编辑一个文件。如果我保存文件,git diff将给出它相对于索引的更改。我希望在不保存文件的情况下获得与索引相关的更改,以实现“实时”差异 一种解决方案是将未保存的更改写入临时文件(即将文件保存到其他位置),将暂存文件写入另一个临时文件(git show:file>tempfile2),然后git diff tempfile tempfile2)。然而,这似乎不雅 有更好的方法吗?因为有一个选项可以与标准DIN进行区分-只是没有记录在案 $echo foo | git diff--无

假设我正在编辑一个文件。如果我保存文件,
git diff
将给出它相对于索引的更改。我希望在不保存文件的情况下获得与索引相关的更改,以实现“实时”差异

一种解决方案是将未保存的更改写入临时文件(即将文件保存到其他位置),将暂存文件写入另一个临时文件(
git show:file>tempfile2
),然后
git diff tempfile tempfile2
)。然而,这似乎不雅

有更好的方法吗?

因为有一个选项可以与标准DIN进行区分-只是没有记录在案


$echo foo | git diff--无索引--我的文件-

在进一步使用它时,我意识到这可能不是OP(或我)想要的——它将文件的当前状态区分为stdin,而不是将文件的最后提交状态区分为stdin。像这样的东西就可以了



$echo foo | diff-u改进了Ash Berlin的答案

这允许您使用git-diff的优秀特性

git show :file | git diff --no-index -- - temp_saved_path

请注意,这可能仍然不像您希望的那样方便,因为您仍然需要写入临时文件。在保存文件之前,更改要么根本不在磁盘上(仅在内存中),要么在某种依赖于编辑器的临时文件中。Vim可以在一个步骤中无缝地完成这项工作,但我还不太熟悉。为什么不保存文件呢?什么是反对的?如果我能用一根管子就可以避免保存文件,那就好了。@AndyStewart:为什么这么好?只需在tmp中抛出一个文件。这并不难,也不需要做很多工作……当然,这比试图解决git的需求要少得多(但请参见Ash Berlin的回答)。Vim允许您将内容传递到被调用的外部命令的stdin。因此,我现在将文件的索引版本写入一个临时文件,并将内存中的文件传递给stdin:
git show:file>tmpfile&&git diff--tmpfile-
。此外,如果一个或两个文件路径都在git repo之外,则不会自动推断出任何索引。