Lavoro in un piccolo team che crea e gestisce un bel po '(> 100) di progetti di siti Web ASP.NET. Il nostro attuale flusso di lavoro è che i nostri progetti si trovano tutti su un'unità di rete, che tutti lavorano direttamente. Abbiamo un paio di librerie di codice condivise, che contengono sia file binari che file css, js e xsl. Con ogni aggiunta a questo codice condiviso, i file vengono distribuiti copiandoli su tutti i progetti sull'unità di rete utilizzando uno script.
Il nostro "layout" di progetto attuale è simile a questo:
Shared code project
|- Deployment (compiled binaries)
|- Library (C# source code)
|- Web (a website project that contains the default css, js, etc)
|- css
|- default (shared css code)
|- js
|- default (shared js code)
|- xsl ... etcetera
Website project
|- Bin (shared code binaries)
|- css
|- default (shared css code)
|- specific (project specific css)
|- js
|- default (shared js code)
|- specific (project specific js)
|- xsl ... etcetera.
Attualmente sto cercando di convincerci a utilizzare git e lavorare localmente sulle nostre macchine. Ho coperto la maggior parte dei potenziali problemi, ad eccezione di come gestire il codice condiviso. Ovviamente non possiamo più usare la copia & sostituire lo script se stiamo lavorando tutti localmente. Quindi qualcosa di un po 'più sofisticato dovrà essere messo al suo posto.
Se stavo usando SVN, potrei usare gli esterni di svn per fare riferimento a determinati file negli archivi di codice condivisi. La cosa bella è che posso scegliere solo quei file che mi servono (nessun codice sorgente C #), e metterlo esattamente dove ne ho bisogno. Ma con git che non sembra davvero un'opzione. Ho letto molto su git submodules e subtrees, ma nessuno dei due sembra essere il candidato ideale.
Ho anche considerato di utilizzare un gestore di pacchetti come NuGet o Bower, ma è davvero una buona idea per le dipendenze di prima parte? Per uno, significherebbe che tutti quelli che vorrebbero fare un clone su un progetto di un sito web dovrebbero avere installato il gestore pacchetti.
Quale sarebbe una tipica configurazione git per un progetto di sito Web con dipendenze di "prima parte"?
Alcuni dettagli che ritengo rilevanti per la scelta:
- Mi serve solo la sincronizzazione unidirezionale. Le modifiche al codice condiviso vengono apportate nelle librerie di codice condivise. Non è necessario essere in grado di passare a librerie di codice condivise da una libreria di progetti.
- Le librerie di codice condivise vengono aggiornate e distribuite relativamente frequentemente; almeno qualche volta alla settimana.
- Sia le librerie di codice condivise che i progetti di siti Web saranno repository git.
- Non voglio inserire il codice sorgente C # per i file binari condivisi.