2009-12-05 5 views
3

Мы используем Git с центральным сервером, и наш код должен включать номер версии в файл. Как это делается в настоящее время, как это:Git Версия нумерации с централизованным рабочим процессом

  1. Новый разработчик делает «мерзавец клон»
  2. В своей локальной копии, он редактирует .git/Крючки/предварительной фиксации для вызова version.sh

version.sh (который включен в корень проекта) принимает номер версии из «git describe» и сохраняет его в файле.

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

Поскольку у сервера нет рабочей копии, просто вызов (pre | post) -receive hooks там не работает, поэтому мне интересно, есть ли способ сделать это.

+0

Если бы вы просветить нас, почему вам нужен номер версии в этом файле, мы могли бы быть в состоянии помочь вам решить реальную проблему, а (я имею в виду, что вам нужно это как часть из binary? Почему бы не вытащить его из git-store и установить его как макрос?) – falstro

+0

Он должен быть в двоичном формате - так что, если бы у нас была процедура сборки, мы могли бы сделать нумерацию там. Тем не менее, я не был бы слишком рад выпустить что-то, что отличается от наших репозиториев. (В настоящее время мы просто создаем архив рабочего дерева - там нет процедуры сборки). – knipknap

ответ

1

Проект x264 автоматически генерирует номер версии путем подсчета git-коммитов в истории. Он перенесен из svn, где, например, версии назывались r678, но кто-то приготовил скрипт для генерации чисел из git.

http://git.videolan.org/?p=x264.git;a=blob;f=version.sh;hb=HEAD

4

Как насчет hooks/update на центральном репо, отвергающие фиксации без изменений в файл версии (названном VERSION в примере ниже)?

#! /bin/bash 

refname="$1" 
oldrev="$2" 
newrev="$3" 

if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then 
    echo "Usage: $0 <ref> <oldrev> <newrev>" >&2 
    exit 1 
fi 

if [ "$refname" != "refs/heads/master" ]; then 
    exit 0 
fi 

if diff -bq <(git show $oldrev:VERSION) \ 
      <(git show $newrev:VERSION) >/dev/null 
then 
    echo "$0: VERSION unchanged; rejecting update" >&2 
    exit 1 
fi 
Смежные вопросы