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?

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


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


41

Lub, jeśli kopiesz to w starej szkole:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

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


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


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.