Codice condiviso su molti progetti (web) usando git

3

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.
posta PJanssen 13.01.2015 - 20:51
fonte

1 risposta

3

Potresti mettere in piedi il tuo feed di pacchetti NuGet privato su un server interno della tua azienda. Pubblica ogni dipendenza nel tuo sito NuGet come un pacchetto separato e utilizza NuGet per gestire tali dipendenze. Inoltre, se è necessario apportare modifiche al codice in un pacchetto, è possibile creare un feed del pacchetto locale in modo da poter modificare il codice, compilare e aggiornare. Quando sei pronto per condividere con i colleghi, aggiungi tag e inserisci Git, quindi pubblica il feed della tua azienda.

Hosting dei tuoi feed NuGet (NuGet Docs)

La cosa bella di questo approccio è che ottieni la retrocompatibilità con i tuoi pacchetti. Puoi fare in modo che le API interrompano le modifiche senza richiedere che altri progetti si trovino nello stesso ciclo di rilascio del tuo. Come ulteriore vantaggio, le strutture del progetto probabilmente non saranno interessate se cambi i sistemi di controllo del codice sorgente.

    
risposta data 14.01.2015 - 03:40
fonte

Leggi altre domande sui tag