43 votes

Existe-t-il une seule commande Git pour obtenir la balise, la branche et le commit en cours?

Je suis actuellement en utilisant une collection de trois commandes pour obtenir la balise courante, de la direction et de la date et SHA1 de la plus récente s'engager.

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

Qui va afficher quelque chose comme:

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

Pour être honnête, je suis tout à fait bien avec cette. Mais je suis en utilisant ces commandes à partir de Maven et toute personne qui utilise Maven avant, sait beaucoup de choses comme des commandes externes gonfler le POM. J'ai juste envie de mincir mon pom.xml et peut-être réduire le temps d'exécution un peu.

52voto

Jeet Points 10514
  1. git log est extrêmement flexible, avec beaucoup, beaucoup d'options. Vous pourriez ne pas être en mesure de reproduire la sortie exacte des trois commandes ci-dessus, mais vous pouvez venir assez près pour obtenir l'effet que vous avez besoin.

    Par exemple:

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

    produit de la date, SHA-1 et les références symboliques (y compris les balises) de la dernière (la TÊTE) s'engagent à:

    2010-05-20 45bd5e7 (TÊTE, origin/master)

    Après quoi, sans doute, sed et/ou awk ou peut-être Maven-native méthodes peuvent faire la fine-tuning/polissage. Notez qu'une balise particulière est associée à un particulier de s'engager, donc si c'était à trois s'engage avant de la TÊTE qui a été marqué avec, par exemple, "v1.0.0", vous n'allez pas voir "v1.0.0" qui apparaissent ci-dessus.

  2. Une simple commande unique pour fournir un succinct description d'un commit est:

    git describe
    

    qui écrit les dernières applicable tag, le nombre de commits depuis la tagged commettre, et le SHA1:

    v3.3.0-46-g71a77dc

  3. Je ne suis pas du tout familier avec Maven, et n'ai aucune idée de comment il est facile/il est difficile d'exécuter des processus externes, alors je ne suis pas sûr si une des situations suivantes aider d'une quelconque manière, mais j'ai pensé que je pourrais mentionner juste au cas où.

    Pour la fin exacte que vous décrivez, c'est à dire le marquage s'appuie, dans un autoconf/automake cadre, j'utilise en fait quelque chose comme:

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

    qui produit quelque chose de convenable pour virer de bord à l'extrémité d'un chemin d'accès du programme:

    maître-c5282ff

    Une plus longue description, adapté pour inclure un commentaire ou un imprimé identifiant:

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

    produit quelque chose comme:

    maître-c5282ff, Ven Mar 12 22:19:51 2010 -0600

Je pense que jouer avec git log, éventuellement en combinaison avec des outils de traitement de texte/méthodes, vous obtiendrez ce que vous voulez.

10voto

Peter Farmer Points 1506

Je n'utilise pas Maven, donc je ne sais pas comment vous appelez ces commandes, mais ajouter des commandes personnalisées à git est plutôt trivial.

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?

6voto

Koraktor Points 9532

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

Il s'appelle Mavanagaiata , il est à code source ouvert et disponible auprès de Maven Central.

4voto

albfan Points 2333

Mon "repo" pour des choses comme ça, c'est toujours bash_completion. Ok, onglet "onglet" est le moyen bash devient un outil productif, donc, où tout ce que la magie de choses viennent de?

il y a un /etc/bash_completion.d/ répertoire où extensions pour bash completion sont à gauche. il doit y avoir un git fichier exécutable, l'ouvrir et chercher quelque chose comme get_refs(). Si vous lui donnez un chèque, vous trouverez que git décrire et git pour-chaque-ref sont vos amis, laissez-vous tenter quelques exemples:

Une commune des pensions de:

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

Qui est mon vérifié branche?

$ git describe --contains --all HEAD
brunch

Quels sont mes télécommandes?

$ git remote
origin
github

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

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

Quelles sont mes branches locales?

$ git branch
  master
  blaster
* brunch
  lunch

...un plus parseable branches de sortie?

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

Qu'en est-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 le "man pages" pour cette commande, il y a beaucoup plus à l'intérieur!.

3voto

edrabc Points 446

J'ai trouvé ce Plugin Maven: https://github.com/alx3apps/jgit-buildnumberqui semble avoir une bonne remplacement de buildnumber-maven-plugin pour git projets. En outre, il est disponible à partir de Maven Central des Dépôts.

Il fonctionne très bien dans Maven 3. Pour Maven 2 multi-projets de module, il suffit d'ajouter la ligne suivante dans la section propriétés de votre parent pom:

<session.executionRootDirectory>${basedir}</session.executionRootDirectory>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X