È buona norma archiviare i runtime del framework sotto il controllo del codice sorgente?

9

Conosco molti negozi di software mantieni i binari sotto controllo sorgente . Tuttavia, il nostro negozio era venuto a memorizzare intere framework sul repository: DirectX runtime, CUDA, nVidia Optix, qualunque cosa.

Si dice che rende più facile l'impostazione di una macchina di sviluppo (presumibilmente, si ottiene l'ultima e inizia la codifica). Tuttavia, considerevolmente gonfia il repository e lo carica con la cronologia irrilevante.

Non ho mai visto un modello di utilizzo simile. Lo consideri una buona pratica?

[EDIT:] Non ho alcun problema con i binari di terze parti isolati che controllano i sorgenti. La domanda si riferisce a interi runtime del framework, in genere costituiti da più di 10 binari. Come esempio estremo, prendi Windows SDK (che non teniamo nel repository, grazie a dio, ma non vedo alcuna differenza in linea di principio).

    
posta Ofek Shilon 03.01.2012 - 07:55
fonte

6 risposte

6

I binari non sono generalmente adatti al sistema di controllo della versione perché:

  • non beneficiano delle funzionalità di controllo della versione (unione, diff)
  • aumentano le dimensioni del repository ...
  • ... che conta perché non rimuovi facilmente una versione da un VCS (i VCS sono fatti per mantenere la cronologia), al contrario di repository di artefatti come Nexus , che sono semplici directory condivise (facile da ripulire: cd + rm !)
  • dovrebbero essere referenziati in un VCS come testo , una dichiarazione di percorso + versione: puoi mantenere la cronologia rilevante in questo modo , registrando qualsiasi modifica della versione binaria come una modifica in quel file di testo (come un pom.xml se stanno usando Nexus per esempio)
risposta data 03.01.2012 - 08:07
fonte
6

Sto bene con la versione che controlla le risorse binarie. Sono contro la versione che controlla i file generati .

Inoltre, la configurazione dell'ambiente è qualcosa di diverso dallo sviluppo. Per lo più sviluppiamo in Python e ha uno strumento chiamato virtualenv che consente di creare un ambiente isolato leggero (comprese le librerie) per un progetto. Quando controlliamo le nostre fonti, abbiamo uno script di installazione che crea questo virtualenv. Usando un manifest, questo specifica quali versioni delle librerie sono necessarie e altre cose simili. Niente di tutto questo è controllato dalla versione. Lo script di installazione è solo.

Lanciare l'intero framework sotto il tuo progetto principale ingombra la tua storia e seriamente rovina tutto. Non fa parte del tuo progetto e dovrebbe essere trattato diversamente.

    
risposta data 03.01.2012 - 08:05
fonte
3

Generalmente è una buona idea fare la gestione della configurazione con le versioni del framework. Se il codice richiede una specifica versione di DirectX, quella versione dovrebbe essere facilmente disponibile e, se si controlla una versione precedente del software, dovrebbe essere facile determinare quali dipendenze esterne ha.

Quello che non penso sia una buona idea qui è usare il tipico sistema di controllo delle versioni per archiviare quei binari. Nella nostra azienda, archiviamo ogni versione di framework, librerie e strumenti esterni in una struttura di sottocartelle su un'unità di rete. Dove pensiamo che abbia senso, abbiamo file readme per documentare quale versione dello strumento appartiene a quale versione del software, o, se possibile, abbiamo script per l'installazione o l'utilizzo di una versione specifica. Solo i file Leggimi e gli script entrano nel controllo della versione.

Conserviamo anche versioni precedenti di strumenti e librerie finché pensiamo che potrebbe esserci la possibilità di ricostruire e una versione precedente a seconda di tali strumenti. In questo modo ci dà la possibilità di cancellare alcuni degli strumenti e librerie molto vecchi della nostra unità di rete quando sono stati deprecati (ovviamente, nel caso avessimo archivi su supporti esterni).

    
risposta data 03.01.2012 - 08:26
fonte
2

Penso che i binari dovrebbero essere negozi da qualche parte. Suggerirei di archiviarli al di fuori di un repository, specialmente se sono grandi e portano a tempi di check-out più grandi. Non vedrò che è una cattiva pratica, ma non è nemmeno una che ho visto.

Questa potrebbe essere una buona idea se la tua organizzazione ha molti progetti che hanno come target diverse versioni di runtime. Ti assicura di avere il giusto binario di runtime quando lavori sui progetti giusti.

    
risposta data 03.01.2012 - 07:59
fonte
1

Personalmente ritengo che questa sia una pessima pratica. Preferisco creare un wiki con le istruzioni di installazione e caricare i binari necessari su di esso. Questi file sono necessari solo per i nuovi sviluppatori, non è necessario espandere i repository di tutti gli altri.

    
risposta data 03.01.2012 - 07:59
fonte
1

C'è una buona ragione per farlo, ovvero che hai tutto ciò di cui hai bisogno in una posizione singola , senza alcuna dipendenza esterna.

Questo è molto più importante di quanto tu possa pensare. In sostanza, ti assicuri di non fare affidamento su un artefatto su un server venditore che potrebbe scomparire dopo alcuni anni, dal momento che hai tutto in-house.

Riguardo al deposito gonfiato. Questo è solo un problema se il tuo VCS mantiene una copia locale completa (git fa questo, cvs no) poiché la clonazione e / o l'aggiornamento saranno lenti. In cambio avrai copie su ogni macchina di sviluppo, che potrebbe salvare la tua azienda se lo schema di backup centrale per qualche motivo fallisce un giorno.

È una questione di priorità o politica. Finché la decisione è intenzionale, mi andrebbe bene con questo.

    
risposta data 04.01.2012 - 08:30
fonte

Leggi altre domande sui tag