Abbiamo un repository Git centrale da cui gli sviluppatori recuperano e inviano le modifiche. Apportano modifiche al ramo principale predefinito. Il nostro strumento CI (Continuous Integration) crea artefatti da questo ramo master predefinito ed è l'entità responsabile della promozione di qualcosa che vogliamo testare su un ramo "UAT" (questo è in realtà fatto da una persona build-master che fa clic su un pulsante sul Pagina Web degli strumenti CI che farà la promozione). Lo strumento CI è anche responsabile della promozione del codice da UAT al ramo "Produzione". Lo scopo delle filiali UAT e Produzione è quello di catturare ciò che è stato promosso a UAT e alla produzione. Nessuno sviluppo si verifica sul ramo UAT e Production conterrà solo "sviluppo" sotto forma di "hot-fix" infrequenti poiché le nostre iterazioni di sviluppo / rilascio sono molto veloci (iterazioni di 1 settimana).
Se riusciamo a farlo facilmente, vorremmo introdurre un controllo che impedisca a qualcuno che per errore apporta modifiche di sviluppo direttamente alle filiali UAT e Produzione. Un pensiero è quello di avere un gancio sul server centrale che si assicura che solo l'utente dello strumento CI possa apportare modifiche a UAT e Produzione. Abbiamo anche pensato che potremmo avere un repository centrale che gli sviluppatori usano che contiene solo il ramo master e un secondo repository che contiene i rami UAT e Production. Lo strumento CI comunicherà con entrambi i repository - esaminerà lo sviluppo da repo per vedere quando ci sono cambiamenti e usa il secondo repository per fare la sua promozione ai rami UAT e Produzione.
Questo è ciò che le persone fanno tipicamente (repository separati per scopi di sviluppo rispetto alla promozione?) Sarebbe meglio dell'approccio hook del server?