Технологический семинар: Системы контроля версий
DESCRIPTION
* История систем контроля версий * Основные понятия * Централизованные системы контроля версий (CVS, SVN) * Распределенные системы контроля версий (Git, Mercurial) * Основы работы в GitTRANSCRIPT
![Page 1: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/1.jpg)
Лекция 4. Системы контроля версий
www.compscicenter.ru 1
Толстиков Никита [email protected]
СS центр
12.03.2014
![Page 2: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/2.jpg)
Системы контроля версий
www.compscicenter.ru 2 12.03.2014
• Системы управления версиями (Version Control Systems, VCS) или Системы управления исходным кодом (Source Management Systems, SMS) — важный аспект разработки современного ПО.
• VCS предоставляет следующие возможности: o Поддержка хранения файлов в репозитории. o Поддержка истории версий файлов в репозитории. o Нахождение конфликтов при изменении исходного кода и обеспечение синхронизации при работе в многопользовательской среде разработки.
o Отслеживание авторов изменений.
![Page 3: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/3.jpg)
Классификация :
www.compscicenter.ru 3 12.03.2014
• Централизованные/распределённые — в централизованных системах контроля версий вся работа производится с центральным репозиторием, в распределённых — у каждого разработчика есть локальная копия репозитория.
• Блокирующие/не блокирующие — блокирующие системы контроля версий позволяют наложить запрет на изменение файла, пока один из разработчиков работает над ним, в неблокирующих один файл может одновременно изменяться несколькими разработчиками.
• Для текстовых данных/для бинарных данных — для VCS для текстовых данных очень важна поддержка слияния изменений, для VCS с инарными данными важна возможность блокировки.
![Page 4: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/4.jpg)
Классификация :
www.compscicenter.ru 4 12.03.2014
• Централизованные/распределённые — в централизованных системах контроля версий вся работа производится с центральным репозиторием, в распределённых — у каждого разработчика есть локальная копия репозитория.
• Блокирующие/не блокирующие — блокирующие системы контроля версий позволяют наложить запрет на изменение файла, пока один из разработчиков работает над ним, в неблокирующих один файл может одновременно изменяться несколькими разработчиками.
• Для текстовых данных/для бинарных данных — для VCS для текстовых данных очень важна поддержка слияния изменений, для VCS с инарными данными важна возможность блокировки.
![Page 5: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/5.jpg)
Ежедневный цикл работы
www.compscicenter.ru 5 12.03.2014
Обычный цикл работы разработчика выглядит следующим образом:
1. Обновление рабочей копии. Разработчик выполняет операцию обновления рабочей копии (update) насколько возможно
2. Модификация проекта. Разработчик локально модифицирует проект, изменяя входящие в него файлы в рабочей копии.
3. Фиксация изменений. Завершив очередной этап работы над заданием, разработчик фиксирует (commit) свои изменения, передавая их на сервер. VCS может требовать от разработчика перед фиксацией выполнить обновление.
![Page 6: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/6.jpg)
Централизованные VCS
www.compscicenter.ru 6 12.03.2014
![Page 7: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/7.jpg)
Распределенные VCS
www.compscicenter.ru 7 12.03.2014
![Page 8: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/8.jpg)
Основные термины
www.compscicenter.ru 8 12.03.2014
working copy — рабочая (локальная) копия документов. repository, depot — хранилище. revision — версия документа. Новые изменения (changeset) создают новую ревизию репозитория. check-‐in, commit, submit — фиксация изменений. check-‐out, clone — извлечение документа из хранилища и создание рабочей копии. update, sync — синхронизация рабочей копии до некоторого заданного состояния хранилища (в т.ч. и к более старому состоянию, чем текущее). merge, integra9on — слияние независимых изменений. conflict — ситуация, когда несколько пользователей сделали изменения одного и того же участка документа. head — самая свежая версия (revision) в хранилище. origin — имя главного сервера
![Page 9: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/9.jpg)
Ветвление
www.compscicenter.ru 9 12.03.2014
Ветвь (branch) — направление разработки проекта, независимое от других. Ветвь представляет собой копию части (как правило, одного каталога) хранилища, в которую можно вносить свои изменения, не влияющие на другие ветви. Документы в разных ветвях имеют одинаковую историю до точки ветвления и разные — после неё. Изменения из одной ветви можно переносить в другую. Ствол (trunk, mainline, master) — основная ветвь разработки проекта.
![Page 10: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/10.jpg)
Пример ветвления в проекте
www.compscicenter.ru 10 12.03.2014
![Page 11: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/11.jpg)
CVS
www.compscicenter.ru 11 12.03.2014
Одна из наиболее старых систем контроля версий. Создана в 1984 году как развитие RCS (Revision Control System), которая не поддерживала совместную работу. Недостатки:
• Невозможно переименовать файл или директорию так, чтобы это изменение было отражено в истории. • Ограниченная поддержка юникода и не-‐ASCII имен. • Публикации изменений не атомарны. • Наборы изменений не поддерживаются. • Неэффективное хранение бинарных файлов. • Оригинальный GNU CVS не поддерживает разграничения прав между пользователями репозитория.
![Page 12: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/12.jpg)
Subversion, SVN
www.compscicenter.ru 12 12.03.2014
Subversion, SVN — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc. • Копирование объектов с разветвлением истории. • Поддержка ветвления: создания ветвей (копированием директорий) и слияние ветвей (переносом изменений) • Поддержка меток (копированием директорий). • Поддержка разделение прав пользователей. • История изменений и копии объектов (в том числе ветви и метки) хранятся в виде связанных разностных копий. • Атомарная фиксации изменений в хранилище.
![Page 13: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/13.jpg)
Subversion, SVN
www.compscicenter.ru 13 12.03.2014
![Page 14: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/14.jpg)
Пример работы SVN
www.compscicenter.ru 14 12.03.2014
$ svn co http://projects.com/svn/myproject –username user $ cd myproject ..change project.. $ svn log $ svn st $ svn add newfile.cpp $ svn rm oldfile.cpp $ svn commit -‐m"Mega enhancement" ..next day.. $ svn up
![Page 15: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/15.jpg)
GIT
www.compscicenter.ru 15 12.03.2014
Помните этого парня?
![Page 16: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/16.jpg)
GIT
www.compscicenter.ru 16 12.03.2014
В 2005 году он решил запилить свою VCS с простыми мерджами и децентрализированной структурой. Достоинства:
• Простая работа с ветками • Развитые средства интеграции с другими VCS • Продуманная система команд, позволяющая удобно встраивать git команды в скрипты
• Репозитории git могут распространяться и обновляться общесистемными файловыми утилитами, такими как rsync
Недостатки: • Отсутствие переносимой на другие операционные системы поддержки путей в кодировке Unicode
• Команды ориентированы на наборы изменений, а не на файлы. • Использование для идентификации ревизий хешей SHA1 • Проблемы с производительностью
![Page 17: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/17.jpg)
GIT
www.compscicenter.ru 17 12.03.2014
![Page 18: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/18.jpg)
Работа с GIT
www.compscicenter.ru 18 12.03.2014
0. Настройка Git Задать конфигурации $ git config -‐-‐global -‐-‐list Изменить имя и email: $ git config -‐-‐global user.name “Super.User” $ git config -‐-‐global user.email “[email protected]” Определить протокол передачи данных:
• FILE — мы имеем прямой доступ к файлам репозитория. • SSH — мы имеем доступ к файлам на сервере через ssh. • HTTP(S) — используем h�p в качестве приёма/передачи.
![Page 19: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/19.jpg)
Рабоат с GIT
www.compscicenter.ru 19 12.03.2014
2. Сделать изменения $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # README nothing added to commit but untracked files present (use "git add" to track)
1. Клонировать или создать новый репозиторий или обновить текущий
$ git init или $ git clone [email protected]:user/repo.git или $ git pull
![Page 20: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/20.jpg)
Работа с GIT
www.compscicenter.ru 20 12.03.2014
3. Сделать изменения и добавить их $ git add README $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README #
3. Commit changes: $ git commit –m “Add README file”
4. Pull changes: $ git push
![Page 21: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/21.jpg)
Merge and GIT
www.compscicenter.ru 21 12.03.2014
$ git checkout -‐b iss53 Switched to a new branch "iss53"
![Page 22: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/22.jpg)
Merge and GIT
www.compscicenter.ru 22 12.03.2014
$ git checkout master Switched to branch "master“ $ git checkout -‐b hotfix Switched to a new branch "ho�ix"
![Page 23: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/23.jpg)
Merge and GIT
www.compscicenter.ru 23 12.03.2014
$ git commit –m “Fix” Switched to branch "master“
$ git checkout master $ git merge hotfix Updating f42c576..3a0874c Fast forward README | 1 – 1 files changed, 0 insertions(+), 1 deletions(-‐)
$ git branch -‐d hotfix Deleted branch hotfix (3a0874c).
![Page 24: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/24.jpg)
Merge and GIT
www.compscicenter.ru 24 12.03.2014
$ git checkout master $ git merge iss53 Merge made by recursive. README | 1 + 1 files changed, 1 insertions(+), 0 deletions(-‐)
![Page 25: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/25.jpg)
Разрешение конфликтов
www.compscicenter.ru 25 12.03.2014
$ git merge iss53 Auto-‐merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result. $ git status index.html: needs merge # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -‐-‐ <file>..." to discard changes in working directory) # # unmerged: index.html #
![Page 26: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/26.jpg)
Разрешение конфликтов
www.compscicenter.ru 26 12.03.2014
Не разрешенный конфликт в файле будет иметь вид: <<<<<<< HEAD:index.html <div id="footer">contact : [email protected]</div> ======= <div id="footer"> please contact us at [email protected] </div> >>>>>>> iss53:index.html
В верхней части блока (всё что выше =======) это версия из HEAD После того, как вы разобрались со всеми конфликтами выполните:
$ git add для каждого конфликтного файла. Индексирование будет означать для Git'а, что все конфликты в файле теперь разрешены. Если вы хотите использовать графические инструменты для разрешения конфликтов, можете выполнить команду
$ git mergetool
![Page 27: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/27.jpg)
Разрешение конфликтов
www.compscicenter.ru 27 12.03.2014
$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: index.html # $ git commit Сообщение по умолчанию: Merge branch 'iss53' Conflicts: index.html # # It looks like you may be committing a MERGE. # If this is not correct, please remove the file # .git/MERGE_HEAD # and try again. #
![Page 28: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/28.jpg)
Бесплатные VCS серверы
www.compscicenter.ru 28 12.03.2014
Есть много сервисов, которые предоставляют открытые репозитории для совместной работы:
• sourceforge.net — SVN, Git, Mercurial, Bazaar, CVS репозитории. • code.google.com — SVN, Git, Mercurial репозитории. • github.com — Git репозитории. • bitbucket.org — Git и Mercurial репозитории. • . . .
![Page 29: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/29.jpg)
Полезные ссылки
www.compscicenter.ru 29 12.03.2014
Книга про Git с картинками: h�p://git-‐scm.com/book/ru/
Подробная работа с Git:
h�p://habrahabr.ru/post/174467/
Хорошая модель ветвления в Git: h�p://habrahabr.ru/post/106912/
Настоятельно рекомендую пройти курсы: h�p://try.github.io/levels/1/challenges/1 h�ps://www.codeschool.com/courses/git-‐real
![Page 30: Технологический семинар: Системы контроля версий](https://reader031.vdocuments.pub/reader031/viewer/2022020217/555c61aed8b42ab6748b4a8a/html5/thumbnails/30.jpg)
Спасибо за внимание
www.compscicenter.ru 30 12.03.2014