пятница, 31 июля 2009 г.

Домашний сервер: SVN

SVN примерно расшифровывается как "система контроля версий" и служит собственно для этого - для хранения информации об изменениях в файлах. К примеру, у себя дома я настроил svn для хранения "домашних" проектов и использую систему примерно так:
  1. задумал новый проект - создал для него папку и добавил ее в svn
  2. чего-то там пописал, поделал, заканчиваю играться - делаю commit в svn
  3. на след. день еще чего-то написал/исправил, снова сделал commit
  4. на работе стукнула мысль (или просто код может пригодится по работе - тот же ffmpeg) - создал папку на рабочем компьютере и сделал в нее checkout моего проекта, чего-то пофиксил, сделал commit
  5. пришел домой, сделал update проекту и продолжил работу - никаких переписываний с флешки/на флешку (с обязательным забыванием или забрать исходники на флешку, или скопировать дома с флешки)
  6. бамц! перестало работать то, что работало раньше - начинаю сравнивать версии и искать, что фиксил
  7. бабамц! компьютер накрылся медным тазом.. восстановил систему, поставил клиент для svn, сделал checkout своим проектам - и я готов к работе
А есть еще специфика, когда над проектом работает несколько людей - не мой вариант, так что ничего не скажу.. Теперь к установке - собственно, сказал бы, что делается все в 2 клика, но мы ж суровые хацкеры уже почти - какие клики?.. Все в консольке:
   1: # установка нужных пакетов - апач уже стоял
   2: sudo apt-get install libapache2-svn subversion python-subversion libapache2-mod-python
   3: # в эту группу будут входить пользователи, которым разрешен доступ к svn
   4: sudo groupadd svn
   5: # добавлю сюда себя и апач - тогда можно будет ходить по репозиторию в броузере
   6: sudo usermod -a -G svn user_name
   7: sudo usermod -a -G svn www-data
   8: # данные о файлах и правках над ними будут хранится в этой папке, которую сейчас создадим
   9: sudo svnadmin create /var/svn-repo
  10: # для доступа к svn задам себе пароль
  11: sudo htpasswd -c -m /etc/apache2/svn.htpasswd user_name
  12: # изменю владельца и права для папки с репозиторием (т.к. создавалась от sudo в var - можно было бы и где-то в домашней папке, если только себе)
  13: sudo chown -R www-data:svn /var/svn-repo
  14: sudo chmod -R g+ws /var/svn-repo
  15: # настрою апач (да, неправильно редактировать файл default - но у меня 
  16: # не намечается тыщи сайтов на компе, так что этот путь проще)
  17: sudo pico /etc/apache2/sites-available/default
  18: # можно сразу после секции gallery добавить следующие строчки.. или в любом другом месте в принципе:
  19:         <location /svn>
  20:                 DAV svn
  21:                 SVNPath /var/svn-repo
  22:                 AuthType Basic
  23:                 AuthName "my svn repo"
  24:                 AuthUserFile /etc/apache2/svn.htpasswd
  25:                 Require valid-user
  26:         </location>
  27: # перезапуск веб-сервера
  28: sudo /etc/init.d/apache2 restart
Откроем теперь бровзер и введем адрес http://ubuntu-pc/svn - после ввода имени и пароля увидим, что все работает:
svn - Revision 0: /

--------------------------------------------------------------------------------
Powered by Subversion version 1.5.4 (r33841).
Собственно, внутри пусто - а откуда там что-то возьмется?.. Для "заполнения" можно использовать консольный клиент для windows, а можно (и имхо нужно) скачать и установить TortoiseSVN - отличный гуй, интегрирующийся в explorer и действительно позволяющий работать "в 2 клика"; после установки он предложит перезагрузится - можно перезагрузится, а можно в task manager-е убить процесс explorer и снова его вручную запустить, по-моему, перезагрузка нужна только для интеграции в shell.. но перезагрузится тоже недолго Дальше в картинках - создаем папку:
и добавляем папку в репозиторий:
В репозитории уже была создана папка trunk (надо почитать книжки умные, там расписывается обычная структура папок в репозитории.. чтобы создать папку, можно нажать кнопку с "..." справа, появится древовидный эксплорер, в котором можно удалять папки, создавать и т.д.), новый проект хочу сохранить в "папке" new_project в репозитории:
вводим имя/пароль - один раз, если установить галку "Запомнить пароль":
Теперь в репозитории есть папка, надо ее сопоставить с файлами на диске - нажимаю правую кнопку мышки на папке с проектом и выбираю Checkout:
На иконке моей папки появится значек - зеленая галочка, которая сигнализирует, что содержимое папки соотвествует содержимому в репозитарии; сделаем новый файлик в нашей папке - текстовый, с единственной строчкой текста "Этот проект принесет мне $1000 за месяц!" :) Сохраняю файл, щелкаю по папке с проектом правой кнопкой и выбираю Commit - система покажет, какие файлы изменялись - в данном случае появился новый файл:
Если файл "нужен", его надо добавить в репозиторий (нет смысла к примеру добавлять временные файлы или например скомпилированные exe-файлы) - поставить галочку, в поле Message ввести описание (например очень полезно быстро видеть, что менялось или исправлялось) и нажать Ok Теперь я решил исправить свой файл, делаю правки, сохраняю, смотрю на папку с проектом - иконка поменялась с успокаивающей зеленой галочки на "тревожный" восклицательный знак; нажимаю правую кнопку на папке, SVN Commit, вижу окно со списком файлов, которые изменились; можно щелкнуть 2 раза мышкой по файлу и сравнить текущую и последнюю сохраненную версию:
Посмотрел, убедился, что все нормально (а можно было и не убеждаться), ввел текстовку у новой ревизии (например "Поставил новую цель" :) ) и нажал Ок - иконка (и на файле и на папке) снова сменилась на зелененький значек "Все в порядке" А если я все же решу, что погорячился - ну откачусь к предыдущему варианту (последнему или любому другому): нажимаю правую кнопку на файле, выбираю TortoiseSVN -> Show log, нахожу ревизию, когда данные в файле были правильные (для этого читаю сообщения, если они конечно вводились при коммите, смотрю на разницу в ревизиях), нажимаю на нужной строчке в списке ревизий правую кнопку и выбираю Revert to this revision - теперь, если открыть файл, снова вижу "скромные" $1000 :) Все, нарисованное на картинках, можно делать и руками, но имхо вариант с интеграцией в explorer - самый удобный..

Комментариев нет:

Отправить комментарий