|
Тепер статті може редагувати кожен. Приєднуйтесь до нашої вікі-спільноти! |
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

