2009-10-20 13 views

risposta

17

Le patch, che restituiscono git diff, vengono elaborate correttamente dallo strumento patch.

patch ignora tutte le informazioni aggiuntive che git aggiunge al file di correzione. Per applicare la patch è molto probabile che sia necessario l'opzione -p1.

+0

Grazie. Cercherò di provarlo, suppongo di aver bisogno di più caffè ... –

+2

Le patch generate da 'git format-patch' sono anche correttamente processate dalla patch GNU ... a meno che non siano generate con l'opzione -M/-C e contengano informazioni su rinomina , ecc. –

+2

Dalla pagina man di 'patch':" patch tenta di saltare qualsiasi garbage principale, applicare il diff e quindi saltare qualsiasi spazzatura finale. " La grande cosa unica in git diffs è l'aggiunta di modeline (ad esempio "indice ...", "rinomina ...", "nuovo file ...") e la patch è in grado di saltarle semplicemente. Git inoltre prefisso i nomi dei file, ad es. "a/percorso/su/file", ma questo può essere saltato dalla patch -p1. – Cascabel

1

Gli stati risposta accettata la seguente:

patch, che produce git diff, siano correttamente trattati da strumento di patch.

Sono quasi sicuro di aver trovato un caso in cui non è corretto. /usr/bin/patch solo silenziosamente (senza riportare un errore) ha ignorato la mia patch comprese le informazioni di rinomina file, interrompendo in tal modo un'implementazione (fortunatamente sto solo testando l'implementazione al momento :-) ...

Sto postando questa risposta alternativa come teste di altre persone che si imbattono nello stesso problema perché mi stavo grattando la testa per un po '... Anche i commenti alle risposte su StackOverflow a quanto pare non possono contenere virgolette.

Ironicamente ho appena acceso al formato diff unificato per superare questo problema e ora mi si spezza il deployment in un modo diverso perché diff unificate non possono rappresentare la creazione di file vuoti (ad esempio __init__.py). Parla di essere tra una roccia e un luogo difficile!

Problemi correlati