FastNetMon

Показаны сообщения с ярлыком SVN. Показать все сообщения
Показаны сообщения с ярлыком SVN. Показать все сообщения

среда, 11 мая 2011 г.

Экспорт заданной ревизии SVN репозитория в заданную папку

svn export https://svn.domain.ru/reponame/trunk /root/target_dir/ --username=имя_пользователя

Обращаю внимание, что target_dir не должна сущестсовать. Как результат работы команды будет копия иерархии файлов HEAD ревизии репозитория (все, что находится в рабочей копии и не закоммичено будет отброшено).

пятница, 1 апреля 2011 г.

Как восстановить удаленный файл в svn?

Предположим, что у нас имеется файл когда-то удаленный из SVN репозитория, мы знаем его имя и папку, где он находился.

Для начала нужно найти ревизию, когда файл был удален, для этого переходим в папку, где он находился ранее и делаем листинг изменений репозитория:
cd some_folder
svn log --verbose | grep file_name -C 10

В ответ будет выдано примерно следующее:
...
r552 | developer | 2010-11-18 19:55:04 +0300 (Thu, 18 Nov 2010) | 1 line
Changed paths:
D /xxxx/trunk/file_name.php
M /....
M /....
...

Теперь мы знаем, что в ревизии 552 файл уже был удален, следовательно, нам нужно взять этот файл из ревизии 551.

Проверить существование файла в определенной ревизии можно следующим образом:
# svn ls -r 552| grep file_name
# svn ls -r 551| grep file_name
file_name.php

Возвращаем удаленный файл на место:
svn up -r 551 file_name.php

В ответ нам будет выдано:
A file_name.php
Updated to revision 551.

После этого добавляем файл в текущую ревизию и коммитим:
svn ci -m 'File file_name.php reverted'

Все :)

Источник: http://m0j0.wordpress.com/2007/10/25/recovering-deleted-files-from-an-svn-repository/

суббота, 29 января 2011 г.

Как сделать посыл писем при коммите в SVN репозиторий?

Платформа: CentOS 5.5

Переходим в папку репозитория:
cd /var/spool/svn/имя_репо/hooks/

Берем заготовленный пример конфига:
mv post-commit.tmpl post-commit
chmod +x post-commit

После этого открываем хук:
vi post-commit

Удаляем строку в самом низу "log-commit.py ...".

А строку "commit-email.pl" заменяем на следующую (адрес почтового ящика можно оставить один):
/usr/share/doc/subversion-1.4.2/tools/hook-scripts/commit-email.pl "$REPOS" "$REV" devel@domain.ru manager@domain.ru --diff y --from svn@domain.ru

Все, теперь при коммите мы будем получать на почту полный лог коммита и все диффы примерно следующего вида:
Author: nrg
Date: 2011-01-29 22:39:40 +0300 (Sat, 29 Jan 2011)
New Revision: 22

Modified:
trunk/TODO
Log:
fix todo

Modified: trunk/TODO
===================================================================
--- trunk/TODO 2011-01-28 16:29:06 UTC (rev 21)
+++ trunk/TODO 2011-01-29 19:39:40 UTC (rev 22)
@@ -1,3 +1,3 @@
-
-Юнит тест
\ No newline at end of file
+Юнит тест
+Тест пункт

Но при этом коммент к коммиту (если он был в UTF8) будет показан в стиле \100\123\213\112, чтобы это пофиксить нужно сделать следующее.

vim /usr/share/doc/subversion-1.4.2/tools/hook-scripts/commit-email.pl

И В самом верху делаем так:
#!/usr/bin/env perl

$ENV{'LC_ALL'} = 'en_US.UTF-8';

четверг, 5 августа 2010 г.

RedMine: Subversion репо с доступом по https и ошибка "The entry or revision was not found in the repository"

А в логах:

Line:
Position:
Last 80 unconsumed characters:
Output was:
?xml version="1.0"?
list
list
path="https://svn.domain.ru/repo"
Rendering template within layouts/base
Completed in 1648ms (View: 40, DB: 36) | 500 Internal Server Error [http://redmine.domain.ru/projects/repo/repository]


Проблема вызвана тем, что сертификат https коннекта к репо самоподписной.

Создадим новую папку для конфига svn:

mkdir /opt/svnredmine
chown redmine:redmine /opt/svnredmine/


А также немного подправим логику работы RedMine:

vi /opt/redmine/lib/redmine/scm/adapters/subversion_adapter.rb


И на строке заменяем:

SVN_BIN = "svn"


на:

SVN_BIN = "svn --non-interactive --config-dir /opt/svnredmine"


Теперь входим под юзером redmine и делаем чекаут:
su redmine
cd /tmp
svn --config-dir /opt/svnredmine co https://svn.domain.ru/repo --username=redmine


И при предложении принять сертификат щелкаем p и получаем чекаут.

Теперь перезапускаем апача:

/etc/init.d/apache2 restart


И после этого идем во вкладку Repository в RedMine и через несколько секунд получаем репозиторий :)

среда, 7 апреля 2010 г.

Как в SVN добавить содержимое папки в игнор лист репозитория?


svn propedit svn:ignore cache/


Вводим в окне редактора звездочку: * и сохраняем.

svn ci -m 'add cache ignore'


После этого все содержимое папки перестанет версионироваться и все файлы в ней будут игнорироваться SVN .

Защита папки .svn при выкатывании сайта из Subversion на Apache

Когда Вы храните сайт в Subversion и выкатываете его на продакшеновый Апач посредством него же, то волей-неволей во всех папках проекта появляются служебные папки .svn, которые Apache с превеликим удовольствием выдаст первому встречному при запросе http://ваш_сайт/.svn. Как понимаете, это серьезный удар по безопасности и положение нужно срочно исправлять.

Поможет в этом нам директива Apache DirectoryMatch:

<DirectoryMatch "^/.*/(\.svn|CVS)/">
Order deny,allow
Deny from all
</DirectoryMatch>


Добавив такой код в конфиг-файл Apache, Вы заблокируете доступ ко всем папкам .svn в пределах сервера через веб.

Взято с: http://codesnippets.joyent.com/posts/show/1364

суббота, 3 апреля 2010 г.

Перенос всей конфигурации Puppet в Subversion

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

Допустим, у нас есть пустой репозиторий: https://domain.ru/configuration (как его сделать - можете найти в моем блоге по ключевому слову "subversion"), в котором мы планируем хранить конфиги Puppet.

Итак, в самую первую очередь необходимо сделать бэкап папки Puppet, чтобы случайно его не прибить в процессе работы:
tar -czf /root/puppet.tar.gz /etc/puppet


Теперь нам необходимо загрузить все имеющиеся у нас конфиги Puppet в Subversion, это делается командой import:

svn import /etc/puppet https://domain.ru/configuration/puppet -m 'init'


После этой операции в репозитории будет создана папка puppet и все конфиги будут лежать внутри нее.

Но, обращаю внимание, после этой операции папка /etc/puppet не становится рабочей копией! Она просто импортируется в репозиторий и все:

cd /etc/puppet
svn up
Skipped '.'
# что означает, что мы не минутой не в рабочей копии.


Теперь отключаем Puppet-сервер и сдвигаем исходную папку конфигов:
/etc/init.d/puppetmaster stop
mv /etc/puppet /etc/puppet_non_svn


Создаем новую папку для конфигов Puppet:

mkdir /etc/puppet
cd /etc/puppet


Делаем чекаут репозитория в нее:

svn co https://domain.ru/configuration/puppet ./ --username=puppet


Запускаем PuppetMaster:
/etc/init.d/puppetmaster start


Как Вы уже могли заметить, сервер Puppet работает с svn от имени пользователя puppet, в то время как я сам работаю по своему логину, nrg. Это сделано не случайно, а, во-первых, по соображениям безопасности и, во-вторых, по соображениям порядка :)

Дальнейшая работа с конфигурациями может выглядеть двумя способами - вы вносите изменения на сервере Puppet и коммитите их командой:
svn ci -m 'fix config'


либо исправляете конфиг "дома" (используя личный логин в svn):
svn ci -m 'fix config'


и после этого делаете обновление репозитория на сервере:

cd /etc/puppet
svn up


Ну вот и все, удачного использования и легкой поддержки кучи серверов :)

вторник, 30 марта 2010 г.

Установка Subversion сервера на CentOS 5

Создаем репозиторий

Ставим пакеты:
yum install -y subversion


У Subversion сервера есть два типа хранилища fsfs (рекомендуется) и bdb. Если желаете их сравнить, вот ссылочка: http://svnbook.red-bean.com/en/1.1/ch05.html#svn-ch-5-sect-1.3 (по мне - почти однозначно побеждает fsfs).

Создаем папку для репозиториев:

mkdir /var/spool/svn


Создаем репозиторий:

svnadmin create /var/spool/svn/myrepo


Переходим в папку репозитория:

cd /var/spool/svn/myrepo


Созданный репозиторий имеет вот такую структуру:
conf dav db format hooks locks README.txt


Теперь нам необходимо предоставить доступ к репозиторию по сети.

Вариантов подключения к SVN репозиторию существует великое множество (аналогичный список можете просмотреть по команде svn --version):

* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
- handles 'http' scheme
- handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme


Мне более всего нравится вариант WebDAV / https (безопасность и удобная работа с сервером), его мы и будем использовать.

Ставим Apache Dav и поддержку SSL (ога, безопасность рулит всегда):
yum install -y httpd mod_dav_svn mod_ssl


Аактивируем запуск Апача при загрузке системы и запускаем его:
chkconfig httpd on
/etc/init.d/httpd start


Убеждаемся, что все необходимые модули успешно подключились к Апачу:

apachectl -M 2>&1 | grep dav
dav_module (shared)
dav_fs_module (shared)
dav_svn_module (shared)


а также проверяем, подключился ли SSL:

apachectl -M 2>&1 | grep ssl
ssl_module (shared)


Так как все операции с репозиторием теперь будут производиться от имени Apache, то необходимо его сделать владельцем файлов нашего репозитория:
chown -R apache.apache /var/spool/svn/myrepo/


Теперь необходимо показать Апачу, где находится наш репозиторий:
vi /etc/httpd/conf.d/subversion.conf


Добавляем там внизу следующее:
<Location /myrepo>
DAV svn
SVNPath /var/spool/svn/myrepo

# Require SSL connection for password protection.
SSLRequireSSL

AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /var/spool/svn/myrepo/conf/htpasswd
Require valid-user
</Location>


Создаем файл паролей с одним пользователем:

htpasswd -c /var/spool/svn/myrepo/conf/htpasswd nrg
New password:
Re-type new password:
Adding password for user nrg


Для добавления последующих пользователей используйте вот такую команду (просто ключ -c опускается):

htpasswd /var/spool/svn/myrepo/conf/htpasswd nrg2


Применяем настройки:

/etc/init.d/httpd restart


Пробуем открыть репозиторий по незащищенному соединению: http://domain.ru/myrepo и в ответ должны получить "You don't have permission to access" - это правильное поведение (в логах оно сопровождается следующими записями: "access to /var/www/html/myrepo failed, reason: SSL connection required"). После этого пробуем подключиться по httpS: https://domain.ru/myrepo и в ответ мы должны получить радостное "Revision 0: /", это повествует о том, что все рабоатет отлично и мы получили доступ к нашему репозиторию посредством WEB_DAV и SSL.

Теперь пробуем подключиться из SVN клиента:
svn co https://domain.ru/myrepo
Error validating server certificate for 'https://domain.ru:443':
....
(R)eject, accept (t)emporarily or accept (p)ermanently? p
Authentication realm: Authorization Realm
Password for 'nrg':
Checked out revision 0.

Сразу следом стоит создать папку trunk:
svn mkdir trunk
svn ci -m 'create trunk'

Вот и все — у Вас есть собственный, супер защищенный, доступный из любой точки мира SVN репозиторий!

Основано на: http://wiki.centos.org/HowTos/Subversion

Subversion: CentOS vs Debian - где он новее?

Debian: 1.5.1dfsg1-4
CentOS: 1.4.2


Побеждает Debian :)

Хотя в свете того, что на моем Маке Subversion старее динозавров это совершенно не важно, так что сделаем репо на CentOS :)

svn --version
svn, version 1.4.4 (r25188)

воскресенье, 20 декабря 2009 г.

subversion: разрешить правку комментов к коммитам

При попытке изменения на стандартно настроенном svn получаем следующее:

svn pe svn:log -r 5826 --revprop
svn: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook


Фиксица так (на сервере, разумеется):

1. Идём в папку /var/spool/svn/имя_репозитория/hooks/
2. Там выполняем:

cp pre-revprop-change.tmpl pre-revprop-change
chmod +x pre-revprop-change

3. Перезапускаем svnserve и вуаля, всё работает :)

Команда для удобного поиска в svn репозитории

grep -HiR 'text' * | grep -v svn

четверг, 26 ноября 2009 г.

Установка svn плагина на Eclipse

Help / Install new software / work with: "all available sites" / Collaboration / "Subversive SVN team Provider" / "Ok" / "Finish"

Eclipse / Настройки / Team / SVN / Svn Kit 1.3.0 (появится во всплывающем окне) / Finish

среда, 23 июля 2008 г.

Как изменить комментарии к коммиту?

Вот недавно нарыл на просторах его великого и необъятного следующую штучку:
svn pe svn:log -r 1234 --revprop

Данная команда позволяет изменять комментарии к коммитам (по причине кривости или опечаток). Я, конечно же, сразу захотел её использовать, но репозиторий со мной не согласился:
svn: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook


Ну лечится это довольно просто: идём в папку /var/spool/svn/имя_репозитория/hooks/ и там cp pre-revprop-change.tmpl pre-revprop-change и chmod +x pre-revprop-change , потом перезапускаем svnserve и вуаля :)

воскресенье, 29 июня 2008 г.

Документация по Subversion

Таки встала необходимость заняться созданием и управлением собственным репозиторием, не всегда же прятаться за спину админа :) Собственно, в сети нашел очень качественную документацию по данной теме от моего любимого журнала LXF, снабжу ссылки краткой аннотацией и этим ограничимся.

Статья -- сравнение систем контроля версий между собой, здесь расписываются сильные и слабые стороны популярных VCS: RCS, CVS, SVN, Git, Bazaar, Aegis, Monotone.

Большая статья про Subversion:
Первая часть, вторая.

Практическое использование Subversion линк.

Блин, такими темпами скоро не про что писать будет :)