J'utilise actuellement une collection de trois commandes pour obtenir la balise actuelle, la branche et la date et SHA1 du commit le plus récent.
git describe --always --tag
git log -1 --format="%H%n%aD"
git rev-parse --abbrev-ref HEAD
Qui produira quelque chose comme:
1.2.3-5-gdeadbeef
deadbeef3b8d90071c24f51ac8f26ce97a72727b
Wed, 19 May 2010 09:12:34 +0200
master
Pour être honnête, je suis totalement d'accord avec ça. Mais j'utilise ces commandes de Maven et quiconque ayant déjà utilisé Maven sait combien de choses comme les commandes externes gonflent le POM. Je veux juste affiner mon pom.xml et peut-être réduire un peu le temps d'exécution.
J'ai créé un plugin Maven exactement dans ce but, qui correspond vraiment à mes besoins (en fait, il les dépasse maintenant).
Il s'appelle Mavanagaiata , il est open-source et disponible auprès de Maven Central.
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 pourriez vous rapprocher 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) de la dernière validation (HEAD):
2010-05-20 45bd5e7 (HEAD, Origin/master)
Après quoi, vraisemblablement, sed
et/ou awk
ou peut-être des méthodes natives de Maven peuvent effectuer le réglage fin/polissage. Notez qu'une balise particulière est associée à une validation particulière, donc s'il s'agissait de trois validations avant HEAD qui a été taguée avec, par exemple, "v1.0.0", vous n'allez pas voir "v1.0.0" apparaissant avec ce qui précède.
Une commande simple plus simple pour fournir une description succinte d'un commit est:
git describe
qui écrit la dernière balise applicable, le nombre de validations depuis la validation balisée et le SHA1:
v3.3.0-46-g71a77dc
Je ne suis pas du tout familier avec Maven, et je n'ai aucune idée de la facilité/difficulté d'exécuter des processus externes, donc je ne sais pas si l'une des aides suivantes de quelque manière que ce soit, mais j'ai pensé que je pourrais le mentionner juste au cas où.
Dans le but précis que vous décrivez, c'est-à-dire le balisage de builds, dans un cadre autoconf/automake, 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 qui convient pour virer à la fin d'un chemin de programme:
master-c5282ff
Une description plus étendue, appropriée pour inclure en tant que 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 combinaison avec des outils/méthodes de traitement de texte, vous obtiendrez ce que vous voulez.
Je n'utilise pas Maven, donc je ne sais pas comment vous appelez ces commandes, mais ajouter des commandes personnalisées à git est assez 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 CHEMIN, vous pouvez maintenant appeler "git tbc". Est ce que c'est ce que vous recherchiez?
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 toutes ces choses magiques?
il y a un répertoire / etc/bash_completion.d / où les extensions pour l'achèvement de bash sont laissées. il doit y avoir un exécutable de fichier git, ouvrez-le et recherchez quelque chose comme get_refs (). Si vous lui donnez une vérification, vous constaterez 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 succursale cochée?
$ git describe --contains --all HEAD
brunch
Quelles sont mes télécommandes?
$ git remote
Origin
github
Quelles sont les branches des télécommandes?
$ git for-each-ref --format="%(refname:short)" refs/remotes
Origin/master
Origin/develop
github/master
Quelles sont mes succursales locales?
$ git branch
master
blaster
* brunch
lunch
... une sortie de branches plus analysable?
$ git for-each-ref --format="%(refname:short)" refs/heads
master
blaster
brunch
lunch
Et les balises?
$ 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 , ce qui semble un bon remplacement de buildnumber-maven-plugin pour les projets git . De plus, il est disponible auprès des référentiels centraux 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:
<session.executionRootDirectory>${basedir}</session.executionRootDirectory>
Cela affiche l'ID de validation de HEAD, ainsi que toutes les branches ou toutes les balises qui se trouvent également être exactement à HEAD.
git reflog --decorate -1
Exemple de sortie:
484c27b (HEAD, tag: deployment-2014-07-30-2359, master, Origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD