Qual è la differenza tra git am e git apply?


134

Entrambi git ame git applypossono essere utilizzati per applicare patch. Non riesco a vedere la differenza. Ora vedo una differenza: git amsi impegna automaticamente mentre git applytocca solo i file ma non crea un commit. Questa è l'unica differenza?


11
ampotrebbe essere pensato come un'abbreviazione di Apply Mail...
Philip Oakley,

Risposte:


144

Sia l'input che l'output sono diversi:

  • git applyprende una patch (es. l'output di git diff) e la applica alla directory di lavoro (o all'indice, se --indexo --cachedè usato).
  • git amaccetta una cassetta postale di commit formattata come un messaggio di posta elettronica (ad esempio l'output di git format-patch) e li applica al ramo corrente.

git amutilizza git applydietro le quinte , ma fa più lavoro prima (leggendo un Maildiro mboxe analizzando i messaggi e-mail) e dopo (creando commit).


6
Nota: git applysembra accettare anche l' git format-patchoutput.
Ciro Santilli 24 冠状 病 六四 事件 法轮功

7
git applyfunzionerebbe anche per l'output git format-patch, ma le modifiche non sarebbero state messe in scena e avrebbero dovuto essere impegnate (creando così un diverso punto di commit nell'indice a cui sono applicati). Con git amte porteresti le informazioni di commit (insieme all'autore, ecc.) Nell'indice a cui sono applicate. git applyquindi è per patchare il tuo repository (non valido), git ampuò apportare modifiche alle funzionalità legittime e includerlo nel repository (approccio preferito).
Prasoon Joshi,

18

git applyserve per applicare differenze dirette (ad es. da git diff) mentre git amper applicare patch e sequenze di patch da e-mail, in formato mbox o Maildir ed è "l'opposto" di git format-patch. git amtenta di estrarre i messaggi di commit e i dettagli dell'autore dai messaggi di posta elettronica, motivo per cui può effettuare commit.


9

Con git aml'applicazione si applica la patch, quindi se si utilizza git statusnon si vedrà alcuna modifica locale.

git applyti consente di apportare le modifiche ai file sorgente come se stessi scrivendo il codice da solo, di conseguenza git statuse git diffprodurrà le modifiche apportate nella patch che hai applicato, quindi puoi correggere / aggiungere più modifiche e inviarle insieme come una nuova patch .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.