Maak een patch- of diff-bestand van git-repository en pas het toe op een andere andere git-repository

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/WPdoe ik dit:

$ git patch-format com1..com2 --stdout > '~/patchs/mypatch.patch'
# or
$ git patch-format tag1..tag2 --stdout > '~/patchs/mypatch.patch'

/www/WPgit natif WordPress

/www/myprojectMijn git-project WordPress gebaseerd

De opdrachtregel git applywerkt 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 diffgebruiken 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-patchgit 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 amgit-commando, bijvoorbeeld

git am -3 -k file.patch

Zie: man git-format-patchen git-am.


Antwoord 3, autoriteit 7%

U kunt twee opdrachten toepassen

  1. git diff --patch > mypatch.patch// om de patch te genereren`
  2. 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

Other episodes