2012-11-29 15 views
68

Come creare una patch adatta per la revisione nel crogiolo?Come ottenere git diff con il contesto completo?

git diff branch master --no-prefix > patch 

Questo genera solo 3 righe di contesto. Così faccio il seguente

git diff --unified=2000 branch master --no-prefix > patch 

Speriamo che tutti i file abbiano meno di 2000 righe. C'è un modo per dire a git di includere tutte le linee nel file per la patch senza dover specificare le linee massime?

+1

ho postato l'opzione -U per mostrare l'intero file, come una questione separata http://stackoverflow.com/questions/28727424/for-git-diff-is-there-a-uinfinity-option-to-show-the-whole-file –

risposta

15

So che questo è vecchio, ma ho anche non amano soluzioni hard-coded, così ho provato questo:

git diff -U$(wc -l MYFILE) 

Utilizzando -U sembra essere l'unico modo per affrontare la questione, ma utilizzando un il conteggio delle righe promette che funzionerà anche per un piccolo cambiamento in un file molto grande.

+1

'<' non è necessario. 'git diff -U $ (wc -l MYFILE) MYFILE' – balki

+2

Grazie a @balki, ho provato il tuo suggerimento e ho notato che

$(wc -l MYFILE)
si espande al conteggio delle righe seguito dal nome del file, quindi anche il secondo uso del nome file può essere omesso. Sto aggiornando la mia risposta per riflettere questo. – Ezra

7

Nota: git1.8.1rc1 announce (December 8th, 2012) comprende:

Una nuova variabile di configurazione "diff.context" può essere utilizzato per ottenere il numero predefinito di righe di contesto nell'output patch, per sovrascrivere il valore predefinito hardcoded di 3 linee.

in modo da poter aiutare, qui, a creare un contesto più completo.

+5

Tuttavia, questo non ha un'opzione per dire "Tutte le righe nel file" – balki

+2

sospetto che mettendo un numero elevato, ciò simulerebbe "tutte le linee" – VonC

+3

"Sospetto che mettendo un numero grande, ciò simulerebbe" tutte le linee "" ... eccetto it non lo fa e poi le cose si rompono. Tutto è sinonimo di infinito, e un numero molto grande è proprio questo: un numero, non un infinito. – Trenton

60

This sembra funzionare abbastanza bene:

git diff --no-prefix -U1000 

Con l'avvertenza:

La bandiera -U specifica righe di contesto. Potrebbe essere necessario aumentarlo se ci sono più di 1000 linee tra le tue modifiche.

+9

L'opzione '-U' che suggerisci è uguale all'opzione' --unified = 'usata dal richiedente. L'unica differenza è che specifichi meno righe di contesto, 1000, rispetto al richiedente utilizzato, 2000. @balki voleva sapere come aumentare il numero all'infinito, tuttavia suggerisci di tagliare il numero a metà. Perché? –

+3

@LS: sì, mi rendo conto ora, ma trascurato che un paio di anni fa. Eppure, è un po 'più evidente di quello che sta succedendo che nella domanda e sembra aiutare la strana persona che atterra qui. – c24w

+0

Grazie per questo, funziona anche alla grande con 'git show'! – Shakeel