Прикладная демонология, практические рецепты

Зеркалирование и кастомизация портов

Дерево исходных текстов портов FreeBSD располагается в репозитории Subversion и ежечасно автоматически зеркалируется в репозиторий GitHub.
В специальном репозитории GitHub ведется зеркало выбранных веток с возможностью изменения или добавления портов:

git clone git@github.com:lonerr/freebsd-ports.git
git remote add upstream git@github.com:freebsd/freebsd-ports.git

Для автоматического поддержания актуальности зеркала имеется специальный пользователь porter, который обладает правами выполнять git push в GitHub.
Под пользователем porter сначала создается рабочая копия актуальной ветки предназначенная для слияний:

cd /data/ports
git clone -b branches/2015Q3 git@github.com:lonerr/freebsd-ports.git merge/2015Q3
cd merge/2015Q3
git remote add upstream git@github.com:freebsd/freebsd-ports.git

А также, чистая рабочая копия предназначенная для сборки пакетов (так как копия слияний может быть поломанной из-за конфликтов):

cd /data/ports
git clone -b branches/2015Q3 merge/2015Q3 build/2015Q3

Обновление и слияние происходит периодически (crontab) следующим образом:

export b=2015Q3
cd /data/ports/merge/$b
git reset --hard origin/branches/$b
git pull --rebase upstream branches/$b
git push --force origin branches/$b
cd /data/ports/build/$b
git fetch origin
git reset --hard origin/branches/$b