Como ya sabrás, git es uno de los controladores de versiones más utilizados y extendidos. Aunque hay ciertas pautas para hacer las cosas, a veces puede que quieras saltarte un poco lo habitual y hacer algo como sustituir un tag remoto con otro contenido en git.
Este caso me lo he encontrado hace poco, y es que teniendo una rama con un tag determinado en producción, lo más fácil era sustituir el contenido de dicho tag, para que desde jenkins (hablaré en otro post), se pudiera regenerar una versión actualizada con algunos parches específicos.
Cómo reemplazar un tag remoto con Git
Si eres de los que suele usar una interfaz gráfica como Gitkraken para estas cosas, lo siento, porque lo vamos a hacer desde la consola de comandos.
Al hacerlo desde consola lo puedes hacer tanto en Windows, como Linux o Mac, solo tienes que usar un terminal y estar en la carpeta donde tienes el repositorio con el que quieres trabajar.
En el tuto voy a usar estos nombres:
- origin: para el repositorio remoto
- hotfix/produccion: nombre del tag que queremos sustituir (sí, tiene / en el nombre, pero así verás que incluso si tienes tags barras también te vale)
Un poco de Git
Al usarlo desde consola, tendrás que escribir todo a mano, y no viene mal una pequeña introducción a lo que vamos a usar:
- git es el comando principal
- -f o –force sirve para forzar la sustitución, ya que sino te suelta un error como que ya existe
- push es la acción que vamos a hacer mandando al servidor remoto lo que tenemos en local
Eliminar un tag remoto en git
Son varios pasos a seguir, y sí, tocará primero eliminar el repositorio del servidor remoto, por lo que es conveniente que tengas la rama actual como quieres que quede el tag remoto. En mi caso, esta rama está bloqueada desde la puesta en producción de dicho tag, por lo que basta con hacer:
git checkout turama
Y seguir desde ahí, en mi caso solucionando un par de bugs, pero sin tocar nada más. Por supuesto no te olvides de pasar los tests y pruebas necesarias para asegurarte de que todo está en orden.
Ahora toca eliminar el tag remoto con el comando git push origin :refs/tags/<tagname>, así que haremos:
git push origin :refs/tags/hotfix/produccion
Resultado:
To git@servidorgit.git:equipo/repositorio.git - [deleted] hotfix/produccion
Esto confirma que se ha borrado correctamente y que todo va bien.
Cómo subir un tag a git desde consola
Ahora solo te queda volver a subir otro tag con el mismo nombre que el que tenías.
Antes de eso tienes que crearlo en local, y vamos a sustituir el que ya tengas, de ahí el -f. En este caso usaremos el comando git tag -fa <tagname> o en mi ejemplo:
git tag -fa hotfix/produccion -m “detalles del tag que se pueden cambiar luego”
Resultado:
Updated tag 'hotfix/produccion' (was g4402jf) Push the tag to the remote origin
Ahora ya está listo para que lo puedas mandar al servidor remoto con el último comando git push origin –tags, en este caso:
git push origin master --tags
Respuesta:
Counting objects: 1, done. Writing objects: 100% (1/1), 277 bytes | 0 bytes/s, done. Total 1 (delta 0), reused 0 (delta 0) To git@github.com:equipo/repositorio.git * [new tag] hotfix/produccion -> hotfix/produccion
Las respuestas son lo que irá apareciendo en la consola de comandos después de que ejecutes los comandos indicados.
De todas formas, si tu caso es algo más complicado, o necesitas ayuda sobre cómo hacerlo, puedes dejar un comentario, me lo explicas y te echo un cable.
Resúmen git push origin :refs/tags/<tagname> git tag -fa <tagname> git push origin --tags
¿Sueles usar git? ¿Hace cuanto y por qué? Comenta y comparte