Jeśli chcesz mieć pewność, że łatka (pojedyncze zatwierdzenie) zostanie zastosowana na konkretnym zatwierdzeniu, możesz użyć nowej opcji git 2.9 (czerwiec 2016 r.) git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
Zobacz zatwierdzenie bb52995 , zatwierdzenie 3de6651 , zatwierdzenie fa2ab86 , zatwierdzenie ded2c09 (26 kwietnia 2016 r.) Przez Xiaolong Ye (``) .
(Połączone przez Junio C. Hamano - gitster
- w zobowiązaniu 72ce3ff , 23 maja 2016 r.)
format-patch
: dodaj --base
opcję „ ”, aby zapisać informacje o drzewie bazowym
Opiekunowie lub testerzy zewnętrzni mogą chcieć poznać dokładne drzewo bazowe, którego dotyczy seria poprawek. Naucz git format-patch --base
opcji ' ', aby zapisać informacje o drzewie bazowym i dołączyć je na końcu pierwszej wiadomości (listu motywacyjnego lub pierwszej poprawki w serii).
Informacje o drzewie bazowym składają się z „podstawowego zatwierdzenia”, które jest dobrze znanym zatwierdzeniem, które jest częścią stabilnej części historii projektu, nad którym wszyscy inni pracują, oraz zero lub więcej „wymaganych poprawek”, które są dobrze znane łatki w locie, które nie są jeszcze częścią „podstawowego zatwierdzenia”, które należy nałożyć na „podstawowe zatwierdzenie” w kolejności topologicznej, zanim będzie można zastosować poprawki.
„Podstawowe zatwierdzenie” jest pokazane jako „ base-commit:
”, po którym następuje 40-heksadecymalna nazwa obiektu zatwierdzenia.
„Wymagana łatka” jest wyświetlana jako „ prerequisite-patch-id:
”, po której następuje 40-heksadecy „identyfikator łatki”, który można uzyskać, przepuszczając łatę za pomocą git patch-id --stable
polecenia „ ”.
Git 2.23 (III kwartał 2019 r.) Poprawi to, ponieważ „ --base
” opcja „ format-patch
” obliczyła patch-ids
wstępnie wymagane łatki w niestabilny sposób, który został zaktualizowany do obliczeń w sposób zgodny z „ git patch-id --stable
”.
Zobacz zatwierdzenie a8f6855 , zatwierdzenie 6f93d26 (26 kwietnia 2019 r.) Autor: Stephen Boyd ( akshayka
) .
(Połączone przez Junio C Hamano - gitster
- w commit 8202d12 , 13 czerwca 2019)
format-patch
: --base patch-id
stabilne wyjście
Nie opróżnialiśmy kontekstu za każdym razem, gdy przetwarzaliśmy przystojniak w
patch-id
kodzie generacyjnym diff.c
, ale robiliśmy to, kiedy generowaliśmy „stabilne” łatki za pomocą patch-id
narzędzia „ ”.
Przenieśmy tę podobną logikę patch-id.c
do diff.c
, abyśmy mogli uzyskać ten sam skrót, gdy generujemy patch-id dla format-patch --base=
typów wywołań poleceń.
Przed Git 2.24 (IV kwartał 2019 r.) „ git format-patch -o <outdir>
” Zrobił odpowiednik „ mkdir <outdir>
” nie „ mkdir -p <outdir>
”, co jest poprawiane.
Zobacz commit edefc31 (11 października 2019) autor: Bert Wesarg ( bertwesarg
) .
(Połączone przez Junio C Hamano - gitster
- w commit f1afbb0 , 18 października 2019)
format-patch
: tworzenie wiodących komponentów katalogu wyjściowego
Podpisano: Bert Wesarg
„git format-patch -o” zrobił odpowiednik „mkdir”, a nie „mkdir -p”, co jest poprawiane.
Unikaj używania „ adjust_shared_perm
” w wiodących katalogach, które mogą mieć wpływ na bezpieczeństwo. Osiągnięte przez tymczasowe wyłączenie config.sharedRepository
„takich jak git init
” robi.
W przypadku Git 2.25 (Q1 2020) „ git rebase
” nie działał dobrze, gdy format.useAutoBase
ustawiono zmienną konfiguracyjną, co zostało poprawione.
Zobacz zatwierdzenie cae0bc0 , zatwierdzenie 945dc55 , zatwierdzenie 700e006 , zatwierdzenie a749d01 , zatwierdzenie 0c47e06 (04 grudnia 2019) przez Denton Liu ( Denton-L
) .
(Połączone przez Junio C Hamano - gitster
- w commit 71a7de7 , 16 grudnia 2019)
rebase
: naprawić format.useAutoBase
zepsucie
Zgłoszony przez: Christian Biesinger
Podpisany przez: Denton Liu
Dzięki format.useAutoBase = true
, działa rebase spowodowało błędu:
fatal: failed to get upstream, if you want to record base commit automatically,
please use git branch --set-upstream-to to track a remote branch.
Or you could specify base commit by --base=<base-commit-id> manually
error:
git encountered an error while preparing the patches to replay
these revisions:
ede2467cdedc63784887b587a61c36b7850ebfac..d8f581194799ae29bf5fa72a98cbae98a1198b12
As a result, git cannot rebase them.
Napraw to, zawsze przekazując --no-base
łatkę formatu z bazy, tak aby efekt format.useAutoBase
był negowany.
git apply --stat file.patch
# pokaż statystyki.git apply --check file.patch
# sprawdź błąd przed zastosowaniem.git am < file.patch
# zastosuj łatkę w końcu.