J'écris un script Shell et je cherche à vérifier la dernière version de repo. Plus précisément, je veux diviser ce processus en plusieurs étapes.
Checking out version: XX
J'ai vu questions similaires mais je ne vois pas comment enregistrer le nom de la balise dans une variable (probablement parce que je suis un noob avec des scripts Shell).
git describe --tags
devrait vous donner des informations.
script bash/Shell:
#!/bin/bash
...
latesttag=$(git describe --tags)
echo checking out ${latesttag}
git checkout ${latesttag}
# Get new tags from remote
git fetch --tags
# Get latest tag name
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
# Checkout latest tag
git checkout $latestTag
Dans certains référentiels, le git describe --tags
ne donne aucune info et un simple git tag | tail -1
peut vous procurer la mauvaise balise car git trie les balises d'une manière étrange.
Pour moi, la meilleure commande est une variation de la queue
VERSION = $ (git tag | sort -V | tail -1)
Pour mettre des informations dans une variable, vous lui affectez:
myvar=myvalue
Cependant, vous voulez calculer la valeur à affecter, vous n'affectez pas seulement une constante à la variable. Dans votre cas, vous souhaitez affecter la sortie d'une commande à la variable.
Tout d'abord, vous devez trouver comment obtenir le dernier nom de balise. Je vous laisse le soin, car vous n'avez rien dit sur la façon dont les noms de balises sont créés.
Ensuite, une fois que vous avez une commande qui donne le dernier nom de la balise, vous devez affecter le nom à une variable. Bash fait cela avec la "substitution de commande".
Par exemple: thetagname=$( command_to_get_tag_name )
Donc, si vous deviez simplement prendre la dernière balise qui git des rapports comme celui-ci:
git tag | tail -1
alors vous pouvez l'attribuer à une variable comme celle-ci:
thetagname=$( git tag | tail -1)
et vous pouvez utiliser/voir la valeur comme ceci:
echo $thetagname
ou comme le dit user1281385, comme ceci:
echo ${thetagname}
Les deux méthodes sont identiques, sauf que la deuxième façon vous permet de combiner du texte littéral avec la valeur de la variable:
echo ${thetagname}ing
qui ajoutera "ing" au contenu de $ thetagname. Les accolades sont nécessaires afin d'empêcher bash de penser que "le nom de la variable" est la variable.
La page de manuel bash a une section appelée EXPANSION, dans laquelle elle explique les 7 types d'expansion. La substitution de commandes en fait partie. La page de manuel bash est assez grande et répète en effet tous les mots clés intéressants plusieurs fois, il est donc très ennuyeux de rechercher des éléments dedans. Voici quelques conseils pour trouver la section EXPANSION (et en apprendre un peu plus sur le pager "moins"):
Démarrez le lecteur manuel en lisant la page de manuel bash comme ceci:
man bash
Recherchez le terme "EXPANSION" au début d'une ligne une fois que vous êtes dans le lecteur en tapant /^EXPANSION
Sur l'écran. Une fois que vous avez tapé /
, Vous verrez un/en bas de l'écran, mais la page de manuel sera toujours là. C'est la commande pour rechercher un motif. Ensuite, vous tapez ^EXPANSION
, Et vous le verrez également au bas de l'écran. ^ signifie "rechercher des choses au début de la ligne" et EXPANSION signifie "rechercher la chaîne littérale" EXPANSION ". Tapez ensuite <enter>
- et vous devriez être à la première occurrence du terme EXPANSION qui se produit à Il décrit ici tous les types d'expansion que le shell bash fait sur votre ligne après l'avoir tapée et avant d'exécuter la commande transformée.
Dans le pager, vous pouvez taper h
pour obtenir une liste des commandes possibles.
J'espère que ce n'était pas trop basique. Si vous ne l'avez jamais vu auparavant, c'est difficile à comprendre.
"git tag --contains | tail -1", (git tag --contains) liste toutes les balises de la branche courante, (tail -1) limite le nombre de résultats de sortie à l, et c'est le dernier.