W jaki sposób mój klient może zastosować łatkę utworzoną git diff
bez zainstalowanego git? Próbowałem użyć patch
polecenia, ale zawsze prosi o nazwę pliku do załatania.
patch
nie w pełni obsługuje ten format.
W jaki sposób mój klient może zastosować łatkę utworzoną git diff
bez zainstalowanego git? Próbowałem użyć patch
polecenia, ale zawsze prosi o nazwę pliku do załatania.
patch
nie w pełni obsługuje ten format.
Odpowiedzi:
git diff > patchfile
i
patch -p1 < patchfile
działa, ale jak wiele osób zauważyło w komentarzach i innych odpowiedziach łatka nie rozumie dodawania, usuwania i zmiany nazw. Nie ma opcji, ale git apply patchfile
jeśli potrzebujesz obsługi dodawania, usuwania i zmiany nazw plików.
EDYCJA grudnia 2015 r
Najnowsze wersje patch
polecenia (2.7, wydane we wrześniu 2012 r.) Obsługują większość funkcji formatu „diff --git”, w tym zmiany nazw i kopii, zmiany uprawnień i różnice dowiązań symbolicznych (ale jeszcze nie binarne) ( ogłoszenie o wydaniu ).
Więc pod warunkiem, że używa się aktualnej / najnowszej wersji, patch
nie ma potrzeby używania, git
aby móc zastosować jego różnicę jako łatkę.
git diff > patchfile
, alepatch -p1 < patchfile
relative
opcji takiej jak:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfile
nie wymaga zainstalowanego git. Pierwsze polecenie demonstruje polecenie do generowania różnic, a nie zastosowania go.
git diff from_branch > patchfile; git checkout from_branch; git patch -p1 < patchfile
lubgit diff from_branch to_branch > patchfile; ...
Spróbuj tego:
patch -p1 < patchfile
git diff
umieści a/
i b/
przedrostki w danych wyjściowych, więc patch -p1
pomija je, aby zastosować plik poprawki.
Posługiwać się
git apply patchfile
Jeśli to możliwe.
patch -p1 < patchfile
ma potencjalny efekt uboczny.
git apply
obsługuje także dodawanie, usuwanie i zmianę nazw plików, jeśli są one opisane w git diff
formacie, co patch
nie jest możliwe. Wreszcie git apply
jest modelem „zastosuj wszystko lub przerwij wszystko”, w którym albo wszystko jest zastosowane, albo nic nie ma, podczas gdy łatka może częściowo zastosować pliki łatek, pozostawiając katalog roboczy w dziwnym stanie.
git apply
to najlepszy sposób, aby to zrobić, ale to pytanie konkretnie pyta, jak zastosować łatkę bez zainstalowanego Git .
--dry-run --verbose
są przydatne, aby określić, jakie będą skutki uboczne, jeśli takie wystąpią. (przy użyciu poprawki v2.5.8)
git apply patchfile -
... jedyna rozsądna odpowiedź ...” - to prawie śmieszne. Za każdym razem, gdy deweloperzy OpenSSL wysyłają mi łatkę do przetestowania, Git nie stosuje jej. To za każdym razem. Jeszcze nie widziałem, żeby to głupie narzędzie nakładało łatkę.
używam
patch -p1 --merge < patchfile
W ten sposób konflikty można rozwiązać jak zwykle.