Oba git am
i git apply
mogą być używane do nakładania łat. Nie widzę różnicy. Teraz widzę różnicę: git am
automatycznie zatwierdza, podczas gdy git apply
dotyka tylko plików, ale nie tworzy zatwierdzenia. Czy to jedyna różnica?
134
am
może być traktowane jako skrót odApply Mail
...Odpowiedzi:
Zarówno wejście, jak i wyjście są różne:
git apply
pobiera łatkę (np. wyjściegit diff
) i stosuje je do katalogu roboczego (lub indeksu, jeśli--index
albo--cached
jest używany).git am
pobiera skrzynkę zatwierdzeń sformatowanych jako wiadomości e-mail (np. dane wyjściowegit format-patch
) i stosuje je do bieżącej gałęzi.git am
używagit apply
za kulisami , ale wykonuje więcej pracy przed (odczytywanieMaildir
lubmbox
i analizowanie wiadomości e-mail) i po (tworzenie zatwierdzeń).źródło
git apply
wydaje się, że akceptuje równieżgit format-patch
dane wyjściowe.git apply
działałyby również dla danych wyjściowych z,git format-patch
ale zmiany byłyby niestabilne i musiałyby zostać zatwierdzone (tworząc w ten sposób inny punkt zatwierdzenia w indeksie, do którego są stosowane). Zgit am
tobą przenosisz informacje o zatwierdzeniu (wraz z autorem itp.) Do indeksu, do którego jest stosowany.git apply
następnie służy do łatania repozytorium (złe),git am
może wprowadzić uzasadnione zmiany funkcji i dołączyć je do repozytorium (preferowane podejście).git apply
służy do stosowania prostych różnic (np. zgit diff
), podczas gdygit am
służy do nakładania łat i sekwencji łatek z e-maili, w formacie mbox lub Maildir i jest „przeciwieństwem”git format-patch
.git am
próbuje wyodrębnić informacje o zatwierdzeniach i dane autora z wiadomości e-mail, dlatego może dokonywać zatwierdzeń.źródło
Po
git am
zastosowaniu łatki, jeśli używaszgit status
, nie zobaczysz żadnych lokalnych zmian.git apply
umożliwia wprowadzanie zmian w plikach źródłowych tak, jakbyś sam pisał kod, w konsekwencjigit status
igit diff
wypisze zmiany wprowadzone w łatce, którą zastosowałeś, następnie możesz naprawić / dodać więcej zmian i przesłać je razem jako jedną nową łatkę .źródło