Имитация глобального номера ревизии с помощью git - PullRequest
16 голосов
/ 30 ноября 2009

Как бы я смоделировал глобальное увеличение номера ревизии для каждого коммита в основной строке git?

Итак, после того, как я сделаю коммит, я бы хотел, чтобы скрипт запускал где-то число.

Это позволит мне легко сказать своим клиентам, что функция X была исправлена ​​в git revision XYZ.

Я ищу практический пример сценария, достаточно надежный для обработки толчков и слияний до некоторой степени.

Ответы [ 4 ]

27 голосов
/ 30 ноября 2009

git describe дает описание версии, подобное следующему: v2.0-64-g835c907. Часть v2.0 - это имя последнего аннотированного тега, предшествующего коммиту, 64 - количество коммитов после этого, а 835c907 - сокращенный идентификатор коммита. Это в основном там, чтобы идентифицировать любую ревизию точным и удобным (хотя и техническим) способом.

Примечание : для этого вам понадобится хотя бы один аннотированный тег. Чтобы создать его для версии v2.0, запустите - git tag -a v2.0, если у вас нет аннотированных тегов, эта команда не будет выполнена, если только не дан запасной аргумент, такой как --tags или --always.

9 голосов
/ 30 ноября 2009

В git можно смоделировать номер ревизии, однако важно знать, что это не идеальное совпадение и его не так просто отследить. Лично я использую его, чтобы сделать более простые номера ревизий для веб-приложения, потому что я единственный разработчик. Я использую следующую функцию в моем .bashrc, чтобы получить номер редакции, который я затем использую для заметок о выпуске (однако, если вы еще этого не сделали, я настоятельно рекомендую пометить выпуск - тогда номер предназначен только для пользователей). Если ограничения хорошо известны, это дает гораздо более удобный для человека номер ревизии.

function rgit() {
    git rev-list --abbrev-commit HEAD | wc -l | awk '{print $1}'
}
6 голосов
/ 30 ноября 2009

Я думаю, вы путаете номера ревизий с номерами релизов.

Subversion использует номера ревизий, потому что может: это централизованное хранилище. Git, конечно, имеет хэши SHA-1, а не номера ревизий, потому что у него нет центрального хранилища (но вы это знаете).

Этот номер ревизии (а технически хеш - это 160-битный номер, он просто не последовательный) не должен беспокоить ваших клиентов. То, что они должны быть обеспокоены, является номером выпуска. Именно тогда вы упаковываете свой исходный код и говорите: «Это версия 2.3.4», вместе с примечаниями к выпуску, чтобы сказать, что изменилось.

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

1 голос
/ 30 ноября 2009

Я (не зная git describe) использовал следующий скрипт:

#!/bin/bash

FULL_BRANCH=`git branch | grep '*'`
BRANCH_NAME=${FULL_BRANCH:2}
REV=`git rev-parse --short HEAD`

$COMMIT_NAME = $BRANCH_NAME-$REV

Это дает вам имя, которое содержит имя текущей ветви, за которым следует короткий идентификатор фиксации. Например: master-c03f862.

Достаточно сделать то, что вам нужно, но, возможно, git describe - правильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...