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

Svn

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

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

Тукс

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

Good.png Це — добра стаття 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 primer.jpg

  • Оновлення робочої копії з репозиторію (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

[ред.] Моделі використання

Svn cycle.jpg

  • Блокування-Зміна-Розблокування (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


[ред.] Посилання

Відео:

Тексти:

Особисті інструменти
Простори назв
Варіанти
Дії
Навігація
Інструменти