Git и упаковка: общий шаблон, чтобы не мешать файлам упаковки?

В последнем проекте на Python, который я разработал, я использовал git в качестве системы управления версиями. Сейчас настало время цикла разработки, когда я должен начать рассылать пакеты бета-тестерам (в моем случае это будут пакеты .deb).

Для сборки пакетов мне нужно несколько дополнительных файлов (copyright, icon.xpm, setup.py, setup.cfg, stdeb.cfg и т. д.), но я хотел бы хранить их отдельно от исходного кода программы. , так как исходный код может быть использован для подготовки пакетов для других платформ, и не имеет смысла оставлять эти специфичные для Debian файлы.

Мой вопрос: есть ли стандартный способ/лучшая практика для этого? В своих странствиях по Google я пару раз спотыкался (в том числе здесь на SO) на git-buildpackage, но я не уверен, что это то, что я ищу, так как кажется, что это предназначено для упаковщиков, загружающих tar.gz из вышестоящего репозитория.

Я подумал, что возможным способом достижения того, чего я хочу, будет создание ветки в репозитории git, где я храню файлы упаковки, но эта ветка также должна иметь возможность «видеть» файлы в основной ветке без меня. приходится каждый раз вручную сливать мастер в ветку упаковки. Тем не мение:

  • Я не знаю, хорошая ли это идея / как это должно быть сделано
  • Хотя я подозреваю, что это может быть связано с некоторой git symbolic-ref магией, я понятия не имею, как сделать то, что я себе представлял.

Любая помощь приветствуется, заранее спасибо за ваше время!


person mac    schedule 13.09.2011    source источник


Ответы (3)


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

Что вы, скорее всего, захотите сделать, так это создать подкаталог для всех этих конкретных файлов дистрибутива, скажем, ./debian или ./packaging/debian, и зафиксировать их там; У вас может быть make-файл или что-то подобное, который при запуске в этом каталоге копирует все файлы туда, где они должны быть для создания пакета, и вы будете в отличной форме!

person SingleNegationElimination    schedule 13.09.2011
comment
Здесь есть недоразумение: я не хочу держать файлы вне системы контроля версий, я просто хочу, чтобы они не находились в одной ветке с основным кодом . Причина в том, что если кто-то захочет создать RPM, или pacman, или пакет ‹put-your-pick-here›, файлы debian будут для него только шумом: было бы элегантнее иметь отдельные ветки для каждого типа упаковки. , ИМО. Тем не менее: конечно, скрипт, который копирует/создает/загружает/удаляет, позволяет хранить шумные файлы в подкаталоге. +1 ! - person mac; 14.09.2011
comment
конечной судьбой ветви почти всегда должно быть слияние. С другой стороны, если бы я хотел сделать RPM; и я видел папку для ./packaging с несколькими подпапками, по одной для каждого инструмента упаковки, чтобы шум не был проблемой. На самом деле найти файл спецификации путем поиска по веткам было бы намного сложнее, чем любое решение, которое не работает, если я find . -name \*.spec - person SingleNegationElimination; 14.09.2011
comment
Вы имеете в виду лучшую видимость каталога над отдельной веткой, хотя файлы README рулят! ;) В конце концов, однако, я остановился на make-файле, основанном на команде git archive. Спасибо за ваше время и вклад! - person mac; 23.09.2011

В конце концов я остановился на ветке с make-файлом, так что моя процедура упаковки теперь выглядит примерно так:

git checkout debian-packaging
make get-source
make deb
<copy-my-package-out-of-the-way-here>
make reset

Если вам интересно, вы можете найти полный make-файл здесь (отказ от ответственности: это мой первый make-файл, так что вполне возможно, что это не лучший make-файл, который вы когда-либо видели).

В двух словах, суть «трюка» заключается в директиве get-source, и это использование команды git archive, которая принимает имя ветки в качестве аргумента и создает архив с источник из этой ветки. Вот фрагмент:

# Fetch the source code from desired branch
get-source:
    git archive $(SOURCE_BRANCH) -o $(SOURCE_BRANCH).tar
    tar xf $(SOURCE_BRANCH).tar
    rm $(SOURCE_BRANCH).tar
    @echo "The source code has been fetched."

Надеюсь, это поможет кому-то еще!

person mac    schedule 23.09.2011

Вы можете иметь дополнительные файлы в отдельном репозитории (чтобы они тоже были версионными) и использовать submodules, чтобы использовать его в репозитории исходного кода.

person manojlds    schedule 13.09.2011
comment
По сути, это похоже на тот же подход, что и в git-buildpackage: наличие отдельного репо для сборки, но это не то, что я ищу. Если это вообще возможно, я хотел бы иметь отдельные ветки в одном и том же репо... Есть ли способ добиться этого? - person mac; 14.09.2011