Non riesco a capire come cambiare la mia mentalità a git e ad aver risposto al seguente problema. Ho la situazione in cui abbiamo un motore condiviso e più progetti che utilizzano il motore. I team di sviluppo interni e i team secondari potrebbero lavorare su progetti che utilizzano il motore condiviso e desiderano utilizzare HEAD del motore condiviso il più possibile durante lo sviluppo, fino a poche settimane prima della spedizione, in cui il motore condiviso verrà taggato e ramificato, e il progetto utilizzerà quindi quel ramo. I team di progetto generalmente lavorano solo su un progetto alla volta, ma possono apportare modifiche al motore condiviso durante il debug o aggiungere funzionalità. Quando commettono tali modifiche, il nostro sistema di build esegue per trovare eventuali problemi che potrebbero aver introdotto con il commit.Come posso adattare la mia strategia svn: externals a git submodules?
I (penso di) voglio utilizzare questo stesso modello con un nuovo progetto/nuova società. Nel svn, la struttura era qualcosa di simile: shared_engine
project_in_dev-+
+- svn:external shared_engine:head
project_about_to_ship-+
+-svn:external shared_engine_rev1_branch
Questo ha funzionato molto bene:
- sviluppatori progetto potrebbe fare un comando di controllare tutte le dipendenze che avrebbero bisogno di
- sviluppatori del progetto potrebbe fare il lavoro del motore e impegnarsi facilmente nel motore condiviso
- Potremmo facilmente rev o cambiare il motore condiviso che il progetto stava utilizzando con esternalizzazioni e revisioni
- aggiornamenti del motore sono stati facili da ottenere con il vostro "aggiornamento dal progetto principale" quotidiano
OK, ora mi sono trasferito a git, e sottomoduli sembrano essere il nuovo modo di trattare con codice esterno, ma è sembra che perda alcune funzionalità.
- È un processo a più passaggi per ottenere effettivamente tutte le dipendenze del progetto. Gli sviluppatori del progetto devono fare un clone git quindi un sottomodulo git init/git aggiornamento del sottomodulo --recursive
- È un processo a più fasi per aggiornare il progetto root e il sottomodulo, quindi se le modifiche vengono apportate al progetto root da un altro sviluppatore che corrispondere alle modifiche al sottomodulo, non si ottiene immediatamente il codice corrispondente e si potrebbe ottenere molto confuso
- Il sottomodulo è bloccato su un particolare commit e, se si apportano modifiche al sottomodulo, si avrà difficoltà a farlo funzionare con il testa del motore condiviso
- Non ho il controllo su quale revisione del motore condiviso lo sviluppatore del progetto ha estratto senza dare istruzioni su cosa aggiornare a
Quindi le mie domande sono le seguenti:
- In primo luogo, sono le ipotesi di cui sopra circa sottomoduli corretta? Sembra essere basato su quello che ho letto, ma non sono sicuro al 100% poiché sto ancora cercando di capire git
- Se le mie supposizioni sono corrette, mi sto avvicinando al problema con il processo corretto? Devo riadattare il mio pensiero quando uso git? In altre parole, c'è un altro modo per fare ciò che sto cercando di fare e ho bisogno di pensare al processo in modo diverso?
- Supponendo che non abbia saltato i primi due, e che i sottomoduli non faranno ciò che voglio, quale sarà? Ho letto delle fusioni di sottostrutture, ma quelle non sembrano esattamente corrette in quanto sembra che non riesca a ottenere le modifiche apportate al codice condiviso nel repository.
Grazie mille per il vostro aiuto e la vostra pazienza. Se non è ovvio, sono molto nuovo da git, e mi piace e voglio abbracciarlo, ma sto ancora avendo alcuni equivoci concettuali perché probabilmente sono stato danneggiato al cervello da anni di utilizzo di repository centrali. Voglio imparare! Inoltre, ho lavorato tutto il giorno e guardavo vari post sui blog, domande di stackoverflow, ecc., E ancora non capisco, ovviamente ho bisogno di spiegarlo passo dopo passo per la mia situazione. Non ho colleghi da chiedere su questo, nessun gruppo di utenti nell'area di Seattle dove potrebbero esserci dei guru del git? :)
Solo una nota, git 1.7 ha aggiunto il controllo sparse, che risolve alcuni dei miei problemi. Il problema più grande, che consiste nel far sì che gli sviluppatori lavorino con noi sullo stesso ramo della libreria automaticamente, non è ancora completamente risolto. Grazie per le risposte, mi hanno dato idee su dove guardare, ma non riesco a segnare o rispondere come realmente, ma sto facendo il upvoting :) –