2012-09-13 21 views
17

Nuestro equipo ha experimentado con los submódulos de git para algunas funciones básicas de CRUD compartidas por la mayoría de nuestros productos. También hemos utilizado con éxito los paquetes Nuget (autohospedados ahora) para algunas utilidades comunes.Submódulos de Git frente a los paquetes de Nuget

Nuestra funcionalidad central cambia con la frecuencia suficiente para mantener los submódulos correctamente comprometidos y está demostrando ser una tarea ardua que esperábamos. Estoy considerando mover la funcionalidad principal de un submódulo a un paquete Nuget, pero me pregunto si las actualizaciones frecuentes de los paquetes serían aún más difíciles en Nuget.

¿Alguien tiene alguna experiencia y orientación sobre qué otros desafíos podría enfrentar antes de realizar este cambio ligeramente intrusivo en nuestra arquitectura y proceso?

+0

SourceTree detectará automáticamente que los submódulos contienen ediciones no confirmadas y le pedirá que las confirme en cualquier momento que confirme el proyecto principal. –

+0

Me pregunto con qué terminas?Pensamos en pasar de Nuget a los submódulos de git. No me gusta que nuestros paquetes Nuget no contengan archivos pdb (para disminuir el tamaño). La eliminación de facturas es complicada. Cómo sería bueno tener todos los proyectos en una solución en la que pueda intervenir cuando depure. Otro problema potencial es el tamaño de almacenamiento. Usamos sonatype nexus y necesitamos tener una política de retención casi indefinida para los paquetes, ya que algunos paquetes pueden ser necesarios si tienen 10 años. Debido a estas dependencias cruzadas del paquete, los archivos/paquetes nuget tendrán dlls repetidos. Temeroso de que requeriría mucho espacio – user1325696

Respuesta

3

Como con cualquier cosa, depende. ¿Ha considerado utilizar un repositorio de paquetes de CI separado donde cada compromiso con el módulo central produce un paquete de CI?

El mayor desafío es el versiono de paquetes , ya que NuGet no es compatible con SemVer en toda su extensión (por ejemplo, versiones preliminares + número de compilación) .

EDITAR: nuget.org ahora es compatible con las versiones del paquete SemVer 2.0. Ver esta especificación: https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29

Use SemVer correctamente. Por lo general, no se conoce el número de versión publicado por adelantado, por lo que su versión del paquete CI continúa desde la última versión estable. Los paquetes de CI como tales se deben considerar pre-lanzamientos.

Por ejemplo: 2.2.0-CI201209140650 (que es una versión de CI tomada el 2012-09-14 a las 06:50 para una próxima versión 2.2.0) < - nota: esta versión de lanzamiento todavía puede cambiar, pero siempre va a haber una ruta de actualización.

Si adopta SemVer v2.0.0, incluso puede adoptar el siguiente ejemplo: 2.2.0-CI.2012.09.14.06.50.

Nota importante: nuget.org (y por extensión cualquier otro servidor NuGet/servicio por ahí como MyGet o VSTS) no es compatible con múltiples versiones de los paquetes difieren sólo por la acumulación de metadatos!

Esto me ha funcionado al usar estas restricciones (y algunas configuraciones de compilación apropiadas de TeamCity). Así que en resumen, estos son los problemas:

  • adecuada de versiones
  • recordatorio para seleccionar adecuada origen del paquete (mantienen sus Pqtes CI separadas de pre-prensa y comunicados, aunque técnicamente su paquete de CI es versionado como prelanzamiento)
  • actualizar de un paquete de CI a un prelanzamiento puede ser un problema si la etiqueta de prelanzamiento está ordenada por cadenas más alta que "CI" (por ejemplo, "Alpha"). En este caso: uninstall-package "CI" seguido del paquete de instalación "Alpha".

Espero que ayude!

+0

¿Nuget aún no es compatible con SemVer adecuada? – diegohb

+0

Nuget.org es compatible con SemVer 2.0 en fecha reciente. Actualizaré mi respuesta en consecuencia. Consulte esta especificación para obtener detalles sobre cómo nuget.org admite semver 2.0: https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29 –

Cuestiones relacionadas