SVN: примеры использования

Автор: | 28/09/2013
 

svn_logoИ так, у нас имеется уже настроенное SVN-хранилище, как описано в статье CentOS: установка и настройка Subversion + Apache.

Посмотрим что у нас есть в локальном репозитории:

$ svn ls file:///var/www/svn/foo/

Ничего. Посмотрим что в логе SVN:

$ svn log file:///var/www/svn/foo/
------------------------------------------------------------------------

Тоже ничего.

Теперь – приступим к наполнению нашего хранилища.

Для начала – создадим локальную рабочую копию проекта:

$ cd /tmp
$ svn checkout https://www.somehost.com/svn/repos/project/branches/releases

Тут надо немного  пояснить. В примере у нас используется два хранилища: одно “внешнее” – из которого мы только скопируем нужную информацию, и одно – наше локальное. Так же – необходимо понять разницу между “локальной рабочей копией” проекта, и “локальным SVN-хранилищем“. Рабочая копия – каталог, в котором мы будем редактировать файлы, после чего коммитить (загружать) их в наш локальный SVN-репозиторий, что бы дать к ним доступ остальным пользователям сети.

Ожидаем окончания checkout:

...
Checked out revision 8728.

Всё, с удалённым хранилищем мы пока дел иметь не будем, у нас имеется полная локальная копия:

$ ls -l releases/
Project1/
Project12/
Project13/
current_Project1/
following_Project1/
following_Project1_copy/
next_Project1/

Перенесём проект в наш локальный репозиторий, который располагается в каталоге /var/www/svn/foo/:

Для этого используем команду import:

$ svn import -m "Add project" releases/ file:///var/www/svn/foo/

Опция -m используется для добавления комментария к действию.

Ещё раз посмотрим лог:

$ svn log file:///var/www/svn/foo
------------------------------------------------------------------------
r1 | teamcity | 2013-09-28 12:15:10 +0300 (Sat, 28 Sep 2013) | 1 line

Add project
------------------------------------------------------------------------

Видим что действие импорта с нашим комментарием появилось.

Проверим само хранилище:

$ svn ls file:///var/www/svn/foo/
Project1/
Project12/
Project13/
current_Project1/
following_Project1/
following_Project1_copy/
next_Project1/

Вместо ls можно использовать list.

Создадим каталог, в котором мы будем работать с файлами проекта:

$ mkdir work
$ cd work/
$ pwd
/home/teamcity/work

Перенесём необходимый каталог из локального хранилища в рабочий каталог:

$ svn checkout file:///var/www/svn/foo/Project1
...
Checked out revision 1.
$ ls -l
total 4
drwxrwxr-x 18 teamcity teamcity 4096 Sep 28 12:23 Project1

Создадим в каталоге новый файл:

$ cd Project1
$ touch setevoy_test_file

Видим, что SVN отследил изменения в каталоге:

$ svn status
?       setevoy_test_file

Добавим текст в этот файл:

$ echo "Wow" > setevoy_test_file

Теперь надо добавить этот файл к нашему проекту:

$ svn add setevoy_test_file
A         setevoy_test_file

Статус изменился с ? на А (added):

$ svn status
A       setevoy_test_file

Добавляем файл в локальное хранилище:

$ svn commit -m "Added first file" setevoy_test_file
Adding         setevoy_test_file
Transmitting file data .
Committed revision 2.

Вернёмся в лог-файлу:

$ svn log file:///var/www/svn/foo/
------------------------------------------------------------------------
r2 | teamcity | 2013-09-28 12:29:27 +0300 (Sat, 28 Sep 2013) | 1 line

Added first file
------------------------------------------------------------------------

И посмотрим на сам файл:

$ svn cat http://localhost/svn/Project/setevoy_test_file
Wow

Добавим ещё текста в наш файл:

$ echo "Wow-2" >> setevoy_test_file
$ svn status
M       setevoy_test_file

Теперь статус отображается буквой М (modified). Повторяем действия и коммитим (добавляем) его в хранилище:

$ svn commit -m "Edited first file" setevoy_test_file
$ svn log file:///var/www/svn/foo/
------------------------------------------------------------------------
r3 | teamcity | 2013-09-28 12:47:05 +0300 (Sat, 28 Sep 2013) | 1 line

Edited first file

Получить информацию о каталоге или файле в локальной копии проекта можно командой info:

$ svn info c/setevoy_test_file
Path: Project/setevoy_test_file
Name: setevoy_test_file
URL: file:///var/www/svn/foo/Project/setevoy_test_file
Repository Root: file:///var/www/svn/foo
Repository UUID: 12784f1e-5529-4ae2-8647-28593d961962
Revision: 2
Node Kind: file
Schedule: normal
Last Changed Author: teamcity
Last Changed Rev: 2
Last Changed Date: 2013-09-28 12:29:27 +0300 (Sat, 28 Sep 2013)
Text Last Updated: 2013-09-28 12:26:11 +0300 (Sat, 28 Sep 2013)
Checksum: ee288c144b8511a4918d0dae5a98ce4f

Посмотреть список изменений можно командой blame:

$ svn blame http://localhost/svn/Project/setevoy_test_file
2   teamcity Wow
3   teamcity Wow-2

В первой колонке отображается номер ревизии, во второй – пользователь, вносивший изменения, и в третьей – сами изменения.

Восстановить файл/каталог можно следующим образом.

Допустим – у нас имеется файл:

$ svn info setevoy_test_file | grep Rev
Revision: 6
Last Changed Rev: 6

И мы хотим восстановить его до предыдущей версии – 5.

Для этого – выполняем:

$ svn merge -r 6:5 setevoy_test_file
--- Reverse-merging r6 into 'setevoy_test_file':
U    setevoy_test_file
$ svn commit -m "Restored s2 file" setevoy_test_file
Sending        setevoy_test_file
Transmitting file data .
Committed revision 7.
$ svn log file:///var/www/svn/lms/
...
------------------------------------------------------------------------
r6 | teamcity | 2013-09-28 13:39:45 +0300 (Sat, 28 Sep 2013) | 1 line

Restored s2 file
...

Что бы удалить файл или каталог из рабочего каталога – используйте опцию delete:

$ svn delete --force setevoy_test_file
D         setevoy_test_file

$ svn commit -m "Deleted files 'setevoy_test_files'."

В случае ошибки:

svn: Commit failed (details follow):
svn: Aborting commit: '/home/teamcity/work/Project/setevoy_test_file' remains in conflict

Можно попробовать выполнить resolved:

$ svn resolved setevoy_test_file
Resolved conflicted state of 'setevoy_test_file'
$ svn commit -m "Deleted file 'setevoy_test_files'."
Deleting       setevoy_test_file

Committed revision 8.

Проверим лог:

$ svn log file:///var/www/svn/lms/
------------------------------------------------------------------------
r8 | teamcity | 2013-09-28 13:47:30 +0300 (Sat, 28 Sep 2013) | 1 line

Deleted file 'setevoy_test_files'.
------------------------------------------------------------------------
...

Очень удобное и подробное руководство можно найти тут>>>.