Si vous le faites: git describe --long
vous obtenez: 0.3.1-15-g3b885c5
C'est la signification de la chaîne ci-dessus:
Tag-CommitDistance-CommitId ( http://git-scm.com/docs/git-describe )
Comment diviseriez-vous la chaîne pour obtenir le premier (Tag) et le dernier (CommitId) élément?
En utilisant String.split()
avec le paramètre count pour gérer les tirets dans le commitid:
$x = "0.3.1-15-g3b885c5"
$tag = $x.split("-",3)[0]
$commitid = $x.split("-",3)[-1]
Remarque : Cette réponse se concentre sur l'amélioration de la division en jetons par - -
approche de réponse utile d'Ocaso Protal .
Cependant, cette approche n'est pas entièrement robuste , car les noms de balises git
peuvent eux-mêmes contenir -
, vous ne pouvez donc pas supposer aveuglément que la première instance de -
termine le nom complet de la balise.
Pour tenir compte de cela, utilisez plutôt la solution robuste de Richard
Juste pour offrir une variante plus idiomatique PowerShell:
$tag, $commitId = ('0.3.1-15-g3b885c5' -split '-')[0, -1]
-split
opérateur de PowerShell est utilisé pour diviser la chaîne d'entrée en un tableau de jetons par séparateur -
Bien que la fonction .Split()
méthode du type [string]
Soit suffisante ici, -split
Offre de nombreux avantages dans général .
[0, -1]
Extrait le premier (0
) Et le dernier (-1
) Élément du tableau renvoyé par -split
Et les renvoie sous la forme d'un tableau à 2 éléments.
$tag, $commitId =
Est une affectation de déstructuration qui affecte les éléments du tableau à 2 éléments résultant à une variable chacun.
Je ne me souviens pas si les tirets sont autorisés dans les balises, donc je suppose qu'ils le sont, mais n'apparaîtront pas dans les deux derniers champs.
Donc:
if ("0.3.1-15-g3b885c5" -match '(.*)-\d+-([^-]+)') {
$tag = $Matches[1];
$commitId = $Matches[2]
}