[devel] Как сделать репозиторий в git

Anton Farygin =?iso-8859-1?q?rider_=CE=C1_altlinux=2Ecom?=
Чт Апр 27 10:15:35 MSD 2006


Dmitry V. Levin wrote:
> On Wed, Apr 26, 2006 at 10:46:06PM +0400, Anton Farygin wrote:
>> Интересно было бы взглянуть на:
>> 1) формат buildspec
> 
> Тот формат, который сформировался на сегодняшний день, устроен следующим
> образом.
> 
> buildspec - простой текстовый файл, обрабатываемый построчно.
> Каждая строка имеет вид "директива: параметры"
> Директивы такие: spec, copy, gzip, bzip2, tar, tar.gz, tar.bz2
> - т.е. кажется всё, что нужно для извлечения из репозитория.
> 
> Параметр spec: путь_к_файлу
> Параметры copy|gzip|bzip2: glob_pattern..
> Параметры tar|tar.gz|tar.bz2: путь_к_каталогу [options]
>   где options это
>     spec=путь_к_файлу - путь к specfile'у, из которого можно извлечь имя
>       и/или версию для тарболла;
>     name=имя_архива - имя для тарболла;
>     version=версия_архива - версия для тарболла.
> 
> Фраза "spec-файл, из которого можно извлечь имя" означает, что команда
> sed '/^Name:[[:space:]]*/!d;s///;q' <spec-файл
> выводит нормальное имя.  Имя называется нормальным, если не содержит
> недопустимых символов.
> Аналогично трактуется и фраза про версию.
> 
> Примеры я уже приводил в этом треде.  Могу ещё придумать, если нужно.

Вопрос: если я правильно понял, то .buildspec будет распарсиваться неким 
скриптом на стороне сервера (или локально?)

А можно ли предложить какой-то инструмент, для сборки пакета из 
локальной копии репозитария, минуя hasher ?

Т.е. - я очень много собираю без hasher'а, прямо в локальной системе.
> 
>> 2) типовой набор команд для того, что бы с этим работать
> 
> $ git2tar -h
> git2tar - make tarball from git package repository.
> 
> Usage: git2tar [options] <path-to-git-directory> <output-tarball-name>
> 
> Options:
>   -b, --buildspec=FILENAME          buildspec file name;
>   --bzip2                           compress output archive using bzip2;
>   --gzip                            compress output archive using gzip;
>   -t, --tree-ish=ID                 tree, commit or tag object name;
>   -q, --quiet                       try to be more quiet;
>   -v, --verbose                     print a message for each action;
>   -V, --version                     print program version and exit;
>   -h, --help                        show this text and exit.
>     
> Т.е. есть простая утилита, у которой на входе git-репозиторий и tree-ish
> (по умолчанию --tree-ish=HEAD) и на выходе tarball специального вида, из
> которого hasher скоро научится собирать пакеты.
> 
> Ещё раз обращаю внимание: собирать пакеты надо из того, что есть в
> репозитории, а не из неза'commit'енного checkout'а.  Те, кто хоть немного
> представляют себе, как устроен git, согласятся, что это не создаст
> дополнительных сложностей.  Зато появится одно полезное свойство - вряд ли
> удастся забыть за'commit'ить нужное изменение.
> 
>> - если я правильно понял, то предполагается каждый пакет держать в 
>> отдельном GIT репозитарии.
> 
> Несомненно.  Я не вижу других вариантов.
> 
>> Вопрос собственно простой: каким образом
> 
> Я пока не определился, как именно будет устроен центральный репозиторий
> для Sisyphus.  Тут есть варианты, надо понять, на чём остановиться.
> Я сейчас занимаюсь доработкой попакетного репозитория, объединительные
> репозитории - это следующий этап.

Ясно. Меня в большей степени интересует вопрос с объединением. И с 
правами доступа к каждому из пакетов (желательно что бы права доступа 
были в достаточной мере открыты - что-то вроде teams по интересам).

> 
>> 1) скачать все пакеты
> 
> Скачать список всех пакетов.
> Скачать (git-clone, git-fetch, etc) каждый пакет из списка.
> 
>> 2) добавлять пакеты в центральный репозиторий
> 
> Видимо примерно так же, как и обновлять их (git-push).
> 
>> 3) удалять пакеты из центрального репозитория
> 
> Не думаю что удалить каталог это проблема. :)
> 
>> 4) обновлять весь центральный репозиторий (можно конечно сделать for i 
>> in *;do... done, то на мой взгляд в этом случае мы не отследим 
>> добавление/удаление пакетов.
> 
> Весь репозиторий - это каталог с репозиториями.  Можно использовать
> какой-нибудь dumb transport (e.g. rsync), можно прочитать список и сделать
> git-pull для каждого.
> 


И ещё пока вспомнил: крайне желателен инструмент, позволяющий закачивать 
  в git большие тарболлы минуя commit (или каким-то средством на стороне 
сервера).

Поясню:

например есть необходимость положить в git приложение, исходник которого 
в распакованном виде занимает 600Mb (например - openoffice.org).

в случае с тарболлом, который нужно из локального репозитария залить на 
сервер - трафик составит 600Mb исходящий (если не использовать сжатие на 
уровне ssh).

При этом у мантейнера канал может быть достаточно дохлый (например модем 
или gprs).

Было бы очень здорово предоставить инструмент, который смог бы:
- выкачивать файл с заданного URL
- проверять md5sum
- распаковывать
- коммитить

Rgds,
Rider



Подробная информация о списке рассылки Devel