Vediamo come risolvere il problema di una directory di troppo nell’alberatura di una serie di git patch da appicare su un nuovo repository git.
Ecco come fare
Dovevo portare un ramo di sviluppo da un progetto ad un altro. Avevo la mia bella serie di commit, con file tutti nuovi su cui era iniziata la fase di sviluppo.
Volevo portarmi lo storico del ramo che avevo appena sviluppato sul nuovo progetto.
Quindi la cosa più logica da fare mi è sembrata l’estrazione di una serie di patch da applicare poi sull’altro progetto. Il problema che mi si è presentato è che i due progetti non presentano la stessa struttura di directory.
Il primo progetto, da cui effettuavo l’estrazione, presentava nel path un livello di directory di troppo.
Il sorgente da cui volevo esportare le mie patch, presentava il livello src non presente nell’altro progetto, ecco un esempio di come si presentava l’alberatura delle directory:
/base |src | |codice 1 | |codice 2 | |codice 3 |...
Il secondo progetto presentava una struttura simile a questa:
/base |codice 1 |codice 2 |...
Fortunatamente esiste il parametro -p da usare nell’applicazione delle patch, adatto per risolvere il problema in questi casi semplici:
$ git am -p2 ../myDirPatch/*
Il parametro p viene passato al comando git apply che si occupa di applicare una singola patch. Il default per p è 1, impostandolo a 2 effettua la cancellazione proprio di quel livello in più che mi ostacolava.