cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

Les outils de gestion de versions permettent de marquer certains Ă©tats afin de retrouver un Ă©tat donnĂ© d’un code source ou une version d’un programme. Pour cela on place une Ă©tiquette sur l’objet Ă  retrouver.


ඏ

Suivant l’outil ou la traduction vous trouverez les mots balise, Ă©tiquette ou tag (version anglaise). Ici nous utiliserons le terme anglais tag puisque c'est le mot clĂ© qu’il faut utiliser avec la commande git.

Voici comment renommer un tag nommé old en tag nommé new, le principe de base est le suivant :

git tag new old
git tag -d  old
git push origin :refs/tags/old
git push --tags

Les deux points de la commande push suppriment le tag du rĂ©fĂ©rentiel distant. Si vous ne le faites pas, git recrĂ©era le tag sur votre machine lorsque vous utiliserez la commande git pull, puisqu’il sera toujours prĂ©sent sur le serveur.

Enfin, assurez-vous que les autres utilisateurs suppriment les tags n’existant plus sur le rĂ©fĂ©rentiel commun (le serveur git). Dites Ă  vos collĂšgues d’exĂ©cuter la commande suivante :

git pull --prune --tags

ඏ

Renommer des tags en masse

Imaginons que vous avez des tags ayant la forme :

rc2.1
rc2.2


rc2.10
rc3.0
rc3.0.1
rc3.3.0
rc3.4.0

et que vous souhaitez avoir un truc du genre project-name-X.Y.Z-rc.

project-name-2.1.0
project-name-2.2.0


project-name-2.10.0
project-name-3.0.0
project-name-3.0.1
project-name-3.3.0
project-name-3.4.0

On va d’abord prendre que les tags qui nous intĂ©ressent, ici on a une fonction qui rĂ©cupĂšre la liste des tags et qui ne garde que ceux qui commencent par « rc » :

function get_tags_to_renames {
  git tag | grep '^rc' | sort
}

Ensuite on Ă©crit une fonction qui rĂ©Ă©crit l’ancien nom dans le nouveau nom. Ici par exemple, on vire le « rc » du dĂ©but, ensuite on compte le nombre de « . » et s’arrange pour qu’il y en ait toujours deux (s’il en manque un on ajoute « .0 »), puis on Ă©crit le nom complet.

function get_new_name {
  local old="$1"

  local version=
  version="$( sort <<<"${old}" | cut -d 'c' -f2- )"

  local norm_version=
  case "$( awk -F'.' '{print NF-1}' <<<"${version}" )" in
    1)
      norm_version="${version}.0"
      ;;
    2)
      norm_version="${version}"
      ;;
    *)
      echo "Error: ${version}" >&2
      return 1
      ;;
  esac

  echo "project-name-${norm_version}-rc"
}

while read -r old ; do
  if [ -n "${old}" ] ; then
    new="$( get_new_name "${old}" )"

    if [ -n "${new}" ] ; then
      echo "$old -> $new"

      git tag "${new}" "${old}"
      git tag -d "${old}"
      git push origin ":refs/tags/${old}"
    fi
  fi
done < <( get_tags_to_renames )

git push --tags

Notez que si vous modifiez un tag annotĂ©e, vous devez vous assurer que le nouveau nom du tag fait rĂ©fĂ©rence Ă  la validation sous-jacente et non le vieil objet de balise annotĂ© que vous ĂȘtes sur le point de supprimer. Par consĂ©quent, utilisez git tag -a new old^{} Ă  la place de git tag new old (car les tags annotĂ©es sont des objets alors que les tags lĂ©ger ne le sont pas).


ඏ

Références

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog