Svn
Матеріал з USIC Wiki
Про Subversion
Subversion — централізована система керування версіями. Сховище може знаходитися на локальному диску або на мережевому сервері. Доступ до репозиторія може відбуватися через наступі протоколи: file://, http://, https://, svn://, svn+ssh://. Репозиторії проектів USIC-а доступні через протокол http://, список репозиторіїв доступний за адресою http://svn.usic.org.ua/svnroot/.
Поняття
- Репозиторій (repository) - сховище файлів (разом з службовою інформацією, історією змін тощо).
- Ревізія (revision) - номер версії файлу, репозиторію.
- Робоча копія (workspace) - локальна копія файлу або репозиторію (можна мати кілька робочих копій на клієнтській машині).
- Гілки (branch) - паралельні процеси еволюції коду. Однакова історія до розгалуження і різна після. Добре мати окремі гілки для обліку помилок або перевірки експериментальних ідей. Гілки зливають між собою, або з основним стовбуром розробки (trunk).
- Мітки (tags) - (заморозка) символьне ім'я для групи ревізій/файлів. Використовується для релізу.
- Конфлікт - ситуація, коли декілька користувачів зробили зміни однакової частини файлу. Конфлікт можна виявити (під час однієї з операцій commit, update), коли один користувач вже опублікував свої зміни, а інший робить спробу опублікувати і система (Subversion) сама не в змозі коректно злити конфліктуючі зміни.
Маркери конфлікту вставляються системою безпосередньо в текстові файли, в який відбулися конфліктуючі зміни, в такому вигляді:
<<<<<<< .mine my test ======= other text >>>>>>> .r4
Це дозволяє вручну відредагувати файл (тобто злити зміни), і відмітити конфлікт як вирішений командою resolve.
Інші способи вирішення конфліктів:
- Залишаємо власну копію
- Використовуємо копію з репозиторію (svn update)
Робочий цикл роботи з Subversion
- Оновлення робочої копії з репозиторію (svn update) або її створення (svn checkout).
- Зміна робочої копії:
- нові (ще не зафіксовані в репозиторії) файли та каталоги потрібно додати (svn add), тобто передати під керування версіями.
- якщо файл або каталог в робочій копії потрібно видалити, перейменувати, перемістити, скопіювати то потрібно використовувати засоби Subversion ( svn mkdir, svn delete, svn move, svn copy)
- перегляд стану робочої копії і локальних (ще не зафіксованих) змін (svn info, svn status, svn diff)
- від будь-яких локальних змін, які виявилися невдалими, можна відмовитись (svn revert)
- При потребі можна отримати додаткові зміни, які буди зафіксовані іншими користувачами и виконати злиття (svn update).
- Фіксування своїх змін (також результатів злиття) в репозиторії (svn commit).
Встановлення клієнта
Клієнт з CLI для Linux
$ sudo apt-get install subversion # Ubuntu/Debian $ sudo emerge dev-vcs/subversion # Gentoo $ sudo yum -y install subversion # CentOS
Для Windows клієнт TortoiseSVN
Виконання базових операцій
Перегляд вмісту репозиторію (list)
$ svn list --username USER svn+ssh://PATH_TO_REPO $ svn list -R --username USER svn+ssh://PATH_TO_REPO
Створення робочої копії (checkout)
$ svn checkout --username USER svn://PATH_TO_REPO
або
$ svn co --username USER svn://PATH_TO_REPO
Ця команда завантажує вміст репозиторію в поточний каталог на вашому комп'ютері та робить її спеціального типу SVN.
Для отримання конкретної ревізії використовується параметр -r та номер ревізії
$ svn co -r 6 svn://PATH_TO_REPO
Оновлення (update)
Оновлення робочої копії до поточної версії, що знаходиться в репозиторії
$ svn update
Оновлення потрібно робити перед кожним збереженням змін в репозиторії (commit). Ця операція може стати причиною виникнення конфліктів. Тому треба зважати на їх вирішення.
Збереження змін в репозиторії (commit)
Ця операція може стати причиною виникнення конфліктів.
$ svn commit -m "COMMENT"
або (ci від check in)
$ svn ci -m "COMMENT" $ svn ci -F FILE_WITH_COMMENT $ svn ci -m "change one file" FILE_NAME
Інші параметри
--username USER --password PASS
Оголошення про вирішення конфліктів (resolved)
При виникненні конфлікту та вирішені його вручну для підтвердження, що робоча копія є найкращою
$ svn resolved $ svn resolved FILE_NAME
Потім потрібно зробити коміт
$ svn ci -m "COMMENT"
Створення нового каталогу в репозиторії (mkdir)
$ svn mkdir --username USER svn+ssh://PATH_TO_REPO/NEW_DIR_NAME -m "COMMENT"
Додавання нового файлу/каталогу до проекту (add)
Кожного разу коли ви створюєте новий файл потрібно додати його до проекту
$ svn add FILE_NAME
Спочатку файл буде доданий в робочу копію, а після наступного коміту він з'явиться в репозиторії.
Для рекурсивного проходження по всіх каталогах (тих які знаходились та не знаходились під контролем версій)
$ svn add * --force
В кінці додавання робимо коміт
$ svn commit -m "add new FILE_NAME"
Видалення файлу з репозиторію (delete)
Видалення з репозиторію виконається при наступному кіміті. Оскільки SVN зберігає історію змін, випадкове видалення можна виправити.
$ svn delete FILENAME $ svn commit -m "FILENAME was deleted"
або зразу з репозиторія
$ svn delete -m "FILENAME was deleted" svn://PATH_TO_REPO/FILENAME
Відмова від всіх попередніх змін (revert)
В ситуації коли зміни в робочій копії не призвели до бажаних результатів та потрібно повернутися до версії останнього коміта.
$ svn revert
Показати зміни в версіях (info, log, status, diff, blame | annotate | praise)
Переглянути інформацію про версію, що знахолиться в репизиторії (info)
$ svn info svn://PATH_TO_REPO
Пергляд журналу змін в репозиторії
$ svn log
Очистка робочої копії (cleanup)
Рекурсивне очищення робочої копії, видаляє блокування та виконує незавершені операції. Коли винакає помилка типу "робоча копія заблокована", потрібно запустити команду для відновлення працездатності робочої копії.
$ svn cleanup
Отримання довідки (help)
Щоб довідку про певну команду виконуємо
$ svn help CMD
Приклад
$ svn help commit
Моделі використання
- Блокування-Зміна-Розблокування (Lock-Modify-Unlock). Добре використовувати для бінарних файлів, картинок тощо.
- Копіювання-Зміна-Злиття (Copy-Modify-Merge) — основна модель використання Subversion
Загальна структура репозиторію
- trunk
- крайовий реліз
- повинен компілюватися (інтерпретуватися)
- ніколи прямо не працюють в trunk
- tags
- релізи, версії, «миттєві знімки» (snapshots) репизиторію
- створюється раз, ніколи не модифікується
- branches
- тут проводиться основна частина розробки, перевірка нових можливостей та ідей, тестування тощо
Клієнти
Клієнти з GUI
- RapidSVN — крос-платформовий клієнт, написаний на C++ з використанням wxWidgets
- KDESvn — клієнт для KDE
- SmartSVN — крос-платформовий клієнт, написаний на Java
- TortoiseSVN — розширення оболонки Microsoft Windows
- QSvn - крос-платформовий клієнт, написаний на C++ з використанням Qt
Клієнти з CLI
- svn - клієнт командного рядка для Linux і подібних
- SlikSVN - клієнт командного рядка для Windows
Плагіни для IDE
- Subclipse — плагін для середовища розробки Eclipse
- Subversive — ще один плагін для середовища розробки Eclipse
- AnkhSVN — плагін для Visual Studio
Посилання
Відео:
- Введение в Subversion. Часть 1. (Теорія)
- Введение в Subversion. Часть 2. (Теорія та опис деяких команд)
Тексти:
- Subversion visually explained in 30 sec
- книга "Управление версиями в Subversion"
- короткий довідник по серверу з ubuntu.com
- стаття на українській вікіпедії
- стаття на російській вікіпедії
- невеличка стаття від vamel
- The 10 commandments of good source control management
- Subversion: чеклист по правильным коммитам
- Документація по TortoiseSVN та трохи про Subversion


