Nie mam doświadczenia z kontrolą wersji i git, więc próbuję dowiedzieć się, czym jest łatka i czym różni się od pozostałych czynności, które wykonuję w git?
Kiedy mam zastosować łatkę? Czy to się dzieje za każdym razem, gdy się angażuję?
Nie mam doświadczenia z kontrolą wersji i git, więc próbuję dowiedzieć się, czym jest łatka i czym różni się od pozostałych czynności, które wykonuję w git?
Kiedy mam zastosować łatkę? Czy to się dzieje za każdym razem, gdy się angażuję?
Odpowiedzi:
W tym poście na blogu możesz zobaczyć, jak możesz stworzyć łatkę (zbiór zmian, które chcesz przekazać i zastosować w innym repozytorium)
(zdjęcie z wpisu na blogu „ Bioruby with git: jak by to działało? ” z 2008 roku opublikowanego przez Jana AERTS )
Zobacz także Współtworzenie Railsów z Gitem jako kolejny konkretny przykład.
W dzisiejszych czasach żądanie ściągnięcia GitHub sprawia, że bardzo łatwo jest zastosować łaty w repozytoriach GitHub, co jest przydatne, gdy nie jesteś bezpośrednim współpracownikiem (tj. Nie masz prawa bezpośrednio wypychać do repozytorium).
Właściwie całkiem niedawno GitHub wprowadził „ Better Pull Request Email ”, aby usprawnić powiadamianie o nowych poprawkach.
Patch to program uniksowy, który aktualizuje pliki tekstowe zgodnie z instrukcjami zawartymi w oddzielnym pliku, zwanym plikiem poprawki.
Innymi słowy, może to oznaczać plik z instrukcjami lub program, który przetwarza ten plik i stosuje go do czegoś.
Co to jest plik poprawki? Załóżmy, że masz plik tekstowy z 2 liniami:
This is line A.
This is line B, or otherwise #2.
Następnie zmieniasz pierwszą linię, a teraz twój plik wygląda tak:
This is SPARTA.
This is line B, or otherwise #2.
Jak opisałbyś zmianę w zawartości pliku? Możesz powiedzieć, że pierwsza linia to „To jest linia A.” został zastąpiony słowem „To jest SPARTA.” lub nawet ostatnie słowo „A” pierwszej linii zastąpione innym słowem „SPARTA”. I to jest dokładnie to mówi nam diff . Powiedzmy, że mam dwie wersje tego pliku, jedną o nazwie plik1.txt, a drugą plik2.txt, a następnie uruchamiam diff i otrzymuję to:
$ diff -u file1.txt file2.txt
--- file1.txt 2011-11-26 11:07:03.131010360 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
Mając opis zmian, możesz zastosować go do treści początkowej i uzyskać zmodyfikowaną treść. Te zmiany, wprowadzone w ujednoliconym formacie zrozumiałym dla programów przypominających „łatkę”, nazywane są plikiem poprawki. To tak, jakby zamiast kupować rybę od kogoś, kogo nauczy Cię łowić, abyś mógł sam wykopać tę rybę z wody. Teraz zastosujmy naszą poprawkę do pliku1.txt, aby wyglądał dokładnie tak, jak plik2.txt:
$ cat file1.txt
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch
--- file1.txt 2011-11-26 11:09:38.651010370 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
$ patch < changes.patch
patching file file1.txt
$ cat file1.txt
This is SPARTA.
This is line B, or otherwise #2.
$
Możesz pomyśleć, że łatwiej jest mieć tylko dwie wersje tego pliku. Cóż, w tym prostym przypadku to prawda. Ale kiedy masz dużo plików, a te pliki są bardzo duże, o wiele bardziej wydajne jest wprowadzenie kilku wierszy zmian niż dwóch kopii całości.
Mówiąc w kategoriach gita, plik łatki nadal oznacza to samo, ale samodzielne używanie diff + patch byłoby koszmarem. Na przykład, zawsze będziesz musiał mieć wypisane dwie wersje pliku (lub nawet całe repozytorium), aby je porównać. Nie brzmi tak dobrze, prawda? Więc git zajmie się całą ciężką pracą za Ciebie - porównuje twój lokalny plik z tym, co jest w repozytorium, z którym pracujesz i może pokazać ci go jako "różnicę" lub zastosować ten "różnicę" jako patch, czyli zatwierdzenie zmian, a nawet pozwolenie na zastosowanie jakiegoś pliku poprawki, który już masz. Bez wchodzenia w szczegóły, w tym sensie git jest absolutnie taki sam, jak inne systemy kontroli wersji, takie jak SVN, a nawet CVS lub konieczność.
Mam nadzieję, że to pomoże!
patch
programu. Myślałem, że git ma swoją własną implementację.
Łatka to mały plik, który wskazuje zmiany dokonane w repozytorium. Zwykle jest używany, gdy ktoś spoza zespołu ma dostęp tylko do odczytu, ale ma dostęp do dobrej zmiany kodu. Następnie tworzy łatkę i wysyła ją do Ciebie. Stosujesz go i wypychasz do repozytorium git. Wszyscy odnoszą korzyści z zaktualizowanej wersji, a autor poprawki nie potrzebował dostępu do odczytu / zapisu.
Tak naprawdę jest to głównie kwestia bezpieczeństwa (przynajmniej do tego ludzie go używają).
git diff
domyślnie pokazuje zmiany jako łaty, git apply
pozwala na zastosowanie łaty itp.).
Plik poprawki reprezentuje pojedynczy zestaw zmian, które można zastosować do dowolnej gałęzi w dowolnej kolejności. Używając łatki, uzyskasz różnice między jednym lub wieloma plikami. Później możesz zastosować różnice (łatkę), aby uzyskać zmiany w nowych plikach. Łatka w Git ma wiele zastosowań. Jeśli masz niezatwierdzone zmiany w katalogu roboczym i chcesz je zastosować w innym miejscu, po prostu utwórz poprawkę i zastosuj ją.
git diff > mypatch.patch
Jeśli masz nowe pliki w swoim repozytorium (nieśledzone), powinieneś przygotować plik przed utworzeniem łatki (nie zatwierdzaj) i użyj następującego polecenia
git diff --cached > mypatch.patch
Możesz później zastosować łatkę:
git apply mypatch.patch
Jeśli chcesz dokonać pewnych zmian w repozytorium git, a nie masz uprawnień do zapisu, po prostu wprowadź zmiany i utwórz łatkę między nimi i wyślij ją do kogoś, kto ma uprawnienia do zastosowania łatki, w ten sposób Twoje zmiany powinny zostać dodane do tego repozytorium git.
git format-patch <base_commit_or_branch_name>
= zapakuj wszystkie zatwierdzenia od teraz z powrotem do <base_commit_or_branch_name> w ładne i zgrabne pliki zawierające różnice, a także komunikaty o zmianach, w celu łatwego wysłania (np. E-mailem) do kogoś, kto chce je załatać ich kod źródłowy. Następnie odbiorca łata swój system za pomocą twojego pliku:cat *.patch | git am
Łatka to zestaw różnic między jednym lub większą liczbą plików, aby pokazać, co się między nimi różni. Zwykle generowałbyś tylko łatkę, aby pokazać komuś, co zmieniłeś. Przykładem sytuacji, w której możesz to zrobić, jest znalezienie i naprawienie błędu w aplikacji typu open source, a następnie opublikowanie poprawki w ich narzędziu do śledzenia błędów.