Множество руководств в сети предоставляют достаточно запутанный материал.
Данное слововторчество предназначено для запоминания усвоенного.
Итак, 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'ом.