2011-01-07 15 views
72

Non vedo alcuna differenza tra l'output di 'git format-patch' e 'git diff', c'è qualche? E non sarò in grado di usare 'git diff' per produrre una patch e quindi applicarla usando git apply?Qual è la differenza tra 'git format-patch e' git diff '?

Il mio problema è che ho aggiunto delle modifiche all'indice, ma apparentemente git format-patch accetta solo commit, quindi se posso usare l'output di diff, allora posso usare questo comando per produrre una patch per le modifiche in l'indice:

git diff --cached > index.patch 

risposta

108

Una patch creata con git format-patch comprenderà anche alcune meta-informazioni relative al commit (committer, data, messaggio di commit, ...) e la volontà contiene diff dei dati binari. Tutto sarà formattato come una posta, in modo che possa essere facilmente inviato. La persona che lo riceve può quindi ricreare il commit corrispondente con git am e tutti i metadati saranno intatti. Può anche essere applicato con git apply in quanto è un super-set di una semplice diff.

Una patch con git diff sarà un semplice diff con contesto (si consideri diff -u). Può anche essere applicato con git apply ma i metadati non verranno ricreati (poiché non sono presenti).

In sintesi, git format-patch è utile per trasmettere un commit, mentre git diff è utile per ottenere un diff tra due alberi.

8

Dai manuali git-format-patch prepara le patch adatte per l'invio di e-mail, mentre git-diff mostra le modifiche.

Sono due cose diverse e hanno scopi diversi, hanno appena prodotto un formato patch. Ma git-format-patch aggiunge dati su un commit (data, autore, messaggio di commit) e lo raggruppa in un formato adatto per l'invio come messaggio di posta Unix (sebbene questi siano solo file, quindi possono essere inviati ad altri metodi e ancora applicati di git-am).

Anche git-format-patch genera un file di correzione per ogni commit nell'intervallo specificato. Queste modifiche verranno aggiunte come commit al repository con git-am.

git-diff mostra solo il diff tra i due stati richiesti e può essere utilizzato per creare un file di patch. Ma questo è solo un normale file di patch e l'applicazione della patch cambierà semplicemente lo stato della directory di lavoro.

E sì, è possibile creare una patch per l'indice in questo modo.

+0

Grazie. Cosa c'è di speciale nella posta UNIX in modo che abbiano progettato la patch basata su di essa? – Rafid

+7

Non c'è niente di veramente speciale. Questo è solo che Git è stato progettato da Linus Torvalds il cui flusso di lavoro ha coinvolto l'invio e la ricezione di patch via e-mail per la convalida prima dell'integrazione nel kernel di Linux. –

+0

Git era [progettato da Linus Torvalds] (http://youtu.be/4XpnKHJAok8) per mantenere il kernel di Linux in. La posta Unix era un formato comune. – Abizern

Problemi correlati