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

No comments on Работа с Subversion в Mac OS X

Written by

in

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

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

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

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

$ cd ~/ 

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

$ pwd

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

$ svnadmin create SVNrep

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

$ svn import /Users/UserName/Desktop/ProjectName
  file:///Users/UserName/SVNrep/ -m "Initial import"

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

$ cd ~/SVNrep
$ ls -a1

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

$ svn export file:///Users/UserName/SVNrep/
 /Users/UserName/Desktop/ProjectNameWebSafe

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

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

$ svn checkout file:///Users/UserName/SVNrep/
 /Users/UserName/Desktop/ProjectNameCopy

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

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

$ svn import /Users/UserName/Desktop/ProjectName  
http://HostName/svn/ProjectRepositoryName/ -m "Initial import"

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

$ svn checkout http://HostName/svn/ProjectName/
 /Users/UserName/Desktop/WorkProjectFolder

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

$cd /Users/UserName/Desktop/WorkProjectFolder/
$ svn status

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

M test.txt

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

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

$ svn commit -m "Added and removed some test files"

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

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

$ svn update
Restored 'Medicine/Снимок экрана 2011-12-02 в 17.42.18.png'
At revision 11.

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

$ svn log

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

$ svn diff -r 1

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

$ svn update -r 1

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

$ svn update test.txt -r 1

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

$ svn add TestFolder 
A         TestFolder
$ svn commit -m "added new folder TestFolder"
Adding         TestFolder
Committed revision 12.

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

$ svn delete test2.txt
$ svn commit -m "deleted file"

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

$ svn move oldfilename newfilename
$ svn commit -m "moved file"

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

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

$ svn commit -m "Some change by Michael"
Sending test.txt
svn: Commit failed (details follow):
svn: Out of date: '/test/test.txt' in transaction '3-1'

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

test.txt.mine
test.txt.r2
test.txt.r3

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

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

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

Comments

Leave a Reply

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