И так, у нас имеется уже настроенное 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'. ------------------------------------------------------------------------ ...
Очень удобное и подробное руководство можно найти тут>>>.