¿Deberíamos incluir la carpeta Nuget PACKAGE en el control de versiones?

68

Me gustaría saber

En el proyecto C # o VB.NET, debemos incluir la carpeta PACKAGE (carpeta del paquete de nugget que se crea en la raíz de mi proyecto que contiene los archivos nupkg y otro contenido) a nuestro repositorio de control de origen (Git, por ejemplo).

Bastien Vandamme
fuente
Absolutamente , porque estos archivos son parte de su código y su proyecto no se compilará sin ellos.
Sharky el
Hice una pregunta similar sobre SO hace mucho tiempo. También puede buscar respuestas: stackoverflow.com/questions/1710027/… :)
cwap
Me pregunto por qué nadie en el mundo de Maven pregunta "deberíamos incluir librerías de terceros en el control de versiones". Encuentre algún contraargumento sólido para NO cometer libs, aunque no sea muy convincente.
Hoàng Long

Respuestas:

28

Ha pasado mucho tiempo y NuGet ha cambiado, así que aquí hay una nueva respuesta.

NuGet ya no crea una carpeta de paquetes dentro de su estructura fuente. En cambio, hay uno en su directorio de usuarios ( %HOME%\.nuget\packagespara ser específico) donde coloca todos los paquetes que descarga y los proyectos solo hacen referencia a estos.

Entonces la respuesta simple en estos días es no, no deberías. Si le preocupan los paquetes que necesita desaparecer, debe crear un espejo NuGet local del que realice una copia de seguridad por separado.

Sebastian Redl
fuente
66
Estoy en VS2015 (considere que VS2017 se lanzó solo 3 días antes de que escribiera esta respuesta), y la carpeta del paquete está presente en la raíz de mi solución. Tengo curiosidad acerca de cómo y cuándo NuGet ha cambiado.
Teejay
NuGet cambió con la versión 3, que se lanzó fuera de banda en algún momento durante el período VS2015.
Sebastian Redl
Acabo de revisar mi computadora de trabajo y los paquetes están donde mencionaste. Pero en la computadora de mi casa están en el directorio del proyecto. Ambos están en VS2015 (profesional @ trabajo, comunidad @ hogar) y el hogar es una instalación muy reciente ... Eso es extraño.
Teejay
12
Acabo de instalar VS 2017 la semana pasada, creé un nuevo proyecto ayer y hay un directorio de paquetes en mi proyecto.
Jeremy
2
¿Qué haces para CI? ¿Lo haces Descargar todos los paquetes nuget una y otra vez? (TBH: yo mismo, no tengo muy claro cuál es mi opinión)
Tomer W
50

Depende.

Vea la respuesta de Bart van Ingen Schenau para determinar si es posible ignorar la packagescarpeta.

Básicamente: sí, NuGet está diseñado para que pueda ignorar la packagescarpeta y NuGet extraerá todo de Internet si falta.

¿Pero deberías ignorarlo? Yo digo: depende.
En mi opinión, se trata de "podemos seguir trabajando en caso de que el repositorio de paquetes no esté disponible" (ya sea temporal o permanentemente)

Para mis proyectos OSS personales, tengo la packagescarpeta ignorada en todos ellos.
Cuando nuget.org esté desconectado, esperaré y continuaré otro día.

Pero es algo diferente en el trabajo.
Claro, probablemente todavía tenga los paquetes localmente en alguna máquina, pero ¿está ahorrando algo de espacio cuando sus compilaciones se rompen porque su servidor de compilación no puede llegar a nuget.org?

Decidimos que el espacio es barato y no queremos la molestia, por eso estamos asignando la packagescarpeta al control de origen.

Christian Specht
fuente
1
¿Con qué frecuencia nuget.org no está disponible?
Bartosz
44
Probablemente no muy a menudo. Pero tal vez debería haber dicho "inalcanzable" en lugar de "fuera de línea". Hace unos años, tuvimos un incidente en el trabajo donde una excavadora cortó accidentalmente el cable de internet a nuestro edificio. Tomó más de un día para reparar. Si hubiéramos confiado en nuget.org, no hubiéramos podido construir nuestros proyectos. (sí, lo sé, hoy en día NuGet almacena en caché los paquetes localmente ... pero no en aquel entonces)
Christian Specht
Diré que los tiempos de compilación son mucho más largos cuando no registras la carpeta de paquetes porque pasa la mayor parte del tiempo de compilación recuperando paquetes durante la restauración de paquetes.
AaronLS
29

La regla básica para lo que entra en un repositorio de control de código fuente es que almacena allí todo lo relacionado con un proyecto que necesita para poder construir, probar, implementar y ejecutar el proyecto y que no puede generarse a partir de elementos ya presentes en el repositorio .

En otras palabras, si puede tirar la carpeta PACKAGE y su contenido sin afectar su capacidad, continúe trabajando en el proyecto (la compilación puede llevar más tiempo, pero no tiene que buscar e instalar nada usted mismo), entonces la carpeta puede quedar seguro fuera del repositorio.
Si la carpeta contiene paquetes de terceros que pueden tardar mucho tiempo en descargarse o que no están disponibles, entonces esa podría ser una razón para agregarlos a su repositorio de todos modos.

Bart van Ingen Schenau
fuente
20
Agregaría que debe mantener una versión de cualquier código de terceros utilizado en el proyecto almacenado de forma segura, en caso de que el proyecto de terceros se elimine, el sitio que lo aloja desapareció, etc. Un buen lugar para hacerlo es en su repositorio de control de versiones . Eso también le da la oportunidad de revertir a una versión anterior de ese código, si es necesario.
Doblado