2013-03-07 10 views
7

Diciamo che sto modificando un file. Se salvi il file, git-diff mi darà le sue modifiche relative all'indice. Mi piacerebbe ottenere le modifiche relative all'indice senza salvare il file prima - per un differenziale "in tempo reale".E 'possibile git-diff un file contro l'input standard?

Una soluzione è quella di scrivere le modifiche non salvate in un file temporaneo (cioè salvare il file altrove), scrivere il file messo in scena in un altro file temporanei (git show :file > tempfile2) poi git-diff tempfile tempfile2. Comunque sembra inelegante.

C'è un modo migliore?

+1

Perché non salvare semplicemente il file? Cosa parla contro di esso? –

+2

Sarebbe bello evitare di salvare il file se posso usare solo una pipe. –

+0

@AndyStewart: perché è bello? Basta lanciare un file in tmp. Non è difficile, non è molto lavoro ... certamente molto meno che cercare di aggirare i requisiti di Git (ma vedere la risposta di Ash Berlin). – siride

risposta

2

Migliorare la risposta di Ash Berlin.

Ciò consente di utilizzare le funzionalità di git-diff.

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

Si noti che questo ancora potrebbe non essere così conveniente come vuoi, perché avete ancora di scrivere in un file temporaneo. Fino a quando non si salva il file, le modifiche non sono affatto su disco (solo in memoria) o in qualche tipo di file temporaneo dipendente dall'editor. È possibile che Vim possa farlo senza problemi in un solo passaggio, ma non ho abbastanza familiarità da dire.

+0

Vim consente di passare il contenuto allo stdin del comando esterno che viene chiamato. Così ora scrivo la versione index del file in un file temporaneo e passo il file in memoria a stdin: 'git show: file> tmpfile && git diff - tmpfile -'. –

+0

Inoltre, se uno o entrambi i percorsi dei file sono fuori dal repository git allora '--no-index' viene automaticamente dedotto. –

8

Dal git 1.5.1 c'è stato un'opzione per diff contro stdin - è solo non è stato documentato

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

a giocare con questo un po 'di più mi sono reso conto che questo potrebbe non essere quello che il PO (o I) voluto - differisce lo stato corrente del file in stdin, non l'ultimo stato impegnato del file in stdin. Qualcosa di simile lo farà

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

Nota questo significa invocando diff direttamente che potrebbe non raccogliere alcune impostazioni nella vostra configurazione git. Fondamentalmente come dice Ams nella sua risposta.

Problemi correlati