2013-01-24 11 views
20

Ho provato a modificare un file php in TextWrangler con terminazioni di riga impostate su Unix, in NetBeans e in vim. Quando salgo il diff in una patch e poi provo ad applicarlo, danno degli errori di spazio bianco. Quando digito git diff posso vedere ^M all'estremità delle mie linee, ma se li rimuovo manualmente in vim, si dice che il mio file di correzione è corrotto, e quindi la patch non si applica affatto.Il mio diff contiene spazi bianchi finali - come sbarazzarsi di esso?

posso creare una patch con il seguente comando:

git diff > patchname.patch

e applico lo verificando una versione pulita del file di una patch e digitando

git apply patchname.patch

Come posso creare questa patch senza errori di spazi bianchi? Ho creato patch prima e non ho mai incontrato questo problema.

+0

Si potrebbe voler dare maggiori dettagli sul processo di creazione di una patch. – Chronial

+0

Ho aggiunto i dettagli. Non sei sicuro di quanto sarà utile, ma non può ferire. – beth

+0

Sto affrontando lo stesso problema e ho fatto qualche ricerca. Sembra che git aggiunga automaticamente questi spazi bianchi a 'git diff' e' fit show', quindi ogni patch creata con tale codice avrà degli spazi bianchi finali. Se si dispone del repository git del kernel Linux localmente (linus kernel tree), è possibile eseguire 'git show 402bae597e'. Ti mostrerà uno spazio bianco finale prima di DEVICE_ATTR_RO statico (flag); e le parentesi graffe di chiusura nella riga precedente, anche se non sono presenti nel codice. – Hamzahfrq

risposta

13

Sei sicuro che si tratta di errori gravi? Di default, git avvertirà degli errori di spazio, ma li accetterà comunque. Se si tratta di errori gravi, è necessario aver modificato alcune impostazioni. È possibile utilizzare il flag --whitespace= su git apply per controllarlo su base per-invocazione. Prova

git apply --whitespace=warn patchname.patch 

Questo forzerà il comportamento predefinito, che è quello di avvisare ma accettare. È inoltre possibile utilizzare --whitespace=nowarn per rimuovere completamente gli avvisi.

La variabile di configurazione che controlla questo è apply.whitespace.


Per riferimento, gli errori di spazio qui non sono errori con la patch. È una cosa in stile codice che git, per impostazione predefinita, si lamenta quando applica le patch. In particolare, non ama gli spazi bianchi finali. Allo stesso modo git diff evidenzierà gli errori di spazi bianchi (se si sta eseguendo l'output su un terminale e il colore è attivo). Il comportamento predefinito è di avvisare, ma accettare comunque la patch, perché non tutti i progetti sono fanatici di spazi bianchi.

+1

. Lo capisco. Tuttavia, sono confuso da dove viene questo spazio bianco. Non ho chiesto se dovevo preoccuparmene, ho chiesto come aggiustarlo. – beth

+0

@beth: Perché è necessario risolverlo? –

+1

Lo spazio bianco proviene dalla patch che stai tentando di applicare. Il che significa che proviene dal diff che inizialmente hai preso. –

7
cerotto

Prova -p1 < filename.patch

+0

Cosa fa questo? Da dove viene il file .diff? – beth

+0

è solo un file patch – flash

+0

Penso che il tuo carato sia al contrario o che manchi qualcosa. – beth

20

git applicare --reject --whitespace = fissare mychanges.path

+2

Utile per correggere automaticamente gli errori di spazi bianchi. --whitespace = fix assicura che gli errori degli spazi bianchi siano corretti prima che il percorso venga applicato, e --reject assicura l'atomicità quindi nessun file di directory di lavoro viene modificato se la patch non viene applicata. Fonte: https://git-scm.com/docs/git-apply –