english
NebuLog

Creare un'unica patch da commit multipli con git

di Alberto Vena
Topics: Git

Ci è capitato di dover effettuare delle modifiche a progetti che condividono alcuni file e, dato che non ci piace scrivere codice più di una volta, abbiamo pensato di usare git per creare una patch con le modifiche effettuate da applicare negli altri progetti. L'ipotetica struttura delle directory che contengono i 2 repository utilizzati per questo esempio è:

-- projects/
  |---first_repo_path/
  |---second_repo_path/

Creiamo la patch

Iniziamo con l'individuare a partire da quale commit vogliamo creare la patch. Entriamo nel primo repository e lanciamo il comando:

$ cd projects/first_repo_path/
$ git log --pretty=oneline --abbrev-commit -3
a5f83e3 fixes security bug #123 
789f90c fixes security bug #98
48c120e fixes problems with rails_admin 

che stampa alcuni dettagli importanti dei nostri commit. Individuiamo il commit a partire dal quale vogliamo creare la patch, nel nostro caso "789f90c" e lanciamo il comando:

git format-patch -M 789f90c --stdout > fixes_security_bugs.patch

Questo comando crea il file fixes_security_bugs.patch che incapsula le modifiche contenute negli ultimi 2 commit.

Applichiamo la patch ad un altro repository

Per applicare la patch nell'altro repository, muoviamoci nella root di quest'ultimo e lanciamo il comando per inserirla.

$ cd ../second_repo_path/
$ git am --signoff < ../first_repo_path/fixes_security_bugs.patch

Fatto!

Risolviamo eventuali conflitti

Se ci sono problemi e l'applicazione della patch fallisce, non verrà effettuata nessuna delle modifiche presenti nella patch. Possiamo risolvere il problema tramite il comando:

git apply --reject --whitespace=fix fixes_security_bugs.patch

verranno applicate solo le modifiche che non creano problemi. I pezzi di codice rifiutati verranno inseriti in dei file con estensione .rej. A questo punto possiamo importare manualmente il loro contenuto al posto giusto.

Tweet
RSS

Categorie

© 2012 - Nebulab - Tutti i diritti riservati

gipoco.com is neither affiliated with the authors of this page nor responsible for its contents. This is a safe-cache copy of the original web site.