it-swarm.com.de

Wie bekomme ich eine Liste der neuesten Tags in Remote-Git?

Es gibt viele Methoden, um die neuesten Tags abzurufen, wenn Sie über lokales Git Repo verfügen.

Aber ich möchte eine Liste der neuesten Tags auf Remote-Repo erhalten. 

Ich weiß über "git ls-remote" Bescheid und alles ist gut, wenn Sie Tags wie x.y.z verwenden (wobei x, y, z Zahlen sind). Aber wenn Tags wie "test-x.y.z" und "dev-x.y.z" aussehen, habe ich festgestellt, dass viele "test" -Tags alle neuen "dev" -Tags herausziehen. 

Wie würden Sie das gerne lösen?

35
Psychozoic

Benutzt du Linux? Wenn ja, können Sie diesen Befehl verwenden

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

Es werden Ihnen 10 neueste Tags angezeigt (mit dem Namen dev-x.y.z )

UPD
Sie können dieses Bash-Skript verwenden, um die neuesten Tags abzurufen:

#!/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

Fügen Sie in Array TAGS reguläre Ausdrücke hinzu, die Sie möchten, und Sie erhalten 10 neueste Tags für jeden von ihnen. Wenn Sie mehr oder weniger Tags erhalten möchten, fügen Sie dem Kopfbefehl 'head -n 5' oder 'head -n 15' einfach den Parameter -n hinzu.

Nur für den Fall. Speichern Sie es im Ordner ~/bin (zum Beispiel mit dem Namen git_tags), und fügen Sie dann die Berechtigung für ausführbare Dateien hinzu (chmod + x git_tags). Dadurch können Sie dieses Bash-Skript von jedem Ort aus ausführen (geben Sie einfach git_tags ein).

34
cooperok

ein Typ hat mir diesen Befehl gesagt:

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

und das ist nicht die beste Lösung, aber er öffnete meine Augen mit dem Befehl sort

aber ich würde gerne andere Versionen kennenlernen.

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

Github api verwenden: 

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

Diese beiden erhalten Sie das aktuellste Tag. Sie können die Liste erweitern, indem Sie den Wert unter n für Headpipe ändern. sagen wir mal, um die Top 10 der neuesten Listen zu erhalten head -n10

5
f-society

Mit Git 2.18 (Q2 2018) lernte "git ls-remote" eine Option zum "git ls-remote", eine Option, mit deren Hilfe die Ausgabe basierend auf den angezeigten Referenznamen sortiert werden konnte.

Siehe commit 1fb20df (09 Apr 2018) von Harald Nordgren (HaraldNordgren) .
(Zusammengeführt von Junio ​​C Hamano - gitster - in commit 6c0110f , 8. Mai 2018)

ls-remote: Option '--sort' erstellen

Erstellen Sie eine Option "--sort" für ls-remote, basierend auf der Option von for-each-ref.
Dieses z.B. Ermöglicht die Sortierung von ref-Namen nach Versionssemantik, sodass v1.2 vor v1.10 sortiert wird. 

Schauen Sie sich die for-each-ref --sort-Optionen an, die in Git 2.0 und 2.8 eingeführt wurden, da sie jetzt für git ls-remote --sort gelten.

0
VonC