Переход на SVN. Заметка.
Добавлено: 2013-04-19 10:49:05
В связи с тем, что проект FreeBSD окончательно перешел на SVN, небольшая заметка на тему что это такое и как этим пользоваться. Я не претендую на полное описание SVN. Это не более, чем краткий справочник использования SVN в контексте исходных кодов FreeBSD.
Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.
wikipedia(c)
Русским языком SVN - это некая база для хранения файлов с историей их изменений и комментариями. Основная целевая аудитория - разработчики, которые используют ее для хранения исходных текстов программ и истории изменения.
SVN можно условно разделить на клиентскую часть и серверную. Серверная - локально хранит исходники, историю и т.п. Клиент же только получает необходимые файлы с сервера.
Для рядового обновления нескольких серверов, я думаю, нет смысла держать полную копию у себя (ставить серверную часть). Можно просто ограничиться скачиванием необходимых файлов.
Установка SVN сервера с использованием уже имеющейся базы. Для настройки сервера используется утилита svnsync.
1. Качаем SVN базу с
Например, если мы хотим держать порты, качаем svnmirror-ports-r301235.tar.xz. Аналогично для исходников и документации.
2. Распаковываем ее в папку, где будет лежать база. Назовем ее, наример, /var/svn/
3. Обновляем базу до текущей версии. Сервер, откуда обновляться, уже установлен.
Можно посмотреть, что получилось
4. Теперь раздаем базу. Рпздавать можно через модуль apache - mod_dav_svn ( оьб этом подробнее расписано в http://www.lissyara.su/articles/freebsd ... ache+trac/), можно через встроенный svnserve.
Второе - более простой вариант. Добавляем в /etc/rc.conf. Флаг -R переключает сервер в режим "только для чтения", т.к. клиент сможет получить файлы, но не сможет их менять на сервере несмотря на настройки в конфигурационный файлах (base/conf/svnserve.conf, например).
И запускаем сервер
Клиент. Для работы в качестве клиента используется утилита svn
В данном примере используется локальный сервер SVN. Если установка локального сервера не проводилась, следует заменить его адрес на адрес публичного сервера.
Скачиваем коллекцию портов. Есть два варианта получить порты. Первый - порты и историю коммитов (изменений) или просто коллекцию портов. Первый вариант "тяжелее" примерно на 500Мб, но зато позволяет "откатываться" до предыдущих версий.
Первый вариант. Обновляем все, включая историю версий
Второй вариант. Получаем только порты. Без дополнительной информации. --force если папка ports не пуста.
Если использовался первый вариант, можно посмотреть историю изменения и, при случае, откатиться
1. Смотрим изменения через svn. Последние 5 изменений.
2. Например, нам надо поставить порт php 5.4.10. Ему соответствует r309326. Синхронизируем.
3. Проверяем
Смотрим информацию о каталоге.
Убеждаемся, что версия соответствует.
...
Смотрим отличия между r309326 и текущей версией (HEAD)
Ваши длополнения?
ЗЫ, оставить тут или оформить как статью?
Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.
wikipedia(c)
Русским языком SVN - это некая база для хранения файлов с историей их изменений и комментариями. Основная целевая аудитория - разработчики, которые используют ее для хранения исходных текстов программ и истории изменения.
SVN можно условно разделить на клиентскую часть и серверную. Серверная - локально хранит исходники, историю и т.п. Клиент же только получает необходимые файлы с сервера.
Для рядового обновления нескольких серверов, я думаю, нет смысла держать полную копию у себя (ставить серверную часть). Можно просто ограничиться скачиванием необходимых файлов.
Установка SVN сервера с использованием уже имеющейся базы. Для настройки сервера используется утилита svnsync.
1. Качаем SVN базу с
Код: Выделить всё
#ftp://ftp.freebsd.org/pub/FreeBSD/development/subversion/2. Распаковываем ее в папку, где будет лежать база. Назовем ее, наример, /var/svn/
Код: Выделить всё
#mkdir /var/svn/
#cd /var/svn/
#tar -vxf svnmirror-ports-r301235.tar.xzКод: Выделить всё
#svnsync sync file:////var/svn/portsКод: Выделить всё
#svnsync info file:////storage/local_pool/svn/ports
Source URL: svn://svn.freebsd.org/ports
Source Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Last Merged Revision: 315795Второе - более простой вариант. Добавляем в /etc/rc.conf. Флаг -R переключает сервер в режим "только для чтения", т.к. клиент сможет получить файлы, но не сможет их менять на сервере несмотря на настройки в конфигурационный файлах (base/conf/svnserve.conf, например).
Код: Выделить всё
svnserve_enable="YES"
svnserve_flags="-d -R --log-file=/var/log/svn.log --listen-port=3690"
svnserve_data="/var/svn"
svnserve_user="svn"
svnserve_group="svn"Код: Выделить всё
#/usr/local/etc/rc.d/svnserve startВ данном примере используется локальный сервер SVN. Если установка локального сервера не проводилась, следует заменить его адрес на адрес публичного сервера.
Скачиваем коллекцию портов. Есть два варианта получить порты. Первый - порты и историю коммитов (изменений) или просто коллекцию портов. Первый вариант "тяжелее" примерно на 500Мб, но зато позволяет "откатываться" до предыдущих версий.
Первый вариант. Обновляем все, включая историю версий
Код: Выделить всё
#svn checkout svn://127.0.0.1/ports/head /usr/portsКод: Выделить всё
#svn export --force svn://127.0.0.1/ports/head /usr/ports/1. Смотрим изменения через svn. Последние 5 изменений.
Код: Выделить всё
#svn log --limit=5 /usr/ports/lang/php5/
------------------------------------------------------------------------
r314716 | ale | 2013-03-20 12:15:37 +0400 (ср, 20 мар 2013) | 5 lines
Update to 5.4.13 release.
PR: ports/177082
Submitted by: Rustem Alimov <rustem.alimov@gmail.com>
------------------------------------------------------------------------
r313958 | ale | 2013-03-12 14:33:04 +0400 (вт, 12 мар 2013) | 5 lines
Suhosin will never reappear, remove commented out code.
Fix plist when CLI is not selected [1].
Submitted by: Gergely CZUCZY <gergely.czuczy@harmless.hu> [1]
------------------------------------------------------------------------
r312912 | ale | 2013-02-25 14:30:40 +0400 (пн, 25 фев 2013) | 2 lines
Update to 5.4.12 release.
------------------------------------------------------------------------
r310812 | ale | 2013-01-22 12:20:05 +0400 (вт, 22 янв 2013) | 2 lines
Update to 5.4.11 release.
------------------------------------------------------------------------
r309326 | ale | 2012-12-21 01:15:05 +0400 (пт, 21 дек 2012) | 2 lines
Update to 5.4.10 release.
-------------------------------------------------------2. Например, нам надо поставить порт php 5.4.10. Ему соответствует r309326. Синхронизируем.
Код: Выделить всё
#svn up -r 309326 /usr/ports/lang/php5/Смотрим информацию о каталоге.
Код: Выделить всё
#svn info /usr/ports/lang/php5
Path: /usr/ports/lang/php5
Working Copy Root Path: /usr/ports
URL: svn://127.0.0.1/ports/head/lang/php5
Repository Root: svn://127.0.0.1/ports
Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Revision: 309326
Node Kind: directory
Schedule: normal
Last Changed Author: ale
Last Changed Rev: 309326
Last Changed Date: 2012-12-21 01:15:05 +0400 (пт, 21 дек 2012)Код: Выделить всё
#cat /usr/ports/lang/php5/distinfo
SHA256 (php-5.4.10.tar.bz2) = c5bffda2154aedd9851c1e9b7da66f6c44c199716bd202054dd5d4a4f5f997e4Смотрим отличия между r309326 и текущей версией (HEAD)
Код: Выделить всё
#svn diff -r 309326:HEAD /usr/ports/lang/php5/Makefile | grep PORTVERSIONВаши длополнения?
ЗЫ, оставить тут или оформить как статью?