2015-05-06 27 views

risposta

6

Se il progetto ha più di 100 sottodocumenti git di componenti e dipendenze, la loro gestione sarà ingombrante indipendentemente dall'approccio utilizzato :-) Suggerisco di cercare modi per creare script e automatizzare il maggior numero di parti possibile. Fidati di me, la novità di giocare e incatenare i comandi di git si consuma molto rapidamente per la maggior parte delle persone, specialmente quando le scadenze si avvicinano. C'è già un'ottima risposta here sul confronto tra i diversi approcci per gestire i sottoprogetti git.

Per quanto riguarda il flusso di lavoro, innanzitutto separerò i repository che sono sotto il vostro controllo da quelli che non sono i repository di terze parti.

Per repository di terze parti che non cambiano spesso (tramite fusioni o PR a monte), è ancora possibile utilizzare i sottomoduli. In genere, questi sottomoduli verranno puntati sull'HEAD di alcuni tag stabili. Sincronizzarli è solo questione di esecuzione (o scripting) git submodule update --recursive --remote. Se queste dipendenze di terze parti possono essere specificate in strumenti di gestione dei pacchetti come bundler (for ruby projects), ciò aiuterà a semplificare la gestione dei sottoprogetti.

Per i repository personali e che cambiano spesso, sia gitslave o git-subtree sono due alternative, a seconda delle preferenze del team.

multiplex gitslave git operazioni in più rami. IOW, quando diramazioni, unione, commit, push, pull ecc., Ogni comando verrà eseguito a turno sul progetto padre e su tutti gli slave. Ciò impone al team di lavorare in modo top-down, partendo dal super-progetto fino agli schiavi.

gitsubtree utilizza la funzionalità subtree merge di Git per ottenere un effetto simile a quello dei sottomoduli, memorizzando effettivamente i file nel repository principale e unendo le modifiche direttamente a quel repository. Il risultato finale è un archivio canonico con la possibilità di includere la cronologia di tutti i sottoprogetti. In un certo senso, questo consente ai membri del team di concentrarsi maggiormente sui sottoalberi di cui sono responsabili, ma richiederà un lavoro supplementare per unire di nuovo all'albero genitore.

Come sviluppatore, la mia preferenza è lavorare a livello di sottoprogetti inferiori (per fare il mio "red, green, refactor" cycle) e toccare i progetti padre solo quando necessario. Tuttavia, indipendentemente dal fatto che si scelga un flusso di lavoro dall'alto verso il basso o dal basso, provare a identificare i passaggi ripetitivi soggetti a errori nella propria strategia di unione & e copiarli il più possibile.

+0

Mi ero dimenticato di gitslave. Divertente, è fondamentalmente ciò che stiamo facendo ora, ma con uno script soggetto a errori che è probabilmente molto peggio di gitslave. –

+1

L'unica cosa che usa gitslave è che potresti finire con molte filiali che potrebbero non servire a scopi significativi. Ad ogni modo, ci saranno dei compromessi in tutti gli approcci. In bocca al lupo! btw, se hai trovato la risposta utile, ti preghiamo di considerare l'upvoting e/o l'accettazione. Grazie! –

+1

Questo è il problema che abbiamo adesso - molti rami, duplicati anche in tutti i sottomoduli. Sono nuovo di stackoverflow, nonostante sia un membro per molto tempo non ho mai fatto una domanda prima. Come accetto? Non mi consentirà di votare perché non ho abbastanza karma. –