Il nostro team ha appena effettuato il passaggio da FogBugz & Forno / Mercurial a Jira & Stash / Git. Stiamo utilizzando il modello Git Flow per il branching, aggiungendo branch subtask al di fuori dei branch delle feature (relativi alle sottoattività Jira delle funzionalità di Jira). Stiamo utilizzando Stash per assegnare un revisore quando creiamo una richiesta di pull per unire nuovamente il ramo principale (di solito si sviluppano ma per le sub-attività nel ramo della funzione).
Il problema che stiamo riscontrando è che, anche con la migliore pianificazione e suddivisione dei casi, quando più sviluppatori lavorano insieme sulla stessa funzionalità, ad esempio sul front-end e sul back-end, se stanno lavorando su interdipendenti codice che si trova in rami separati uno sviluppatore finisce per bloccare l'altro.
Abbiamo provato a tirarci tra i rami degli altri mentre ci sviluppiamo. Abbiamo anche provato a creare rami di integrazione locali che ogni sviluppatore può estrarre da più filiali per testare l'integrazione man mano che si sviluppano. Infine, e questo sembra funzionare probabilmente il meglio per noi finora, anche se con un po 'più di overhead, abbiamo provato a creare un ramo di integrazione al di fuori del ramo delle funzionalità. Quando un ramo secondario (al di fuori del ramo della funzione) è pronto per una richiesta pull e una revisione del codice, uniamo manualmente questi gruppi di modifiche in questo ramo di integrazione delle funzionalità. Quindi tutti gli sviluppatori interessati sono in grado di passare da quel ramo di integrazione ad altri rami secondari dipendenti. Ciò impedisce a chiunque di attendere qualsiasi ramo da cui dipende per passare la revisione del codice.
So che questo non è necessariamente un problema Git - ha a che fare con il lavoro sul codice interdipendente in più rami, mescolato con il nostro processo di lavoro e la nostra cultura. Se non avessimo la severa politica di revisione del codice per lo sviluppo (vero ramo di integrazione), lo sviluppatore 1 potrebbe fondersi per svilupparsi per lo sviluppatore 2 da cui estrarre. Un'altra complicazione è che ci viene anche richiesto di eseguire alcuni test preliminari come parte del processo di revisione del codice prima di passare la funzionalità al QA. Ciò significa che anche se lo sviluppatore front-end 1 sta eseguendo direttamente dal ramo back-end dello sviluppatore 2, andare, se lo sviluppatore back-end 2 termina e la sua richiesta di pull è in attesa di revisione del codice per una settimana, quindi lo sviluppatore front-end 2 non può creare la sua richiesta di pull / revisione del codice perché il suo revisore del codice non può prova perché il codice dello sviluppatore 2 di back-end non è stato ancora unito allo sviluppo.
In conclusione, in questi casi ci troviamo in un approccio molto più seriale piuttosto che parallelo, a seconda di quale percorso andiamo, e vorremmo trovare un processo da usare per evitare questo.
L'ultima cosa che menzionerò è che realizziamo condividendo il codice tra le filiali che non sono state esaminate e finalizzate dal codice, ma in pratica stiamo utilizzando il codice beta di altri. In una certa misura, non penso che possiamo evitarlo e siamo disposti ad accettarlo fino a un certo punto.