tag remota rama origin example crear cambiar git maven command-line mavanagaiata

remota - git push example



¿Hay un solo comando de Git para obtener la etiqueta actual, la rama y el compromiso? (6)

Actualmente estoy usando una colección de tres comandos para obtener la etiqueta actual, la rama y la fecha y SHA1 de la confirmación más reciente.

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

Que dará como resultado algo como:

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

Para ser sincero, estoy totalmente de acuerdo con esto. Pero estoy usando estos comandos de Maven y de cualquier persona que haya usado Maven antes, sabe cuánto cosas como comandos externos inflan el POM. Solo quiero adelgazar mi pom.xml y quizás reducir un poco el tiempo de ejecución.


  1. git log es extremadamente flexible, con muchas y muchas opciones. Es posible que no pueda reproducir la salida exacta de los tres comandos anteriores, pero puede acercarse lo suficiente para lograr el efecto que necesita.

    Por ejemplo:

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

    produce la fecha, SHA-1 y las referencias simbólicas (incluidas las etiquetas) de la última confirmación (HEAD):

    2010-05-20 45bd5e7 (CABEZA, origen / maestro)

    Después de lo cual, presumiblemente, sed y / o awk o quizás los métodos nativos de Maven pueden hacer el ajuste fino / pulido. Tenga en cuenta que una etiqueta en particular está asociada con una confirmación concreta, por lo que si hubo tres confirmaciones antes de HEAD con la etiqueta, por ejemplo, "v1.0.0", no verá aparecer "v1.0.0" con la encima.

  2. Un comando simple más simple para proporcionar una descripción sucinta de una confirmación es:

    git describe

    que escribe la última etiqueta aplicable, el número de confirmaciones desde la confirmación etiquetada y el SHA1:

    v3.3.0-46-g71a77dc

  3. No estoy familiarizado en absoluto con Maven, y no tengo idea de lo fácil / difícil que es ejecutar procesos externos, así que no estoy seguro de si alguna de las siguientes ayudas de alguna manera, pero pensé que podría mencionarlo por las dudas.

    Para el propósito exacto que describes, es decir, el etiquetado de compilaciones, en un marco autoconf / automake, de hecho utilizo algo como:

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

    que produce algo adecuado para virar al final de una ruta de programa:

    master-c5282ff

    Una descripción más extensa, adecuada para incluir como comentario o un identificador impreso:

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

    produce algo como:

    master-c5282ff, vie mar 12 22:19:51 2010 -0600

Creo que jugar con git log , posiblemente junto con herramientas / métodos de procesamiento de texto, te proporcionará lo que deseas.


Creé un plugin Maven exactamente para este propósito, que realmente se ajusta a mis necesidades (de hecho las supera ahora).

Se llama Mavanagaiata , es de código abierto y está disponible en Maven Central.


Encontré este complemento de Maven: https://github.com/alx3apps/jgit-buildnumber , que parece un buen reemplazo de buildnumber-maven-plugin para proyectos de git . Además, está disponible en Maven Central Repositories.

Funciona muy bien en Maven 3 . Para los proyectos de varios módulos de Maven 2, simplemente agregue la siguiente línea en la sección de propiedades de su pom padre:

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


Esto muestra la identificación de confirmación de HEAD, así como cualquier rama o etiqueta que también esté exactamente en HEAD.

git reflog --decorate -1

Muestra de salida:

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


Mi "repo" para cosas como esa siempre es bash_completion . Ok, "tab tab" es la forma en que bash se convierte en una herramienta productiva, entonces, ¿de dónde vienen todas esas cosas mágicas?

hay un directorio /etc/bash_completion.d/ donde quedan extensiones para completar bash. debe haber un archivo ejecutable git, ábralo y busque algo como get_refs (). Si le das un control, encontrarás que git describe y git for-each-ref son tus amigos, vamos a probar algunos ejemplos:

Un repositorio común:

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

¿Cuál es mi rama comprobada?

$ git describe --contains --all HEAD brunch

¿Cuáles son mis controles remotos?

$ git remote origin github

¿Cuáles son las ramas en los controles remotos?

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

¿Cuáles son mis sucursales locales?

$ git branch master blaster * brunch lunch

... una salida de ramas más analizables?

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

¿Qué pasa con las etiquetas?

$ 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

revisa las "páginas man" para estos comandos, ¡hay mucho más adentro!


No uso Maven, así que no sé cómo llamas estos comandos, pero agregar comandos personalizados a git es bastante trivial.

Crea un script llamado git-tbc que se ve así:

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

Asegúrate de que git-tbc esté en tu PATH, ahora puedes llamar a "git tbc". Esto es lo que estabas buscando?