Jak zastosować łatkę wygenerowaną za pomocą git format-patch?

221

Mam 2 lokalne repozytoria git, oba wskazujące na to samo zdalne repozytorium.

Jeśli tak, to w jednym repozytorium git git format-patch 1mogę zastosować tę łatkę do drugiego repozytorium?

Silverburgh
źródło

Odpowiedzi:

330

Uwaga: możesz najpierw zobaczyć, co zrobi Twoja łatka:

Najpierw statystyki:

git apply --stat a_file.patch

Następnie suchobieg w celu wykrycia błędów:

git apply --check a_file.patch

Na koniec możesz użyć, git amaby zastosować łatkę jako zatwierdzenie: pozwala podpisać zastosowaną łatkę.
Może to być przydatne do późniejszego wykorzystania.

git am --signoff < a_file.patch 

Zobacz przykład w tym artykule :

W swoim dzienniku git zobaczysz, że komunikaty zatwierdzeń zawierają znacznik „Signed-off-by”. Ten tag zostanie odczytany przez Githuba i innych, aby dostarczyć użytecznych informacji o tym, jak zatwierdzenie skończyło się w kodzie.

Przykład

VonC
źródło
9
Uwaga do siebie: 200. złota odznaka Great Answer.
VCC
4
git am < somepatch.patchzwraca „fatal: pusta nazwa ident (dla <>) niedozwolona”. Czy ktoś może mi wyjaśnić, dlaczego?
gromit190,
@ gromit190, co oznacza złe Authornagłówki w łatce i / lub nie git config user.{name,email}.
ulidtko
DOBRZE; git apply --checkmówi patch does not applyi git apply -3mówi repository lacks the necessary blob to fall back on 3-way merge.W git, ponowne zatwierdzanie zobowiązań jest dziecinnie proste; ale w jaki sposób ludzie nakładają łaty na zaktualizowany kod?
ulidtko
1
@ulidtko Może z stackoverflow.com/a/15375869/6309 ?
VonC
163
git apply name-of-file.patch
Jeff Dallien
źródło
25
To może nie odpowiadało na pierwotne szczegółowe pytanie, ale odpowiadało na pytanie w tytule, dlatego jestem na tej stronie. Dziękuję Ci!
Rock Lee
12
Rozumiem, że to stare pytanie i odpowiedź ... ale pomyślałem, że dla niektórych osób może być pomocne zrozumienie różnicy między aplikacją git a aplikacją git am .
mgarey
1
git stosuje „[... pełna ścieżka do pliku ...] / name-of-
file.patch
41

Lub, jeśli kopiesz to w starej szkole:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch
Dominic Cooney
źródło
3
Tylko dlatego, że masz świadomość: to nie utworzy zatwierdzenia, więc utraci komunikat zatwierdzenia i informacje o autorze.
Cezar
22

Najpierw powinieneś zanotować różnicę między git amigit apply

Kiedy używasz git am, zwykle chcesz zastosować wiele łatek. Dlatego należy użyć:

git am *.patch

Lub tylko:

git am

Git automatycznie znajdzie łatki i zastosuje je w kolejności ;-)

UPD
Tutaj możesz znaleźć sposób generowania takich poprawek

Eugen Konkov
źródło
1
To wyjaśnienie różnicy pomogło mi użyć git apply.. iw --reverse:-) 👍
Jordan Gee,
22

Jeśli chcesz zastosować go jako zatwierdzenie , użyj git am .

Jakub Narębski
źródło
1
Jak zazwyczaj dostajesz przede wszystkim pliki mbox?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
14

Jeśli korzystasz z JetBrains IDE (np. IntelliJ IDEA, Android Studio, PyCharm), możesz przeciągnąć plik poprawki i upuścić go w IDE, a pojawi się okno dialogowe pokazujące zawartość poprawki. Wystarczy, że klikniesz „Zastosuj łatkę”, a zatwierdzenie zostanie utworzone.

ice1000
źródło
1
Dzięki za to. Jest to naprawdę przydatne dla wszystkich. Odpowiedź jest zaakceptowana. ale jest to również przydatne.
Lasitha Benaragama,
1
@ambarox Ale ta odpowiedź została raz raz zanegowana, nie wiem dlaczego
ice1000
1
może być ktoś, kto myśli, że jedynym sposobem na stosowanie łatek jest linia poleceń. : D Dałem ci opinię. zdrowie przyjacielu.
Lasitha Benaragama
1
@LasithaBenaragama - rodzaj. SO ma nie tylko pomóc OP, ale także wszystkim, którzy ją śledzą. Ta odpowiedź (choć przydatna) nie stanowi ogólnego rozwiązania. To byłby świetny mały post na blogu, ale nie byłaby to odpowiedź „TAK dobra”. Wyjaśniłbym opinię negatywną!
OldTinfoil
-2

Możesz użyć poniżej wspomnianego cmd

git apply fileName.patch
Amit Sharma
źródło