是否可以根据标准输入对文件进行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之外,则不会自动推断出任何索引。