2013-04-13 26 views
34

Ho provato a faregit creare patch con diff

git diff 13.1_dev sale_edit > patch.diff 

Poi ho provato a fare git apply patch.diff in un altro ramo, ma ho ottenuto cerotto non si applica. Come posso creare file patch da diffs che posso usare con git apply?

errori ricevuti:

$ git apply --ignore-space-change --ignore-whitespace diff.diff 
diff.diff:9: trailing whitespace. 

diff.diff:10: trailing whitespace. 
    function set_change_sale_date() 
diff.diff:12: space before tab in indent. 
     $this->sale_lib->set_change_sale_date($this->input->post('change_sale_date')); 
diff.diff:14: trailing whitespace. 

diff.diff:15: trailing whitespace. 
    function set_change_sale_date_enable() 
warning: application/controllers/sales.php has type 100755, expected 100644 
error: patch failed: application/controllers/sales.php:520 
error: application/controllers/sales.php: patch does not apply 
warning: application/language/english/sales_lang.php has type 100755, expected 100644 
error: patch failed: application/language/english/sales_lang.php:134 
error: application/language/english/sales_lang.php: patch does not apply 
warning: application/libraries/Sale_lib.php has type 100755, expected 100644 
error: patch failed: application/models/sale.php:170 
error: application/models/sale.php: patch does not apply 
warning: application/views/sales/register.php has type 100755, expected 100644 
error: patch failed: application/views/sales/register.php:361 
error: application/views/sales/register.php: patch does not apply 

sto cercando questo su Mac

+1

Git è lo strumento sbagliato per il lavoro. Puoi passare ore a provare ad applicare una patch perché Git non gestisce correttamente spazi bianchi e terminazioni di linea. Una volta ho passato più di un'ora a provare ad applicare una patch a tre righe che mi sono state inviate via e-mail (vedi anche [Applica patch al file sotto Git senza usare Git?] (Http://stackoverflow.com/q/35353267)) . Usa il programma 'patch'. Gestisce spazi bianchi e finali di linee senza cagare su se stesso. – jww

risposta

21

Prova una:

git apply --ignore-space-change --ignore-whitespace patch.diff 

Come accennato in "git: patch does not apply", questo può essere causato da:

  • le terminazioni di linea diff tra il file system locale e il repository remoto.
    utente core.eol in .gitattributes file è un buon approccio (vedi "git force file encoding on commit")
  • il bit di esecuzione ('x').
    Ciò può portare a impostare git config core.filemode false, seguito da un git reset --hard HEAD (assicurarsi di non avere modifiche senza commit, o sarebbero persi).
+0

Puoi fornire maggiori informazioni sul bit di esecuzione? – stdcall

+0

@Mellowcandle i dettagli sono disponibili all'indirizzo http://stackoverflow.com/a/4770223/6309 – VonC

+0

Non si applica ancora. Vedi domanda aggiornata –

1

Qui devi provarlo con il ramo con cui hai diff.

git diff 13.1_dev sale_edit > patch.diff yourBranch() 
10

È possibile applicare la patch come una fusione a 3 vie:

git diff 13.1_dev sale_edit > patch.diff 
git apply -3 patch.diff 

Si dovrebbe portare il conflitto in modo da poter risolvere manualmente. Oppure si potrebbe andare con una battuta, tubazioni la patch per git-applicare direttamente:

git diff 13.1_dev sale_edit | git apply -3 

Per invertire la patch:

git diff 13.1_dev sale_edit | git apply -3 -R 

(nota: questo è simile ai comandi di cui sopra, senza il processo in due fasi di creazione del file di patch)

git help apply 

-3, --3way   
When the patch does not apply cleanly, fall back on 3-way merge if 
the patch records the identity of blobs it is supposed to apply to, 
and we have those blobs available locally, possibly leaving 
the conflict markers in the files in the working tree for the user 
to resolve... 
1

con git versione 1.9.1, sto vedendo lamentele simili quando uso 'git applicare' per applicare la patch creata usando 'git diff'.

Sembra 1.9.1 git sta avendo problemi di trattare con la miscela di spazi & schede nel file di patch.

warning: squelched 1 whitespace error warning: 6 lines add whitespace errors.

@ risposta di VonC non aiuta e sto ancora ricevendo gli stessi avvisi.

La soluzione più semplice è di utilizzare semplicemente il comando 'di patch' che si applica con successo tutti i cambiamenti catturati in uscita 'git diff' nella directory di destinazione git.

$ patch --version GNU patch 2.7.1

+0

Interessante uso della patch di comando. +1 – VonC