Работа с Subversion в Mac OS X

Здесь я опишу основы работы с SubVersion в Mac OS X, начиная от создания репозитория и заканчивая редактированием и обновлением версий.

Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.

Модель работы
Subversion — централизованная система (в отличие от распределённых систем, таких как Git или Mercurial), то есть данные хранятся в едином хранилище. Хранилище может располагаться на локальном диске или на сетевом сервере.
Работа в Subversion мало отличается от работы в других централизованных системах управления версиями. Клиенты копируют файлы из хранилища, создавая локальные рабочие копии, затем вносят изменения в рабочие копии и фиксируют эти изменения в хранилище. Несколько клиентов могут одновременно обращаться к хранилищу. Для совместной работы над файлами в Subversion преимущественно используется модель копирование — изменение — слияние. Кроме того, для файлов, не допускающих слияние (различные бинарные форматы файлов), можно использовать модель блокирование — изменение — разблокирование.
При сохранении новых версий используется дельта-компрессия: система находит отличия новой версии от предыдущей и записывает только их, избегая дублирования данных.

Приемы работы
Открываем Терминал. Перейдем в корневую папку для данного пользователя:

С помощью следующей команды можно узнать путь к этой и любой другой папке:

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

Копируем начальную версию нашего проекта, предварительно узнав путь к нему, в созданный репозиторий:

Здесь после -m идет комментарий. После import идет путь к папке проекта, затем путь к репозиторию. Обратите внимание, что нужно указать еще слово file в начале пути к репозиторию. В данном случае в репозитории SVNrep будет все, что есть внутри ProjectName. Проверить это можно, перейдя к папке SVNrep и используя команду ls с параметром a1, который ознчает, что будет показано все, включая скрытые папки и файлы:

Не удивляйтесь, что кроме Ваших файлов, есть еще куча других, в том числе папка .svn во всех вложенных папках – это служебные файлы svn, которые нужны для того, чтобы каждый раз не указывать путь к репозиторию в дальнейшем. Если Вы хотите изъять теперь из репозитория копию проекта без этих файлов и создать безопасную для Web копию, через которую нельзя воздействовать на репозиторий, введите следующую команду:

Здесь мы создаем копию проекта без служебных файлов на рабочем столе.

Для того, чтобы создать рабочую копию репозитория SVN, введите команду:

Рабочая копия в отличие от Web Safe копии позволяет сохранять изменения, созданные в рабочей копии, в репозитории.

Предположим теперь, что наш репозиторий находится на сервере где-то.
Копируем наш проект(первую версию) с локального компьютера в репозиторий на сервере:

Теперь создаем рабочую копию у себя с сервера:

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

Если Вы увидите, например, такой текст:

это означает, что файл test.txt был модифицирован (“M” = Modified). Добавление, удаление и переименовывание объектов необходимо осуществлять специальными командами.

Теперь нужно сделать Commit произведенных в рабочей копии изменений, чтобы они отразились на сервере в репозитории:

После добавления, удаления и переименовывания нужно также делать commit.

Предположим, что пока вы работали с рабочей копией, кто-то успел добавить новые файлы в Ваш проект. Чтобы обновить рабочую копию, нужно использовать команду update. Здесь пример с результатом update, как пример – восстановлена фотография.

Чтобы просмотреть все Revisions, используем команду log. При этом отображается число строк измененных и комментарии:

Чтобы просмотреть только измененные строки в сорс-файлах в определенном Revision (версии), используем следующий синтаксис:

Если Вы захотите откатиться к предыдущей версии (любой), делаем update, но только указываем еще номер Revision (версии):

Этот update подействует на весь проект. Но если вы хотите проапдейтить определенный файл, нужно его указать:

Добавление файлов производится вручную. Недостаточно просто создать новый файл в рабочей копии и сделать commit. Нужно его еще добавить в репозиторий. Например, создаем сначала папку в нашем проекте под названием TestFolder. Затем нужно ее прописать в SVN и сделать commit, чтобы она появилась в репозитории на сервере:

Аналогично производится удаление:

И переименовывание:

Удаление и переименовывание не нужно делать в Finder. Эти команды сами удаляют и переименовывают как в рабочей копии, так и в репозитории.

Если возникает конфликт при commit’е, нужно сначала сделать update, а затем commit. При этом SVN строчка за строчкой сам добавляет недостающие строки в Вашу копию.

Если SVN не справляется с этим, то он создает копии файлов в Вашей рабочей копии проекта:

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

Ссылки для изучения:

http://www.rubyrobot.org/tutorial/subversion-with-mac-os-x – хорошая статья на эту же тему на английском языке

Leave a Reply

Your email address will not be published. Required fields are marked *