Questi posts sembrano correlati, ma il mio cervello sta iniziando a sciogliersi, provando a pensare a questo: P
Il mio datore di lavoro ha appena iniziato a utilizzare il controllo del codice sorgente, principalmente perché prima di assumere altri sviluppatori, il "repository" era il disco fisso del dev del solo, che lavora principalmente da casa. Tutto il codice .NET che ha scritto è stato controllato in in massa e c'è molta funzionalità duplicata (leggi: copia-incolla). In questo momento, il nostro sistema SCM è un backup glorificato.
Mi piacerebbe inserire parte del codice duplicato in librerie condivise. Lascerò da solo il repository originale in modo da non rompere nulla: possiamo spostare e / o rifattorizzare il codice esistente come e quando necessario. Quindi ho creato un repository solo per il nuovo codice, incluse le librerie.
Il mio problema ruota attorno al versionare le librerie senza mirarci in un processo eccessivo: avendo riconosciuto che abbiamo bisogno di un approccio più coerente, con più sviluppatori che scrivono codice molto simile, la gestione e gli altri sviluppatori sono aperti a riorganizzare le cose, ma probabilmente non andrà giù bene se la soluzione inizia a influenzare la produttività.
La soluzione ideale nella mia mente ossessiva è quella di costruire le librerie separatamente, con ogni progetto dipendente costruito contro versioni deliberatamente scelte e compatibili di loro. In questo modo, sappiamo esattamente quali client hanno quali versioni di quali librerie, possono riprodurre in modo più affidabile i bug, mantenere rami di rilascio indipendenti per prodotti e librerie e non rompere i rispettivi progetti quando cambiano il codice condiviso.
Questo rende l'aggiornamento delle biblioteche ingombrante, in particolare per gli sviluppatori che lavorano da casa. Mi aspetto che le librerie cambino rapidamente, almeno inizialmente quando (finalmente) tiriamo insieme i bit comuni. È abbastanza probabile che io stia completamente pensando troppo a questo e staremmo bene solo costruendo tutto contro i commit più recenti della biblioteca, ma mi piacerebbe almeno essere preparato per il giorno in cui decidiamo che alcuni i componenti devono essere versionati e distribuiti in modo indipendente. Il fatto che alcune librerie debbano essere installate nel GAC rende la versionazione particolarmente importante.
Quindi la mia domanda è: cosa mi manca? Mi sento come se avessi fissato una soluzione e ora sto provando a trovare variazioni su di essa che renderanno i cambiamenti più fluidi. Che tipo di strategie hai usato per risolvere questo tipo di problema prima? Mi rendo conto che questa domanda è dappertutto; Farò del mio meglio per ripulire e chiarire qualsiasi punto di incertezza.
E per quanto mi piacerebbe usare Mercurial, abbiamo già speso denaro in un SCM commerciale centralizzato (Vault) e il passaggio non è un'opzione. Inoltre, penso che il problema qui sia più profondo della scelta dello strumento di controllo della versione.