Existe-t-il une seule commande Git pour obtenir la balise, la twig et la validation actuelles?

J’utilise actuellement une collection de trois commandes pour obtenir la balise actuelle, la twig et la date et le SHA1 de la validation la plus récente.

git describe --always --tag git log -1 --format="%H%n%aD" git rev-parse --abbrev-ref HEAD 

Qui va sortir quelque chose comme:

 1.2.3-5-gdeadbeef deadbeef3b8d90071c24f51ac8f26ce97a72727b Wed, 19 May 2010 09:12:34 +0200 master 

Pour être honnête, cela me convient parfaitement. Mais j’utilise ces commandes de Maven et quiconque a déjà utilisé Maven sait à quel sharepoints choses comme les commandes externes gonflent le POM. Je veux juste réduire mon pom.xml et peut-être réduire un peu le temps d’exécution.

  1. git log est extrêmement flexible, avec de nombreuses options. Vous ne pourrez peut-être pas reproduire le résultat exact des trois commandes ci-dessus, mais vous pourriez vous en approcher suffisamment pour obtenir l’effet dont vous avez besoin.

    Par exemple:

     git log --pretty=format:'%ad %h %d' --abbrev-commit --date=short -1 

    produit la date, SHA-1 et les références symboliques (y compris les balises) du dernier commit (HEAD):

    2010-05-20 45bd5e7 (HEAD, origine / master)

    Après quoi, les méthodes sed et / ou awk ou peut-être natives de Maven peuvent être utilisées pour le réglage / le polissage. Notez qu’une balise particulière est associée à un commit particulier. Par conséquent, si trois commits étaient antérieurs à HEAD avec, par exemple, “v1.0.0”, vous ne verrez pas “v1.0.0” apparaître avec au dessus.

  2. Une commande simple plus simple pour fournir une description succincte d’un commit est la suivante:

     git describe 

    qui écrit la dernière balise applicable, le nombre de commits depuis la validation étiquetée et le SHA1:

    v3.3.0-46-g71a77dc

  3. Je ne suis pas du tout familier avec Maven et je n’ai aucune idée de la facilité ou de la difficulté à exécuter des processus externes. Je ne suis donc pas certain que l’aide suivante puisse être utile, mais j’ai pensé le mentionner au cas où.

    Pour le but précis que vous décrivez, à savoir les balises, dans un framework autoconf / automake, j’utilise quelque chose comme:

     BUILDTAG="`git symbolic-ref HEAD 2> /dev/null | cut -b 12-`-`git log --pretty=format:\"%h\" -1`" 

    ce qui produit quelque chose de adapté à la fin d’un programme:

    maître-c5282ff

    Une description plus étendue, appropriée pour inclure comme commentaire ou identifiant imprimé:

     BUILDDESC="$(git symbolic-ref HEAD 2> /dev/null | cut -b 12-)-$(git log --pretty=format:'%h, %ad' -1)" 

    produit quelque chose comme:

    master-c5282ff, ven 12 mars 22:19:51 2010 -0600

Je pense que jouer avec git log , éventuellement en conjonction avec des outils / méthodes de traitement de texte, vous permettra d’obtenir ce que vous voulez.

Je n’utilise pas Maven, donc je ne sais pas comment vous appelez ces commandes, mais append des commandes personnalisées à git est assez sortingvial.

Créez un script appelé git-tbc qui ressemble à ceci:

 #!/bin/bash git describe --always --tag git log -1 --format="%H%n%aD" git rev-parse --abbrev-ref HEAD 

Assurez-vous que git-tbc est dans votre PATH, vous pouvez maintenant appeler “git tbc”. Est ce que c’est ce que vous recherchiez?

J’ai créé un plugin Maven exactement à cette fin, ce qui correspond vraiment à mes besoins (en fait, il les dépasse déjà).

Il s’appelle Mavanagaiata , il est open-source et disponible auprès de Maven Central.

Mon “repo” pour des choses comme ça est toujours bash_completion . Ok, “tab tab” est la façon dont bash devient un outil productif, alors, d’où viennent tous ces trucs magiques?

il y a un répertoire /etc/bash_completion.d/ où les extensions pour la complétion de bash sont laissées. il doit y avoir un fichier exécutable git, ouvrez-le et cherchez quelque chose comme get_refs (). Si vous cochez, vous trouverez que git describe et git for-each-ref sont vos amis, essayons quelques exemples:

Un repo commun:

 $ cd /your/git/repo; git branch -a master blaster * brunch lunch remotes/origin/master remotes/origin/develop remotes/github/master 

Quelle est ma twig vérifiée?

 $ git describe --contains --all HEAD brunch 

Quelles sont mes télécommandes?

 $ git remote origin github 

Quelles sont les twigs sur les télécommandes?

 $ git for-each-ref --format="%(refname:short)" refs/remotes origin/master origin/develop github/master 

Quelles sont mes twigs locales?

 $ git branch master blaster * brunch lunch 

… une sortie de twigs plus analysable?

 $ git for-each-ref --format="%(refname:short)" refs/heads master blaster brunch lunch 

Qu’en est-il des tags?

 $ git for-each-ref --format="%(refname:short)" refs/heads refs/remotes refs/tags master blaster brunch lunch origin/master origin/develop github/master release-0_1 release-0_2 release-1_0 

vérifiez les “pages de manuel” pour ces commandes, il y a beaucoup plus à l’intérieur!

J’ai trouvé ce plugin Maven: https://github.com/alx3apps/jgit-buildnumber , qui semble être un bon remplacement du buildnumber-maven-plugin pour les projets git . En outre, il est disponible dans les repositorys centraux de Maven.

Cela fonctionne bien dans Maven 3 . Pour les projets multi-modules Maven 2, ajoutez simplement la ligne suivante dans la section des propriétés de votre pom parent:

 ${basedir} 

Cela affiche l’ID de validation de HEAD, ainsi que toutes les twigs ou tous les tags qui se trouvent exactement à HEAD.

 git reflog --decorate -1 

Sortie de l’échantillon:

 484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD