Off the clock ho intenzione di provare e trovare una strategia per il controllo della versione per la mia azienda; al momento utilizziamo SVN ma non esiste una struttura: fondamentalmente abbiamo solo un trunk e ci impegniamo solo a farlo. Recentemente il gestore dello sviluppo ha avviato un secondo repository che funge da "tag", ma deve essere unito manualmente al "trunk" poiché non fa parte dello stesso repository ma è completamente separato. In effetti c'è solo una cartella, chiamata "Dev" (ci sono in realtà diverse cartelle "Dev" in date diverse ma solo "Dev" è la principale) e sotto c'è tutto il resto; tutti gli altri progetti. Non è organizzato per progetto, non ha concetto di rami / tag / trunk o altro. La persona che lo ha creato inizialmente (a lungo andato, ovviamente) sembrava non sapere come impostare SVN affatto, e da allora nessuno si è preso la briga di imparare come fare le cose correttamente per paura di rompere qualcosa. Non utilizziamo alcun tipo di CI (o test automatizzati, sfortunatamente).
In primo luogo, dovremmo averlo separato per progetto? Ad esempio, abbiamo: due siti Web ASP.NET (non applicazioni Web, siti Web), un servizio Web, una cartella di distribuzione per tutti gli script di tabella e stored procedure, due client a riga di comando per i progetti esterni che vengono richiamati dal Siti Web e una cartella condivisa con oggetti aziendali comuni e simili. Ognuno di questi dovrebbe essere il proprio progetto con una configurazione branch / tag / trunk, o dovrebbe essere così:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
e hai tutti i rami e tutto ha una copia dell'intera cartella Dev? Questo approccio potrebbe essere più facile da inghiottire poiché spesso abbiamo situazioni in cui è necessario apportare modifiche alla libreria di codici condivisa e almeno a uno (di solito entrambi) dei siti Web.
In secondo luogo, eseguiamo versioni regolari ("inviate" nel nostro linguaggio) al nostro server di sviluppo e al server live. Da quello che ho letto il modo migliore per gestire questo è che tutto lo sviluppo va in trunk /, i rami sono "temporanei" e usati per aggiungere una nuova funzionalità che potrebbe interessare il trunk, e i tag sono per le versioni? Quindi, spingiamo ogni mese diciamo, e sto lavorando a un modulo completamente nuovo. Avrei ramificato il trunk e usato quel ramo per il mio codice, scrivendolo e provandolo e quant'altro. Una volta terminato il modulo, lo ricollegherei in trunk (e magari cancellerei il ramo), e quando saremo pronti per la distribuzione lo etichettiamo (diciamo "May2011"). Se abbiamo una correzione di bug dopo la sua attivazione, essa verrebbe corretta nel tag May2011 e unita nel trunk (quindi anche trunk avrà la correzione) e quindi May2011 verrebbe espulso nuovamente con la correzione? È questa l'intenzione del tagging?