Ik werk aan een op WordPress gebaseerd project en ik wil mijn project patchen bij elke nieuwe releaseversie van WP. Hiervoor wil ik een patch genereren tussen twee commits of tags.
Bijvoorbeeld, in mijn repo /www/WP
doe ik dit:
$ git patch-format com1..com2 --stdout > '~/patchs/mypatch.patch'
# or
$ git patch-format tag1..tag2 --stdout > '~/patchs/mypatch.patch'
/www/WP
git natif WordPress
/www/myproject
Mijn git-project WordPress gebaseerd
De opdrachtregel git apply
werkt niet, denk ik omdat we in verschillende repositories zitten.
Kan ik een patch-bestand genereren zonder een vastlegging, alleen een differentieel en het toepassen op een andere git-repository?
Bedankt.
Antwoord 1, autoriteit 100%
Je kunt gewoon git diff
gebruiken om een verenigd diffgeschikt voor git apply
:
git diff tag1..tag2 > mypatch.patch
U kunt de resulterende patch dan toepassen met:
git apply mypatch.patch
Antwoord 2, autoriteit 18%
Om een patch te maken voor verschillende commits, moet je het format-patch
git commando gebruiken, bijv.
git format-patch -k --stdout R1..R2
Hiermee worden je commits geëxporteerd naar een patch-bestand in mailbox-formaat.
Om een patch voor de laatste commit te genereren, voer je uit:
git format-patch -k --stdout HEAD~1
Pas vervolgens in een andere repository de patch toe met het am
git-commando, bijvoorbeeld
git am -3 -k file.patch
Zie: man git-format-patch
en git-am
.
Antwoord 3, autoriteit 7%
U kunt twee opdrachten toepassen
git diff --patch > mypatch.patch
// om de patch te genereren`git apply mypatch.patch
// om de patch toe te passen`
Antwoord 4
Als aanvulling, om een patch te produceren voor slechts één specifieke commit, gebruik:
git format-patch -1 <sha>
Wanneer het patch-bestand is gegenereerd, zorg er dan voor dat uw andere repo weet waar het is wanneer u git am ${patch-name}
gebruikt
Voordat u de patch toevoegt, gebruikt u git apply --check ${patch-name}
om er zeker van te zijn dat er geen conflict is.
Antwoord 5
Je kunt zelfs alleen patches uitvoeren voor de subdirectory waarin je je momenteel bevindt. Voeg gewoon .
git format-patch -k b365cce8..80a2c18a .
Dan kun je ze toepassen:
git am *.patch
Zie dit antwoordvoor details