Chciałbym stworzyć łatkę z określonego gcc
oddziału porównującą ją z oficjalnymi wydaniami; więc kiedy rozpakuję archiwum ze stabilnego wydania, mogę zastosować łatkę i uzyskać równowartość tego, co było w tej konkretnej gałęzi.
Po raz pierwszy muszę utworzyć łatkę, więc robię to po raz pierwszy, a moim głównym celem jest prawidłowe wybranie opcji i parsowanie, ponieważ mówimy o niezwykle ważnym oprogramowaniu
diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
Czy to wystarczy i najlepiej to zrobić?
gcc
z oficjalnej stabilnejtar.bz2
i inną niestabilną wersję zgit
repozytorium, chciałbym stworzyć łatkę, oczywiście chciałbym porównać tylko zmaster
gałęzią, a nie z całym repozytorium.tar.bz2
najwyraźniej nie jestgit
repozytorium, jak myślisz, że powinienem postępować?Odpowiedzi:
Tak, to dobry sposób na utworzenie łatki.
W skrócie:
Aby utworzyć łatkę dla pojedynczego pliku, może wyglądać twoje polecenie
diff -Naru file_original file_updated > file.patch
gdzie
-N
: traktuj nieobecne pliki jako puste-a
: traktuj wszystkie pliki jak tekst-r
: rekurencyjnie porównaj wszystkie znalezione podkatalogi-u
: wypisuje NUM (domyślnie 3) linie ujednoliconego kontekstuAby utworzyć łatkę dla całego katalogu:
diff -crB dir_original dir_updated > dfile.patch
gdzie
-c
: wypisuje NUM (domyślnie 3) linie skopiowanego kontekstu-r
: rekurencyjnie porównaj dowolne podkatalogi-B
: ignoruj zmiany, których wszystkie wiersze są pusteW końcu, aby zastosować tę łatkę, można uruchomić
gdzie przełącznik
p
instruuje łatkę, aby usunęła prefiks ścieżki, aby pliki zostały poprawnie zidentyfikowane. W większości przypadków tak powinno być1
.Usuń,
--dry-run
jeśli jesteś zadowolony z wyniku wydrukowanego na ekranie.źródło
dir_updated
porównaniu do tego, co było w nimdir_original
?diff
Dba o to czy robi zbyt pomijane?file.patch
tylko w pliku tekstowym, dzięki czemu można go otworzyć w dowolnym edytorze lub po prostucat
, a zobaczysz wiersz podobnyonly in dir_original: missingfile.txt
patch
usunie,missingfile.txt
czy co jeszcze?diff -N ...
jak w moim pierwszym przykładzie. Zwyklepatch
domyślnie usuwa puste pliki. Jeśli nie chcesz, po prostu użyj tylkodiff -crB
jak w swoim pytaniu. Również w niektórych (rzadkich) przypadkach potrzebna jest-E
opcja wpatch
poleceniu, aby usunąć puste pliki, po ręcznejif the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
diff -Naru dir/file dir/file.new > diff.patch
sięcan't find file to patch at input line 3
zpatch -p0 --dry-run < diff.patch
pierwszej linii plaster czyta--- dir/file
drugi+++ dir/file.new
ze znaczników czasu, diff wydaje się być w porządku, jest jakaś opcja, jak zgłosić dokładnych nazw wygląda dowodzenia dla?Jeśli chcesz porównać najnowszą wersję Git Checkin z jakąś stabilną wersją, po prostu przejdź
git diff the-stable-version
do repozytorium (musisz dowiedzieć się, jaki znacznik to opisuje, prawdopodobnie dokładny numer wersji lub jakiś wariant).git
zachowuje pełną historię projektu (normalnie istnieją sposoby na złapanie tylko części). Nie ma znaczenia, czythe-stable-version
jest w innej gałęzi programowania (tj. Rozwój rozwidlił się, a gałąź stabilna otrzymała poprawki w ostatniej chwili).źródło