web-dev-qa-db-fra.com

Comment obtenir la liste des dernières balises dans git distant?

Il y a beaucoup de méthodes pour obtenir les dernières balises lorsque vous avez un repo git local.

Mais je veux obtenir la liste des dernières balises sur le repo à distance. 

Je sais à propos de "git ls-remote", et tout va bien lorsque vous utilisez des balises comme x.y.z (où x, y, z sont des nombres). Mais lorsque les étiquettes ressemblent à "test-x.y.z" et "dev-x.y.z", j'ai remarqué qu'une grande quantité de balises "test" retirera toutes les nouvelles balises "dev", ce qui est incorrect. 

Alors, comment aimerais-tu résoudre ça?

35
Psychozoic

Utilisez-vous linux? Si oui, vous pouvez utiliser cette commande

git ls-remote --tags | grep -o 'refs/tags/dev-[0-9]*\.[0-9]*\.[0-9]*' | sort -r | head | grep -o '[^\/]*$'

Il vous montrera les 10 derniers tags (avec le nom dev-x.y.z )

UPD
Vous pouvez utiliser ce script bash pour obtenir les dernières balises:

#!/bin/bash

TAGS=("dev-[0-9]*\.[0-9]*\.[0-9]*" "test-[0-9]*\.[0-9]*\.[0-9]*" "good-[0-9]*" "new [0-9][0-9][0-9]")

for index in ${!TAGS[*]}
do
    git ls-remote --tags | grep -o "refs/tags/${TAGS[$index]}" | sort -rV | head | grep -o '[^\/]*$'
done

Ajoutez simplement dans le tableau les expressions régulières TAGS de votre choix, et vous obtiendrez les 10 dernières balises pour chacune d’elles. Si vous voulez avoir plus ou moins de tags, ajoutez simplement param -n à la commande head 'head -n 5' ou 'head -n 15'.

Au cas où. Enregistrez-le dans le dossier ~/bin (par exemple, avec le nom git_tags), puis ajoutez une autorisation exécutable (chmod + x git_tags), cela vous permettra d’exécuter ce script bash depuis tous les emplacements (tapez simplement git_tags).

34
cooperok

un gars m'a dit cette commande:

git ls-remote -t repo.url.git | awk '{print $2}' | cut -d '/' -f 3 | cut -d '^' -f 1  | sort -b -t . -k 1,1nr -k 2,2nr -k 3,3r -k 4,4r -k 5,5r | uniq

et ce n'est pas la meilleure solution, mais il m'a ouvert les yeux sur l'ordre sort

mais j'aimerais connaître d'autres versions.

8
Psychozoic
git ls-remote --tags | awk -F'/' '/[0-9].[0-9].[0-9].*/ { print $3}' | sort -nr | head -n1

Utiliser github api: 

curl https://api.github.com/repos/user/repo/tags | jq '.[] .name' | sort -nr | head -n1

Ces deux vous obtiendrez la dernière balise, vous pouvez augmenter la liste en modifiant la valeur à l'indicateur n pour le tuyau d'arrivée Disons, pour obtenir le top 10 des dernières listes head -n10

5
f-society

Avec Git 2.18 (T2 2018), "git ls-remote" a appris une option pour "git ls-remote" a appris une option pour autoriser le tri de sa sortie sur Sur les noms de référence affichés.

Voir commit 1fb20df (09 avril 2018) de Harald Nordgren (HaraldNordgren) .
(Fusion par Junio ​​C Hamano - gitster - in commit 6c0110f , 08 mai 2018)

ls-remote: crée l'option '--sort'

Créez une option '--sort' pour ls-remote, basée sur celle de for-each-ref.
Ceci par exemple permet aux noms de référence d'être triés par sémantique de version, de sorte que v1.2 soit trié avant v1.10

Vérifiez donc les options for-each-ref --sort introduites dans Git 2.0 et 2.8 , car elles s’appliquent maintenant à git ls-remote --sort.

0
VonC