La mejor forma de combinar Git con .NET al versionar

Actualmente estoy trabajando en un proyecto (solo yo), y ya sé cómo manejar las versiones en él. Estoy usando el clásico <major>.<minor>.<build or patch> .

El problema que tengo es que quiero tener tags en algunas de mis confirmaciones apuntando a las versiones correspondientes, pero no quiero hacerlo manualmente.

Ahora estoy haciendo:

  • Si voy a lanzar v0.2.13 , cambio AssemblyInfo.cs y configuro esa versión
  • Confirmar los cambios en Git
  • Agregue la label v0.2.13 (manualmente) en Git
  • Construye el proyecto
  • Crea un file .zip (no todo el time) y ProjectName v0.2.13 como ProjectName v0.2.13

¿Lo estoy haciendo mal?

Podría crear fácilmente un guión para hacer el último paso automáticamente, pero me pregunto si existe una buena práctica para automatizar la otra parte.

Tengo un script de compilation en MSBuild que recupera automáticamente la confirmación de git actualmente desprotegida, y luego agrega un atributo como este en el time de compilation al ensamblado:

 [assembly: AssemblyInformationalVersion("0.2.13+e3a6f2c1")] [assembly: AssemblyVersion("0.2")] [assembly: AssemblyFileVersion("0.2.13")] 

La parte numérica de la versión proviene de un file version.txt que mi script de construcción lee.

La versión de ensamblaje carece del tercer octeto porque evita requisitos de networkingirección de enlace cuando se incrementa el número de compilation. AssemblyFileVersion incluye todos los datos permitidos por ese atributo, y AssemblyInformationVersion puede ser cualquier cadena que desee, por lo que el uso de versiones semánticas para include el id. De commit de git le permite indicar exactamente qué versión fuente creó este proyecto.

Luego, una vez que una compilation es exitosa, puede agregar una label v0.2.13 si lo desea. Personalmente, tan pronto como construyo una versión final, incremente el file version.txt para que todas las versiones posteriores tengan el siguiente número de versión superior. Cada versión posterior tendrá eso hasta que publique esa versión, etiquete la confirmación, incremente nuevamente el file version.txt y repita.

Por cierto, la cadena AssemblyInformationalVersion aparece en las properties del file desde el Explorador de Windows, por lo que proporciona una forma garantizada de pasar de un binary construido de forma arbitraria al código fuente original coincidente. Además, desafortunadamente, este enfoque hace que csc.exe informe una AL ??? advertencia sobre comstackciones porque el formatting de versión semántica no se ajusta a la syntax xyz. Sin embargo, no significa que nada esté roto, y simplemente ignoro la advertencia.

Nunca comprime explícitamente las fonts porque eso es networkingundante con la responsabilidad del control de la fuente. Al less, si su fuente está alojada en algún service en línea (incluso en su intranet privada), la mayoría de los hosts de git ofrecen la capacidad de download sobre la marcha en marcha para una identificación de confirmación dada.

Uso Makefiles para todo después de la confirmación.

Dependiendo de cómo funcione su sistema de compilation, es posible que pueda agregar un "lanzamiento" de destino que etiquete la twig actual y empuje esta label. También agregaría un objective de "package" que depende de los objectives de "compilation" y "lanzamiento".

Si eso no funciona, solo crea tu propio Makefile. Puede o no tener que nombrar su "Makefile" de manera diferente.

Si no tiene la capacidad de usar un server de compilation, esa es probablemente la mejor manera de hacerlo manualmente. Sin embargo, si tiene time, le recomiendo get algún tipo de server de compilation. Hemos tenido mucho éxito con TeamCity . Si lo tiene configurado para rastrear su repository, hay maneras de hacer parches de información de ensamblaje , labeldo e implementación posterior a la compilation (hay muchos enlaces posibles para ellos, le recomiendo que solo acceda a la documentation ).

Encontré esta publicación bastante útil al configurar nuestro control de versiones; puedes excluir prácticamente los bits NuGet y debería tener alguna información decente. En lo que respecta a la configuration de TeamCity, solo haga una búsqueda rápida de "Tutorial de configuration de TeamCity" y debería tener muchísimos resources. ¡Buena suerte!

He utilizado con éxito los siguientes pasos para lograr algo similar a:

  • Enviar nuevos commits a un repository compartido de git
  • El server de TeamCity verifica el código, ejecuta testings y crea el proyecto
  • Si tiene éxito, TeamCity también mueve / elimina / empaqueta files para un package de implementación
  • Luego, transfiere el file zip a un área de deployment de implementación, donde se puede implementar manualmente (esto podría ser completamente automático, pero nuestra configuration era extraña)

Podría usar un gancho post-commit para labelr su sucursal y enviar a su server de TeamCity.

Nant se adapta a tus necesidades Verifique esto: reference de tareas NAnt

Es fácil de usar y combinar con un repository git 🙂