Подтвердить что ты не робот

Есть ли одна команда Git для получения текущего тега, ветки и фиксации?

В настоящее время я использую коллекцию из трех команд для получения текущего тега, ветки и даты и SHA1 последней фиксации.

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

Что выведет что-то вроде:

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

Честно говоря, я в полном порядке с этим. Но я использую эти команды от Maven и всех, кто раньше использовал Maven, знает, как много таких вещей, как внешние команды, раздувают POM. Я просто хочу уменьшить размер pom.xml и немного сократить время выполнения.

4b9b3361

Ответ 1

Я создал плагин Maven именно для этой цели, который действительно соответствует моим потребностям (на самом деле он теперь их превосходит).

Он называется Mavanagaiata, с открытым исходным кодом и доступен из Maven Central.

Ответ 2

  • git log чрезвычайно гибкий, с множеством опций. Возможно, вы не сможете воспроизвести точный вывод трех приведенных выше команд, но вы можете подойти достаточно близко, чтобы добиться необходимого эффекта.

    Например:

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

    выдает дату, SHA-1 и символические ссылки (включая теги) последнего (HEAD) commit:

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

    После чего, предположительно, sed и/или awk или, возможно, методы Maven-native могут выполнять тонкую настройку/полировку. Обратите внимание, что конкретный тег связан с конкретным коммитом, поэтому, если он был за три месяца до HEAD, который был помечен, например, "v1.0.0", вы не увидите "v1.0.0", выше.

  • Простейшая одиночная команда для предоставления сукцинта описания коммита:

    git describe
    

    который выписывает последний применимый тег, количество коммитов с момента помеченного фиксации и SHA1:

    v3.3.0-46-g71a77dc

  • Я не совсем знаком с Maven и не знаю, как легко/сложно запускать внешние процессы, поэтому я не уверен, что любая из следующих действий в любом случае, но я думал, что могу упомянуть об этом на всякий случай.

    Для конкретной цели, которую вы описываете, т.е. создания тегов, в системе autoconf/automake, я фактически использую что-то вроде:

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

    который создает что-то подходящее для привязки к концу пути программы:

    мастер-c5282ff

    Более подробное описание, подходящее для включения в качестве комментария или печатного идентификатора:

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

    создает что-то вроде:

    master-c5282ff, пт 12 мар 22:19:51 2010 -0600

Я думаю, что игра с git log, возможно, в сочетании с инструментами/методами обработки текста доставит вам то, что вы хотите.

Ответ 3

Я не использую Maven, поэтому я не знаю, как вы вызываете эти команды, но добавление пользовательских команд в git довольно тривиально.

Создайте script, называемый git -tbc, который выглядит так:

#!/bin/bash

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

Убедитесь, что git -tbc находится в вашей PATH, теперь вы можете вызвать "git tbc". Это то, что вы искали?

Ответ 4

Мое "репо" для таких вещей всегда bash_completion. Итак, вкладка вкладки - это способ, которым bash становится продуктивным инструментом, поэтому, откуда берутся все магические вещи?

существует каталог /etc/bash_completion.d/, где остаются расширения для завершения bash. должен быть исполняемый файл git, открыть его и искать что-то вроде get_refs(). Если вы дадите ему чек, вы обнаружите, что git описать и git for-each-ref - ваши друзья, попробуйте несколько примеров:

Общее репо:

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

Какова моя отмеченная ветка?

$ git describe --contains --all HEAD
brunch

Каковы мои пульты?

$ git remote
origin
github

Каковы ветки на пультах?

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

Каковы мои локальные ветки?

$ git branch
  master
  blaster
* brunch
  lunch

... выводится более синтаксический вывод?

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

Как насчет тегов?

$ 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

проверьте "man-страницы" для этих команд, там намного больше!!

Ответ 5

Я нашел этот плагин Maven: https://github.com/alx3apps/jgit-buildnumber, который кажется хорошим заменой для buildnumber-maven- плагин для git проектов. Кроме того, он доступен из центральных хранилищ Maven.

Он отлично работает в Maven 3. Для многомодульных проектов Maven 2 просто добавьте следующую строку в раздел свойств вашего родительского pom:

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

Ответ 6

Здесь отображается идентификатор фиксации HEAD, а также любые ветки или теги, которые также находятся в HEAD.

git reflog --decorate -1

Пример вывода:

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