Существует ли единственная команда 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

Честно говоря, я соглашаюсь полностью с этим. Но я использую эти команды от Знатока и любого, кто использовал Знатока прежде, знает, насколько вещи как внешние команды чрезмерно увеличивают размер АНГЛИЧАНИНА. Я просто хочу сократить свой pom.xml и возможно уменьшить время выполнения немного.

43
задан Koraktor 17 December 2012 в 21:41
поделиться

2 ответа

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

    Например:

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

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

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

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

  2. Более простая одиночная команда для предоставления краткого описания фиксации:

    git describe
    

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

    v3.3.0-46-g71a77dc

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

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

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

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

    master-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, возможно, в сочетании с инструментами / методами обработки текста даст вам то, что вы хотите.

52
ответ дан 26 November 2019 в 22:54
поделиться

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

Создайте сценарий с именем 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». Это то, что вы искали?

10
ответ дан 26 November 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: