Dovremmo includere la cartella PACCHETTO Nuget nel controllo versione?


68

Mi piacerebbe sapere

Nel progetto C # o VB.NET dovremmo includere la cartella PACKAGE (cartella del pacchetto nugget creata nella radice del mio progetto che contiene i file nupkg e altro contenuto) nel nostro repository di controllo del codice sorgente (Git per esempio).


Assolutamente , perché questi file fanno parte del tuo codice e il tuo progetto non verrà creato senza di essi.
Sharky

Ho fatto una domanda simile su SO molto tempo fa. È anche possibile cercare lì per risposte: stackoverflow.com/questions/1710027/... :)
CWAP

Mi chiedo perché nessuno nel mondo Maven chieda "dovremmo includere librerie di terze parti nel controllo della versione". Trova qualche solido argomento contrario per NON commettere librerie, anche se non molto convincente.
Hoàng Long,

Risposte:


28

È passato molto tempo e NuGet è cambiato, quindi ecco una nuova risposta.

NuGet non crea più una cartella di pacchetti all'interno della struttura di origine. Invece ce n'è uno nella tua directory utente ( %HOME%\.nuget\packagesper essere precisi) dove mette tutti i pacchetti che scarica e i progetti fanno semplicemente riferimento a questi.

Quindi la semplice risposta in questi giorni è no, non dovresti. Se si è preoccupati per i pacchetti che è necessario scomparire, è necessario creare un mirror NuGet locale di cui eseguire il backup separatamente.


6
Sono su VS2015 (considera che VS2017 è stato rilasciato solo 3 giorni prima di aver scritto questa risposta) e la cartella del pacchetto è presente nella mia radice della soluzione. Sono curioso di sapere come e quando NuGet è cambiato.
Teejay,

NuGet è cambiato con la versione 3, che è stata rilasciata fuori banda durante il periodo di tempo VS2015.
Sebastian Redl,

Ho appena controllato sul mio computer di lavoro e i pacchetti sono quelli che hai menzionato. Ma sul mio computer di casa sono nella directory del progetto. Entrambi sono su VS2015 (professionale @ lavoro, comunità @ casa) e quello domestico è un'installazione molto recente ... È strano.
Teejay

12
Ho appena installato VS 2017 la scorsa settimana, ieri ho creato un nuovo progetto e nel mio progetto c'è una directory dei pacchetti.
Jeremy

2
Cosa fai per CI? lo fai Scarica tutti i pacchetti nuget ancora e ancora? (TBH: Io stesso non sono molto chiaro quale sia la mia opinione)
Tomer W

50

Dipende.

Controlla la risposta di Bart van Ingen Schenau per determinare se è possibile ignorare la packagescartella.

Fondamentalmente: sì, NuGet è progettato in modo da poter ignorare la packagescartella e NuGet estrarrà tutto da Internet se manca.

Ma dovresti ignorarlo? Dico: dipende.
IMO è una questione di "possiamo continuare a lavorare nel caso in cui il repository di pacchetti non sia disponibile" (sia temporaneamente che permanentemente)

Per i miei progetti OSS personali, ho la packagescartella ignorata in tutti.
Quando nuget.org è offline, aspetterò e continuerò un altro giorno.

Ma è qualcosa di diverso al lavoro.
Certo, probabilmente hai ancora i pacchetti localmente su qualche macchina, ma stai risparmiando un po 'di spazio vale la pena quando le tue build si rompono perché il tuo server di build non può raggiungere nuget.org?

Abbiamo deciso che lo spazio è economico e non vogliamo la seccatura, ecco perché stiamo affidando la packagescartella al controllo del codice sorgente.


1
Con quale frequenza nuget.org non è disponibile?
Bartosz,

4
Probabilmente non molto spesso. Ma forse avrei dovuto dire "irraggiungibile" anziché "offline". Alcuni anni fa, abbiamo avuto un incidente sul lavoro in cui un escavatore ha accidentalmente tagliato il cavo Internet al nostro edificio. Ci sono voluti più di un giorno per riparare. Se avessimo fatto affidamento su nuget.org, non saremmo stati in grado di costruire i nostri progetti. (sì, lo so, oggigiorno NuGet memorizza nella cache i pacchetti localmente ... ma non allora)
Christian Specht

Dirò che i tempi di compilazione sono molto più lunghi quando non si accede alla cartella dei pacchetti perché trascorre la maggior parte del tempo di generazione a recuperare i pacchetti durante il ripristino dei pacchetti.
AaronLS,

29

La regola di base per ciò che va in un repository di controllo del codice sorgente è che lì si memorizza tutto ciò che riguarda un progetto di cui è necessario essere in grado di costruire, testare, distribuire ed eseguire il progetto e che non può essere generato da elementi già presenti nel repository .

In altre parole, se puoi eliminare la cartella PACCHETTO e il suo contenuto senza influire sulle tue capacità, continua a lavorare sul progetto (la creazione potrebbe richiedere più tempo, ma non devi cercare e installare nulla da solo), quindi la cartella può essere tranquillamente lasciato fuori dal repository.
Se la cartella contiene pacchetti di terze parti che potrebbero richiedere molto tempo per il download o che potrebbero non essere disponibili, potrebbe essere un motivo per aggiungerli al repository.


20
Vorrei aggiungere che dovresti conservare una versione di qualsiasi codice di terze parti utilizzata nel progetto in modo sicuro, nel caso in cui il progetto di terze parti venga rimosso, il sito che lo ospita è andato ecc. Un buon posto per farlo è nel tuo repository di controllo della versione . Ciò ti dà anche l'opportunità di ripristinare una versione precedente di quel codice, se necessario.
Piegato il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.