Svn

Матеріал з USIC Wiki

(Перенаправлено з UsicSVN)
Перейти до: навігація, пошук
Для ФІН

Ця стаття відноситься до групи довідкових статей для студентів ФІН.

Тукс

Ця стаття описує програмне забезпечення Інтернет-центру.

Зміст

Про 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


Посилання

Відео:

Тексти:

Особисті інструменти