Flusso Git: crea un ramo di funzionalità da un altro ramo di funzionalità


86

Lo sto usando git flowda un po 'di tempo. Sono curioso di conoscere un caso d'uso specifico.

Per uno dei miei progetti ho un biglietto per una nuova funzionalità del sito web. Questo ticket dipende da molte attività secondarie. Vorrei creare un ramo di funzionalità per il ticket principale, quindi per ogni attività secondaria creare un ramo di funzionalità del ramo di funzionalità padre.

Supponiamo che io abbia un ticket PROJ-500 e creo un ramo di funzionalità per esso

git flow feature start PROJ-500

Poi voglio integrare i biglietti PROJ-501attraverso PROJ-515nella PROJ-500prima di integrare il tutto in develop. C'è un modo per me di fare qualcosa di simile

git flow feature start PROJ-511 -b PROJ-500

Quindi nel tempo queste sotto-attività vengono completate e quando la loro funzione è terminata, il ramo viene unito PROJ-500.

git flow feature finish PROJ-511

Il comando precedente si fonderebbe PROJ-511inPROJ-500

E una volta che tutte le sotto-attività sono state completate, queste PROJ-500saranno finite e unite a develop.

In questo modo la nuova funzionalità del sito Web viene integrata in Develop come una singola unità anziché in modo frammentario.


Questo non lo fa? git flow feature start PROJ-511 PROJ-500? Il link che hai pubblicato nel commento alla risposta di DerekS suggerisce che dovrebbe.
Paul Hicks

Risposte:


120

È possibile creare un ramo di funzionalità secondarie tramite

git flow feature start PROJ-511 feature/PROJ-500

Ma non puoi usare lo strumento GitFlow per unire il ramo di nuovo nel ramo delle funzionalità principali perché se lo fai

git flow feature finish PROJ-511

la funzione verrà fusa in develop. Le funzionalità secondarie Ergo non sono supportate , è necessario farlo manualmente.

Alternative: il requisito non è nuovo, però. C'è un problema aperto così come un progetto fork che afferma di supportare le funzionalità di finitura in rami diversi da develop. Ho anche trovato una richiesta pull con un'implementazione di quella funzionalità. Potresti provare quella modifica e vedere se sei soddisfatto.


Aggiornamento 2019-12-13: come l'utente Matěj Kříž ha appena menzionato nel suo commento, l'utente Tony Chemit ha scritto una risposta qui pochi mesi dopo la mia, indicando gitflow-avh come alternativa al prodotto gitflow originale. Supporta funzionalità secondarie predefinite con la sintassi mostrata sopra. Sono passati alcuni anni e oggigiorno l'edizione AVH fa parte della normale installazione di Git per Windows, l'ho appena verificato sulla mia macchina locale e ho testato l'opzione della funzione secondaria. Cioè per gli utenti Windows funziona solo subito dopo l'installazione di Git.


1
@pymarco: Grazie per aver accettato la risposta. Sono curioso però: hai provato qualche alternativa? In caso affermativo, quale e quale è stato il risultato? Funziona come previsto? Forse altri lettori possono imparare qualcosa dalla tua esperienza. :-)
kriegaex

Scusa, ma non ho avuto il tempo di tornare su questo. Proverò ad un certo punto.
pymarco

3
Perché il voto negativo? I voti negativi sono pensati per essere usati per risposte scritte male e sciatte che non mostrano alcun segno di sforzo o conoscenza di ricerca. Comunque grazie.
kriegaex

Se si utilizza gitflow-AVH versione sguardo abbassare al stackoverflow.com/a/29353800/472611 @ risposta tony-Chemit
Matěj Kříž


12

Come già accennato, possiamo avviare una nuova funzionalità utilizzando qualsiasi ramo di base con

git flow feature start PROJ-511 feature/PROJ-500

E per finire la funzione secondaria possiamo cambiare temporaneamente la configurazione del flusso git per utilizzare il nostro ramo delle funzionalità invece di develop:

git flow config set develop feature/PROJ-500 && git flow feature finish PROJ-511

In questo modo, git flow esegue tutti i comandi e i controlli di integrità. Infine, per ripristinare la configurazione, possiamo eseguire

git flow config set develop develop 

9

Aggiornamento (5 novembre 2020): come notato nella risposta più recente qui , questo è possibile con gitflow-avh che ha sostituito il flusso git originale.

===================

Risposta originale:

Non penso che ci sia un metodo per questo in git flow, ma è abbastanza semplice con solo git.

git checkout PROJ-500
git checkout -b PROJ-511
...do your PROJ-511 work...
git checkout PROJ-500
git merge PROJ-511
git branch -d PROJ-511

2
Grazie Derek per la risposta. Sì, potrei seguire quel flusso di lavoro. Ma git flow incapsula una serie di comandi e controlli di integrità che preferisco utilizzare per lo sviluppo di funzionalità secondarie. Ad esempio, ecco un collegamento a git-flow-feature - github.com/nvie/gitflow/blob/develop/git-flow-feature
pymarco
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.