HOWTO Работа с svn репозиторием.

Feb 16, 2009 18:32



Множество руководств в сети предоставляют достаточно запутанный материал.
Данное слововторчество предназначено для запоминания усвоенного.

Итак, svn служит для контроля версий документов. все операции с репозиторием, по сути,
составляют 2 действия - загрузка новых измененных файлов в новую ревизию и выгрузку этих ревизий
в локальную папку. При условии если локальная папка является working copy - т.е. рабочей папкой для данного репозитория.

Рабочая папка - это папка в которой кроме файлов хранится так же некая директория .svn - в ней содержится база данных по каждой ревизии.

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

Итак, изначально нам нужно создать репозиторий

svn admin create self

После чего наполнить его начальным контентом
Создадим директорию

mkdir test

и зайдем в нее

cd test

создадим так же там один файл

touch one

и теперь импортируем папку в репозиторий

svn import -m'First' file:///media/disk/repository/self

импорт текущей директории в указанный репозиторий c мессаджем 'First'. (импортировать можно только в чистый репозиторий, только что созданный).

Итак, у нас теперь есть репозиторий с начальным контентом.

В папке из которой мы делали импорт появляется подпапка .svn. И теперь папка test является Working copy (рабочей копией) нашего репозитория.

Теперь мы создаем в нашей локальной папке test новый файл

touch two

посмотрим теперь статус по нашей директории

svn status

(смотреть на статус working copy - какие папки внесены в репозиторий, какие нет)
нам выведется на экран

? two

это значит что файл two не добавлен в локальную базу данных
его нужно добавить в локальную базу нашей рабочей копии

svn add --force *

(добавить все папки и файлы в локальную базу данных working copy)

теперь мы можем сделать

svn commit -m'Second'

записать изменения из локальной базы данных репозитория в репозиторий с комментарием 'Second'.
Все команды соответственно вводим в корне нашей рабочей копии.

Для обновлении информации из репозитория - можно воспользоваться командой

svn update

Если мы хотим загрузить определенную ревизию папки

svn update -r 2 out/self/web/new

загрузить из репозитория вторую ревизию указанной папки (/web/new). По умолчанию грузится последняя ревизия указанной папки.

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

2. Копирование файлов из репозитория.

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

svn checkout file:///media/disk/repository/self new/

создать директорию new и записать в нее все из репозитория self
Обращаем внимание что если мы напишем /new - т.е. слеш перед папкой то директория создастся в корне т.е. в / .

Теперь папка new - у нас рабочая копия.

А что если мы хотим уже существующую папку но не являющуюся рабочей копией сравнить с папкой в репозитории?

svn checkout --force file:///media/disk/repository/self/ test/

В таком случае папка test станет рабочей копией и в нее скопируются все недостающие файлы.

ну и конечно не забываем про возможность сделать
svn export в директорию а потом diff между ней и той которую мы хотим сравнить (можно сделать сравнение средствами mc).
Так же это возможно сделать rsync'ом.

system, mandriva

Previous post Next post
Up