是否可以针对标准输入git-diff文件?

时间:2013-03-07 12:13:42

标签: git

假设我正在编辑文件。如果我保存文件,git-diff将给我相对于索引的更改。我想在不保存文件的情况下获取相对于索引的更改 - 对于“实时”差异。

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:8)

由于git 1.5.1有一个与stdin相区别的选项 - 它只是没有被记录

$ echo foo | git diff --no-index -- my_file -

在玩这个时,我意识到这可能不是OP(或我)想要的 - 它将文件的当前状态区分为stdin,而不是文件的最后一个提交状态到stdin。像这样的东西会做到这一点

$ echo foo | diff -u <(git show :my_file) -

注意这确实意味着直接调用diff,这可能不会在你的git配置中获取某些设置。基本上,正如艾姆斯在答案中所说的那样。

答案 1 :(得分:2)

改善Ash Berlin的答案。

这允许你使用git-diff的漂亮功能。

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

请注意,这仍然可能不如您所希望的那样方便,因为您仍然必须写入临时文件。在保存文件之前,更改要么根本不在磁盘上(仅在内存中),要么在某种与编辑器相关的临时文件中。 Vim可以一步完成无缝操作,但我不够熟悉。