Как установить subversion на windows

Обновлено: 05.07.2024

ШАГ 2: Создайте репозиторий

После установки TortoiseSVN вам будет предложено перезапустить компьютер. Фактически его можно использовать в обычном режиме независимо от того, запущен он или нет. Сначала создайте SVN-репозиторий (репозиторий). Вы можете выбрать режим командной строки или использовать плагин TortoiseSVN для операций с графическим интерфейсом. Командная строка запускается следующим образом:

e: \ svn \ repository - указанный мной каталог репозитория. Если вы используете метод GUI, вы можете щелкнуть правой кнопкой мыши в этом каталоге и выбрать [TotoiseSVN] -> [Create Repository href . ] для создания. Режим репозитория указан по умолчанию Вот и все
После создания хранилища в каталоге будет создано несколько файлов и папок: каталог dav - это каталог, предназначенный для Apache и mod_dav_svn, позволяющий им хранить внутренние данные; каталог db - это все файлы данных управления версиями; каталог hooks размещает файлы сценариев перехвата Каталог; блокировки используется для размещения каталога данных блокировки файловой библиотеки Subversion, который используется для отслеживания клиента, обращающегося к файловой библиотеке, файл формата представляет собой текстовый файл, в который помещается только целое число, указывающее номер версии текущей конфигурации файловой библиотеки;

ШАГ 3: Конфигурация

Откройте каталог / conf / и откройте svnserve.conf, чтобы найти два предложения:

ШАГ 4: Запустите службу SVN

Выполнить в командной строке

Этот файл превратит SVN в службу в системе Windows, и по умолчанию используется автозапуск. Примечание. При выполнении третьего предложения убедитесь, что служба SVN, ранее запущенная в командной строке, была остановлена. Если она не остановилась, нажмите Ctrl + С прерывает работу.

ШАГ 5: Создание дерева версии проекта

Убедившись, что служба SVN (служба командной строки или Windows) запущена, щелкните правой кнопкой мыши каталог, в который необходимо импортировать репозиторий, и выберите [TortoiseSVN] -> [Импорт . ], введите «svn» в поле URL всплывающего окна. : // localhost / myproject "Нажмите" OK ", чтобы выполнить импорт. Если об ошибках не сообщается, данные будут добавлены в дерево каталогов SVN-репозитория. Эти операции также можно выполнить с помощью командной строки. Для этого необходимо создать новую системную переменную "SVN_EDITOR" в системной переменной. Значение переменной - это путь к файлу локального текстового редактора. Как правило, оно относится к блокноту Windows. "C : \ windows \ notepad.exe ", затем откройте новое окно CMD и выполните

Затем закройте окно файла журнала, открытое Блокнотом, и нажмите «c», чтобы продолжить построение дерева проекта. В общем случае мы должны создать три каталога после создания корневого пути к файлу: отделения, теги, ствол.Эти три каталога являются тремя каталогами, необходимыми Subversion. Такие операции, как извлечение, фиксация и обновление, могут выполняться через командную строку svn или могут быть выполнены с помощью меню окон TortoiseSVN, которое очень просто.

В данном HOWTO я подробно опишу как установить и настроить SVN (subversion) сервер под ОС Windows.

Статья о настройке прав доступа SVN-сервера доступна здесь.

Шаг 1. Установка сервера.

После скачивания файла CollabNetSubversion-server-1.6.9-1.win32.exe (18,44 МБ), запускайте его и следуйте указаниям мастера. Мастер выполнит несколько шагов. Рассмотрим все шаги мастера по порядку:

Шаг 2. Установка клиента.

В качестве SVN-клиента мы будем использовать TortoiseSVN, подробнее о котором можно почитать в HOWTO.

Установка программы стандартна и не должна вызвать никаких сложностей.

Шаг 3. Настройка svnserve.

Теперь Вы должны раскомментировать строку:

Убираем символ комментария из строки:

В ней указывается имя Вашего репозитория. После знака равенства вместо My First Repository Вы можете указать любое другое имя. Оно выводится при запросе логина и пароля.

Настройка сервера с простой (simple) авторизацией завершена. Пример правильного файла конфигурации сервера:

Открываем TortoiseSVN Repository Browser из контекстного меню любой папки и в качестве URL вводим: svn://127.0.0.1/. Сервер запросит указать логин и пароль, заданные в файле passwd и при успешной авторизации отобразит корневой каталог. Сервер успешно настроен и готов к управлению проектами.

Шаг 4. Настройка Apache.

Если Вы хотите, чтобы к Вашему репозиторию был доступ не только с помощью svn-клиентов, но и с помощью любого веб-браузера, то должны сделать ряд настроек.

и замените на такие:

Внимание! Параметр -cm нужно указывать только при первом создании пользователя, т.к. он перезаписывает имеющийся файл. В пути к файлу паролей буква диска обязательно должна быть в верхнем регистре.

В качестве ЛОГИН_ПОЛЬЗОВАТЕЛЯ нужно указать все логины пользователей, указанные в файле passwd. Пароли также должны быть идентичны.

Настройка SVN over Apache 2 была успешно завершена. Теперь нужно перезапустить сервер командами консоли Windows:

59 комментариев к записи

@Алекс88
Штатно такой функции нет, но можно в файрволе создать разрешающие правила для входящих соединений на порт 3690 только для определённых IP-адресов, а все остальные подключения блокировать. На Linux используйте iptables.

Спасибо. Возник ещё один вопрос теперь уже с модулем для apache, в место Require valid-user установил Require user admin, но почему-то все остальные пользователи проекта тоже могут подключиться к нему не смотря на то что авторизация разрешена только для admin. Подскажите как разрешить авторизацию только для одного пользователя проектом а остальным запретить? А вообще хотелось бы сделать так, чтобы с одного ip заходили все пользователи, а с разных ip заходил только admin? Вот как я попытался это сделать но не получилось:

Алекс88 :

Спасибо. Возник ещё один вопрос теперь уже с модулем для apache, в место Require valid-user установил Require user admin

Поздравляю, вы изобрели новую директиву! В статье же написано как прописывать пользователей и задавать им пароли. Использовать нужно только require valid-user, что означает, что войти может только успешно авторизовавшийся пользователь.

Сами пользователи прописываются в файле, указанном в директиве AuthUserFile. Пример есть в статье:

@Vitaly
require valid-user вообще можно не указывать, всё-ровно будет работать. У меня вопрос в другом. Есть сотрудники, которым положено пользоваться svn только из офисного Ip, а с других ip доступ должен быть закрыт, также есть сотрудники для которых доступ к svn должен быть как из офисного ip, так и с любого другого ip. Такое возможно реализовать, если да то подскажите как?

Алекс88 :

@Vitaly
require valid-user вообще можно не указывать, всё-ровно будет работать.

Будет пускать любого без авторизации.

Алекс88 :

@Vitaly
Есть сотрудники, которым положено пользоваться svn только из офисного Ip, а с других ip доступ должен быть закрыт, также есть сотрудники для которых доступ к svn должен быть как из офисного ip, так и с любого другого ip. Такое возможно реализовать, если да то подскажите как?

Скорее всего, нет по крайней мере штатными средствами без написания собственных модулей для Apache. Можно лишь создать список IP-адресов, которым будет разрешён доступ, а всем остальным закрыть.

Это разрешит доступ из подсети 192.168.1.0/24, а также для локального хоста.

@Алекс88
Главное следите, чтобы оба сервиса (svnserve и apache) были запущены от одного пользователя в системе, либо принадлежали одной группе (например svnusers), иначе возникнут серьёзные проблемы и конфликты доступа.

Настроил всё, как написано, однако после запуска apache не могу получить доступ к репозиторию через браузер в соответствии с этой инструкцией:

При подключении к порту 127.0.0.1:8080 требует логин и пароль, после ввода и того и другого снова требует пароль. И так до бесконечности.

То, что сейчас выложено на сайте CollabNet, не имеет никакого отношения к описанному в статье, т.к. они давно прекратили поддержку того продукта.

Настройка SVN

Здравствуй, уважаемый читатель блога LifeExample. При разработке любого более-менее крупного проекта невозможно обойтись без системы контроля версиями (SVN). Настройка SVN может загнать в тупик многих начинающих web разработчиков. Я до недавнего времени также пребывал в замешательстве и больших вопросах относительно установки и настройки SVN.

Дабы уберечь вас от изучения уймы полезной и бесполезной информации, доступной в интернете, я хочу показать вам, как выглядит настройка SVN по шагам, а также рассказать, что такое система контроля версий.

Что такое система контроля версий

Система контроля версий (по англ. Version Control System, сокращенно VCS) состоит из двух частей:

  • Сервер, он же хранилище, он же репозиторий — где хранятся все файлы проекта, а также история их изменения.
  • Клиент — программа для работы с хранилищем, каждый клиент имеет свою локальную копию файлов проекта, с которой работает разработчик.

VCS предназначена для упрощения совместной разработки проекта, несколькими и более программистами.

Многие начинающие программисты одиночки при написании кода, создают (backup) копии папок, с программой помечая их текущей датой, или порядковым номером.

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

Проблема в том, что с таким подходом, мы не можем с уверенностью сказать, какие были произведены изменения спустя месяц, и что было сделано на момент создания копии проекта.

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

Если вы интересовались вакансиями web разработчиков, то не могли пропустить одного из требований к кандидатам, встречаемое теперь почти в каждом предложении.

Требования к Соискателю
Умение работать с SVN (либо аналогичной системой контроля версий)

Именно система контроля версий Subversion (SVN) применяется в большинстве организаций, поэтому я и расскажу сегодня о работе и настройке с SVN.

Настройка сервера (шаг 1)

Целью статьи является не только познакомить вас с системой контроля версий, но и дать возможность попрактиковаться с её использованием, поэтому сервер я предлагаю разместить локально. Поскольку не у всех есть возможность выделить под него отдельный хостинг.

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

Чтобы самостоятельно настроить SVN server, можно скачать, одну из предлагаемых на официальном сайте , программ с SVN сервером в комплекте, или же ограничиться чистым SVN сервером и скачать Subversion 1.7.

TortoiseSVN — это бесплатный клиент для системы контроля версий Subversion, выполненный как расширение оболочки Windows. Вся прелесть программы заключается в том, что она не только является клиентом, но и может автоматически в несколько кликов мыши создать локальный SVN сервер, пригодный для работы.

Таким образом, чтобы настроить SVN сервер, первым делом нам нужно скачать и установить программу TortoiseSVN.

После инсталляции программы, в контекстном меню проводника должны появиться характерные для TortoiseSVN пункты меню.

Контекстное меню настроек SVN

Организуем хранилище наших проектов, для этого на диске С:\ создадим новый каталог с именем SVNrepository , откроем его, и щелкнув правой кнопки мыши, в контекстном меню выбирем TortoiseSVN->"Создать здесь хранилище" .

Структура настроенного SVN сервера

Каталог SVNrepository должен заполниться файлами вышеприведенной структуры, после чего можно считать, что мы завершили настройку SVN сервера и готовы к работе.

Установка клиента (Шаг 2)

Как это ни странно но, клиентское приложение мы уже установили, и можем благополучно пользоваться им. Запустить его привычным всем методом через кнопку пуск или с ярлыка на рабочем столе – не получится, поскольку оно уже успешно работает.

При установке инсталер TortoiseSVN создал соответствующие службы, которые теперь будут запускаться автоматически с запуском windows. Благодаря этим службам в контекстном меню проводника стали доступны новые пункты меню.

Собственно с их помощью, и будет происходить вся последующая работа с системой контроля версий. Такая полезная интеграция клиента SVN, прямо в проводник windows сократит до нуля, время на изучение интерфейса нового клиента, ведь в наше время все привыкли пользоваться мышкой и контекстным меню.

Настройка структуры хранилища (Шаг 3)

Закончив настройку составляющих SVN, сервера и клиента, я предлагаю немножко попрактиковаться, и посмотреть, как же все это должно выглядеть и работать.

В документации к данной программе разработчики советуют использовать в хранилище три определяющих каталога:

В каталоге trunk расположим основной проект, над которым будем вести работу.

Каталог branches будет содержать последующие копии ответвлений проекта, или проще говоря – версий проэкта.

Не совсем ясным для меня осталось назначение папки tags для копий меток, пока в голове нет четкой картины, где бы она могла понадобиться.

Разработчики в руководстве упоминают о том, что любая организация – каталога, имеет право на существование, и определяется только требованиями конкретного проекта. Именно поэтому, я создам в репозитории (хранилище), всего два каталога.

В trunk я намерен хранить текущую реализацию проекта, а в branches все разрабатываемые в прошлом и в дальнейшем версии.

Т.е. формально я представляю себе репозиторий такого вида:

Из этой структуры следует, что на момент разработки версии v3 в текущий момент успешно выпущена и поддерживается версия v2.

Чтобы создать каталоги в хранилище, нужно открыть контекстное меню папки SVNrepository и выбрать пункт TortoiseSVN->"Обозреватель хранилища" . Откроется окно для работы с хранилищем.

Настройка структуры хранилища

В котором с помощью все того же контекстного меню, можно будет создать необходимые каталоги.

Попутно добавим в /branches каталог /release v1 , в котором будут храниться версии первой разрабатываемой версии проекта.

Комментарии к созданой версии

Заметьте при создании или редактировании файлов и каталогов, мы можем оставлять комментарии, для упрощения дальнейшей навигации по хранилищу.

Основа для работы готова, закончена настройка SVN сервера под конкретный пример, теперь давайте начнем разрабатывать наш тестовый проект.

Создание рабочей копии (Шаг 4)

В папку branches/release v1 добавим файл ReadMe.txt нашего, пока не существующего, проекта. Соответственно, нужно изначально подготовить данный файл, и осилить написать туда пару строчек текста, зачем, расскажу позже.

Создание рабочей копии настроенной SVN

Перенеся файл в репозитории, мы наконец-то можем возрадоваться началу процесса разработки проекта и контроля его версий. Теперь откройте любой каталог у себя на компьютере, в котором планируете создавать проект. Пусть это будет: C:/Project1 .

В контекстном меню выберите пункт "SVN извлечь", укажите в качестве URL хранилища, путь до папки с версией v1:

Подтвердите выбор, нажатием на кнопку "Ок", и наблюдайте ха процессом извлечения, новой рабочей копии из репозитория.

Подтверждение выгрузки копии

Обратите внимание, на папке проекта C:/Project1 появилась пиктограмма в виде зеленой галочки. Это означает, что все прошло успешно и рабочая копия полностью синхронизирована с хранилищем.

Готовая настроенная SVN рабочая копия

Изменение файлов проекта (Шаг 5)

Следующим шагом немного изменим, содержимое файла C:\Project1\ReadMe.txt , можете внести любые изменения, на свое усмотрение.

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

Измененная настроенная SVN рабочая копия

После завершения всех изменений, нужно выгрузить рабочую копию обратно в репозиторий, что бы она была зафиксирована, и получила возможность быть восстановленной в любое время.

Применение изменений файлов (Шаг 6)

В контекстном меню папки Project1 выберем пункт "SVN фиксировать", система предложит указать комментарии, перед тем как файлы будут загружены на сервер. Не ленитесь их заполнять, поскольку в последствии, они сыграют вам на руку при необходимости отката версий.

Фиксация изменений в хранилище

Кроме того в открывшемся окне, мы можем произвести сравнение файла с предыдущими его версиями. Если вы следовали моим советам, и изменяли строки ReadMe.txt , то сможете оценить прелесть работы встроенной в TortoiseSVN программы для стравнения текстовых файлов. Для этого выберите в контекстном меню, пункт "Cравнить с базой".

На первый взгляд может показаться сумбурно, и не понятно, но спустя некоторое время, вы оцените удобность работы данного приложения.

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

Откат к предыдущей версии (Шаг 7)

Если спустя некоторое время, стало ясно, что все идет не так, и мы хотим вернуть файлу прежний вид, сделать это можно удобным способом. В контекстном меню файла C:\Project1\ReadMe.txt выберем пункт "Обновить до ревизии"

Откат к предыдущей версии

Настройка SVN сервера как оказалось, заняла меньше времени, нежели описание процесса работы с системой контроля версий. Но зато получился неплохой мануал для начинающих. Тем кто столкнулся с проблемами в настройке SVN, или возникли вопросы по использованию TortoiseSVN, я рекомендую, не стесняясь писать комментарии к статье.




Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.


Subversion (сокращенно SVN) — система управления версиями (Version Control System, VCS). Обычно тулзы этого рода считаются теми, кто с ними не знаком, чем-то нужным только большим командам программистов. Но на самом деле, они крайне полезны даже одиночке, и даже не программисту — всем, кому приходится редактировать какие-либо файлы. Так, я встречал весьма восторженное описание системы CVS (идейный предшественник SVN и первая свободная VCS — благодаря чему она до сих пор достаточно распространена) от какого-то то ли журналиста, то ли писателя, ее использовавшего.

  • VCS хранит всю историю изменений файлов, за которыми следит — всегда можно просмотреть историю файла, различия между двумя его версиями или откатиться после неудачных изменений.
  • VCS хранит файлы эффективно — хранятся только изменения файлов, благодаря чему репозиторий с сотней версий некоторого проекта может весить меньше, чем сам проект.
  • VCS облегчает создание резервных копий. Репозиторий легко сбэкапить, не заботясь о том, а не затрется ли какая-нибудь старая версия, которая в будущем может пригодиться — он всегда хранит всю историю. Кроме того, репозиторий — сам по себе бэкап, если он хранится отдельно от рабочей копии проекта.
  • Онлайн-репозиторий облегчает публикацию исходных кодов (и не только их), кроме того, всегда можно скачать из него самую свежую версию, либо любую из предшествующих. К тому же, при обновлении уже скачанной копии по сети передаются только изменения, резко сокращая расход трафика (и времени на передачу данных).
  • Онлайн-репозиторий — удобное средство синхронизации нескольких рабочих копий. Можно, например, подредактировать что-то на работе, зафиксировать изменения и придя домой — синхронизироваться с репозиторием и продолжить работу. VCS гарантирует, что ни одно изменение при переносе не будет забыто, а если обновляемый файл содержит какие-то незафиксированные изменения — предупредит об этом, предотвратив их потерю.

Почему SVN?

  • SVN прост. Минимальный мануал, который я писал, занимал менее странички текста, и его хватало для вкуривания в SVN в условиях командной работы.
  • SVN — свободное ПО. Хотя нынче этим свойством из заслуживающего внимания не обладает разве что P4 и VSS.
  • SVN широко распространен.
  • SVN лишен большинства недостатков CVS.

Что такое SVN?

Subversion — централизованная система управления версиями — то есть, она хранит файлы и их историю в центральном хранилище, называемом репозиторий. Subversion ориентирована на работу с файлами — она следит за изменениями файлов, отданных под ее контроль, и сохраняет их. Также, в отличие от CVS, SVN следит и за папками. Подробней об отличиях (и вообще о системе) можно почитать тут, раздел «Subversion и CVS».

Основные понятия

  • Репозиторий (Repository) — центральный архив, хранящий файлы и их историю.
  • Рабочая копия (Working Copy, WC, РК) — копия содержимого репозитория определенной версии, с которой и производится работа. Это обычная папка (не считая скрытого каталога .svn, содержащего необходимую для работы системы информацию — его трогать не следует), с которой можно работать как с обычной папкой. Но — SVN следит за изменениями файлов в ней и всегда можно посмотреть сделанные изменения, откатить их или зафиксировать в репозитории, а также обновить до любой версии, содержащейся в репозитории.
  • Извлечение (Checkout) — процедура извлечения из хранилища файлов указанной версии и создания рабочей копии из них.
  • Фиксация (Commit) — процедура сохранения в репозитории очередной версии файлов. SVN не хранит все изменения подконтрольных ей файлов — это не нужно, да и накладно. Она хранит только те версии, которые были зафиксированы.
  • Обновление (Update) — процедура синхронизации рабочей копии с репозиторием — получение из него всех обновлений файлов с момента предыдущего обновления. Также, возможно обновление до указанной версии (в том числе и более старой) — в этом случае рабочая копия будет приведена в соответствие с содержимым репозитория указанной версии.
  • Ревизия (Revision) — версия файлов. Каждая фиксация создает новую ревизию. Ревизия идентифицируется числом — ее порядковым номером. Самая свежая ревизия называется HEAD.
  • Базовая версия — версия файла, полученная из репозитория при последнем извлечении или обновлении, либо успешно отправленная туда при фиксации. Именно относительно нее пользователем и делаются изменения.
  • Конфликт (Conflict) — то, из-за чего все и затевалось. Ситуация, когда один и тот же файл изменили два человека и теперь, прежде чем его сохранить в репозитории, необходимо объединить внесенные ими изменения. Стоит отметить, конфликты часто игнорируются даже, казалось бы, вполне серьезными пользователями, а зря. Бездумное разрешение конфликта — отличный способ грохнуть работу другого.

И как с этим работать?

  1. Прежде всего, следует извлечь рабочую копию — иначе с чем же работать? Репозиторий в лучшем случае содержит непонятно что, а то и вовсе где-то там. На гуглекоде например. Делается это командой checkout, которая требует указания URL репозитория и опционально — ревизии. По умолчанию вытягивает самую свежую версию. Кроме того, можно вытянуть не весь репозиторий, а только какую-либо папку в нем.
  2. Теперь можно работать с ней как с обычной папкой с файлами. Единственное исключение — удаление, копирование и переименование (оно же перемещение) следует делать средствами SVN (команды delete, copy, move) — иначе она проигнорирует эти изменения и откатит их при первом же обновлении. Также, SVN не будет следить за новым файлами, пока они не будут явно добавлены под ее контроль командой add.
  3. (Опционально) Обновить копию, чтобы получить обновления из репозитория и проверить наличие конфликтов. Можно делать в любой момент по необходимости, для одиночки это вообще нужно только когда надо синхронизировать несколько рабочих копий. Если возникли конфликты — их необходимо разрешить.
  4. Сделанные изменения (доведенные до некоторой логической точки) следует зафиксировать в репозитории. В случае неразрешенных конфликтов — SVN фиксировать откажется. Если конфликт обнаружится в процессе фиксации — вся фиксация отменяется, в этом случае нужно обновить копию и разрешить конфликты. Фиксация атомарна, она или применяется вся, или не применяется вообще. Также она не влияет на параллельно идущие процессы обновления — выполняющие их пользователи получат ту версию, которую начали получать.
  5. Вернуться к пункту 2. Либо, если работа с проектом завершена — удалить РК как обычную папку.
  • Посмотреть текущие изменения по сравнению с базовой версией — status, diff.
  • Сравнить две ревизии файла — diff.
  • Откатить изменения в любом из файлов — revert.
  • Посмотреть историю ревизий файла или проекта — log.

Также стоит учитывать, что однажды залитое в репозиторий останется там навсегда — даже если удалить следующей ревизией, оно останется в той ревизии, в которой попало. Поэтому постарайтесь не заливать случайно файл с паролями или просто ненужный здоровый файл, который навсегда раздует репозиторий своим весом.
Точнее, один метод есть — нужно сдампить репозиторий, профильтровать дамп, удалив из него вредный файл, грохнуть старый репозиторий и создать новый, залив в него профильтрованный дамп. Но это не только сложно, но и требует административного доступа к репозиторию (а точнее — к папке с ним).

Разрешение конфликтов

Если над проектом работает более одного человека — будут неизбежно возникать конфликты. Допустим, есть два пользователя — Гарри и Салли (да, я сперва заглянул в SVN Book, но картинки оттуда тянуть лень). Они работают с одним и тем же файлом А.

Экспорт

Часто бывает нужно получить чистую копию проекта — без папок .svn, например, для публикации архива исходников. Можно скопировать рабочую копию и удалить папки .svn… Правда, они есть и во всех вложенных папках тоже… Когда-то я даже написал утилитку для рекурсивного удаления папки .svn. Но лучше использовать команду export. Она позволяет экспортировать чистую копию как из рабочей, так и непосредственно из репозитория.

Ветви

SVN поддерживает идеологию ветвей — когда независимо от основной линии развития проекта разрабатываются побочные, при этом изменения могут копироваться между ветвями. Правда, поклонники Git утверждают, что поддержка ветвей в SVN говно и недостойна таковой называться. Возможно и правы, Git и правда выглядит очень любопытно и обеспечивает контроль над туевой хучей ветвей ядра Linux (для которого и был создан Торвальдсом).
С ветвями я не работал, поэтому рекомендую почитать на эту тему SVN Book.

Создание репозитория

Чтобы работать с репозиторием, нужен, как ни странно, сам репозиторий. Хорошо, когда подключаешься к существующему проекту — он уже есть. А если проект начинаешь сам? Тогда его необходимо создать. И тут есть два варианта — локальный и удаленный репозитории.

Создание локального репозитория

Прежде всего — надо создать папку под репозиторий. Затем — создать в ней репозиторий командой create (точнее, в случае официального клиента — svnsdmin create). При этом нужно выбрать тип репозиторий — FSFS или BDB. Не буду вдаваться в подробности, но лучше создать FSFS (а свежие версии так и делают по дефолту). Кроме того, BDB репозиторий нельзя создавать на нелокальной файловой системе (например, на подмонтированном сетевом ресурсе) — через некоторое время он просто сломается.
URL для созданного локально репозитория — file:///path/to/repository, например, если репозиторий в папке C:\MyRepository, то его URL — file:///C:/MyRepository.
С локальным репозиторием клиент SVN работает непосредственно — сервер не требуется. Для обслуживания репозитория (как локального, так и выведенного в сеть сервером) предназначена утилита svnadmin.

Свежесозданный репозиторий пуст, имеет нулевую ревизию и непригоден для работы. В него необходимо импортировать начальную версию. Для этого надо создать папку с некоторым начальным содержимым и импортировать ее командой import. После этого можно извлекать рабочую копию и работать с ней, а импортированную папку удалить.

Немного о содержимом этой папки. Вообще, хранить файлы в репозитории можно как угодно, но есть рекомендованный стандарт. Согласно ему в репозитории при импорте создаются пустые папки trunk, branches и tags. Если планируется хранить в репозитории несколько проектов — то для каждого создается папка, а уже в этих папках — папки trunk, branches и tags.

  • trunk — ствол, здесь собственно и хранятся файлы проекта, с которыми ведется работа.
  • branches — ветви, сюда (в свою подпапку для каждой ветви) делаются копии ствола (или других ветвей), с которыми потом можно работать независимо от ствола, а по окончании работы — слить со стволом. В SVN копирование очень дешевая операция — по сути просто запись «сюда сделана копия таких-то файлов такой-то ревизии» в репозитории, поэтому и ветки, и метки на ней сделаны.
  • tags — метки, копии ревизий, соответствующих релизам проекта. В отличие от других VCS, в SVN метки можно модифицировать далее, как обычные ветви. Обычно это считается недостатком, но в принципе, может использоваться для поддержки старых версий проекта (например, текущая версия — 3.1, но некоторые клиенты не хотят переходить на нее с 2.3 и требуют багфиксов к ней — эта работа может производиться в метке /tags/2.3, не затрагивая текущую версию).
Удаленный репозиторий

Удаленный репозиторий может быть в локальной сети и в интернете.
В первом случае (а также во втором, когда репозиторий на своем хостинге) на хосте репозитория следует поднять и настроить SVN сервер — родной svnserve (говорят, крайне дыряв) или на основе apache+webdav или иной SVN-плагин. Но это тема не этой статьи, да и не знаком я с ней.
Но есть еще один вариант — это SVN-хостинги. Их немало, как платных, так и бесплатных. Они предоставляют уже готовый репозиторий, а если и нет — то сами расскажут, как его создать. Лично я пользуюсь хостингом от гугла. Остальных — доставит он же :)
Репозиторий в интернете позволяет синхронизировать свои рабочие копии на разных компах, а также работать над проектом вместе с другими людьми, возможно на другом конце мира. А также, при желании — предоставлять всем желающим доступ (на чтение) к самой свежей версии исходников.

Круто. А где взять?

На официальном сайте, теперь под крылышком у Apache. Однако, официальный клиент — это кроссплатформенная консольная программа. Не всем они нравятся, хотя свои плюсы у них есть. Поэтому существуют альтернативные клиенты и оболочки на официальный консольный клиент.


Лично мне нравится TortoiseSVN — это GUI-клиент (т.е. в отличие от оболочки он выполняет действия сам, а не передает их консольной программе svn), выполненный как расширение Проводника Windows. Вся работа с ним производится через контекстное меню Проводника. Также совместимо с Total Commander и ему подобными файл-менеджерами (теми, которые запрашивают иконки файлов у винды и умеют показывать контекстное меню Проводника). Поклонникам FAR'а и других операционок могу порекомендовать только гугл. Также TortoiseSVN показывает состояние файлов, накладывая оверлеи на их иконки. Благодаря этому с первого взгляда видно состояние рабочей копии — модифицированные файлы, конфликты и так далее.
Стоит также обратить внимание на то, что TortoiseSVN добавляет свои пункты в контекстное меню, показываемое при перетаскивании файлов/папок правой кнопкой мыши. Там такие полезные команды, как Export, Copy, Move.
Алсо, в разделе языковых пакетов к TortoiseSVN имеется годный мануал в PDF, на русском. Рекомендую почитать, это своеобразный аналог SVN Book для TortoiseSVN.

Настройки TortoiseSVN

Настройки вызываются через контекстное меню проводника, вызванное на любом объекте, пункт TortoiseSVN->Settings. Их там довольно много, опишу основные.


Здесь следует настроить Global ignore pattern — список масок файлов, которые SVN будет игнорировать — т.е. не предлагать их добавить, зафиксировать и т.д. Сюда следует внести различные временные файлы — на скриншоте, например, внесены файлы, создаваемые Delphi версий по 7-ю. Здесь же можно поменять язык, русский поддерживается — но не гарантирую совпадение терминологии, т.к. пользуюсь английской версией.


Здесь внимания заслуживает Status cache. Выбранный вариант обеспечивает рекурсивную проверку статуса — папка будет помечена как модифицированная даже если модифицированный файл в одной из ее подпапок.
При снятой галочке «Show overlays and context menu only in explorer» можно использовать TSVN из менеджеров вроде Total Commander.
Галочки Show overlay for позволяют отключить назойливые метки на файлах, не находящихся под присмотром SVN.
Галочки в поле Drive Types позволяют отвадить SVN от проверки на модификации медленные носители и флешки (последнее — чтобы оно не мешало их извлекать), а также от заданных дисков.

На вкладке Network можно настроить доступ к сети и выбрать клиент для SSH, но у меня там значения по умолчанию (разве что, ЕМНИП, я вручную указал использовать прилагающийся к TortoiseSVN TortoisePLink.exe как клиент SSH).

На вкладке Saved data можно почистить истории и сохраненные данные аутентификации.

На вкладке Hook scripts можно добавить программы, срабатывающие при определенных событиях. У меня там, например, внесен скрипт, срабатывающий после обновления одной из РК.

На остальных вкладках (кроме рассмотренных далее) преимущественно настройки вида и поведения. Можно настроить их на свой вкус или удовлетвориться дефолтными.

Свистелки и перделки

На TortoiseSVN можно навешать некоторое количество дополнений, расширяющих возможности. Итак, по порядку.

Внешние Diff/Merge

Хотя к TortoiseSVN прилагается родная программа TortoiseMerge, мне больше нравятся WinMerge для сравнения файлов (он подсвечивает изменения внутри строк, позволяет редактировать файл прямо в нем и умеет подсвечивать синтаксис для многих языков, но не умеет сравнивать три файла) и KDiff3 (удобная программа для сравнения и слияния трех файлов, изначально созданная под KDE). Кроме них интерес могут представлять Beyond Compare, Structured Difference Viewer, утилиты Diff/Merge из состава Perforce и Borland StarTeam (или как его там, не помню уже) — но из них бесплатны только две последние.

Настраиваются эти утилиты в разделе External Programs, в прилагаемом хелпе есть командные строки для многих распространенных программ. В моем случае это
для обоих вариантов на вкладке Diff и
для вкладки Merge.

Интеграция с багтрекерами

Осуществляется плагинами, список их можно найти на сайте TortoiseSVN. После установки плагина его можно подключить к соответствующей РК на вкладке Hook Scripts->Issue Tracker Integration.

CommitMonitor

Пара глазок, которые сидят в трее и периодически проверяют указанные репозитории на наличие обновлений. Иногда полезно. Обитает вместе с другими полезняшками в разделе Other Tools сайта TortoiseSVN.

Читайте также: