2013-03-07 23 views
7

假設我正在編輯一個文件。如果我保存文件,git-diff會給我它相對於索引的變化。我想先獲取相對於索引的更改,而不先保存文件 - 對於「實時」差異。是否有可能針對標準輸入對文件進行git-diff?

一種解決方案是將未保存的更改寫入臨時文件(即將文件保存到別處),將暫存文件寫入另一個臨時文件(git show :file > tempfile2),然後寫入git-diff tempfile tempfile2。然而,這似乎不雅。

有沒有更好的方法?

+1

爲什麼不直接保存文件?什麼說話反對它? – 2013-03-07 12:15:25

+2

如果我只能使用管道,避免保存文件會很好。 – 2013-03-07 15:02:05

+0

@AndyStewart:爲什麼它很好?只需在tmp中拋出一個文件。這並不難,也不是很多工作......當然比嘗試解決git的需求要少得多(但請參閱Ash Berlin的答案)。 – siride 2013-08-11 16:57:55

回答

2

改善Ash Ash的回答。

這可以讓你使用git-diff的漂亮功能。

​​

注意,這仍然可能不是你想要的方便,因爲你還必須寫一個臨時文件。在保存文件之前,這些更改要麼不在磁盤上(僅在內存中),要麼在某種類型的臨時文件中,這些文件是依賴於編輯器的。 Vim可能可以一步完成這一步,但我還不夠熟悉。

+0

Vim允許你將內容傳遞給被調用的外部命令的stdin。因此,我現在將文件的索引版本寫入臨時文件,並將內存文件傳遞給標準輸入:'git show:file> tmpfile && git diff - tmpfile -'。 – 2014-11-11 10:34:57

+0

另外,如果一個或兩個文件路徑超出了git repo,那麼'--no-index'會被自動推斷出來。 – 2014-11-11 10:37:04

8

由於git 1.5.1有一直到diff的對標準輸入一個選項 - 它只是沒有被記錄在案

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

在玩這個多一點,我意識到這可能不是什麼OP(或我)希望 - 它將文件的當前狀態區分爲stdin,而不是文件的最後一個已提交狀態到stdin。像這樣的東西會做

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

注意這是否意味着援引差異直接這可能不是拿起你的混帳配置一些設置。基本上,正如阿姆斯在他的回答中所說。

相關問題