Система контроля версий
Скачать 2.6 Mb.
|
Системы контроля версий Выполнил Горвиц Евгений, ВМИ-301 Что такое система контроля версий? Система контроля версий (Version Control System, VCS) — программное обеспечение для облегчения работы с изменяющейся информацией. VCS позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое. 3/70 Для чего нужны VCS? Хранение полной истории изменений Описание причин всех производимых изменений Откат изменений, если что-то пошло не так Поиск причины и ответственного за появления ошибок в программе Совместная работа группы над одним проектом Возможность изменять код, не мешая работе других пользователей 4/70 История развития 5/70 Терминология VCS Репозиторий - хранилище версий - в нем хранятся все документы вместе с историей их изменения и другой служебной информацией. Рабочая копия - копия проекта, связанная с репозиторием 6/70 Проблема совместного изменения файлов 7/70 Способы сохранения актуальности данных Lock-Modify-Unlock 9/70 Copy-Modify-Merge 10/70 Классификация VCS по способу сохранения актуальности данных 11/70 Классификация VCS по способу хранения данных Централизованные VCS Одно основное хранилище всего проекта Каждый пользователь копирует себе необходимые ему файлы из этого репозитория, изменяет и, затем, добавляет свои изменения обратно Subversion CVS TFS, VAULT AccuRev 13/70 Децентрализованные VCS У каждого пользователя свой вариант (возможно не один) репозитория Присутствует возможность добавлять и забирать изменения из любого репозитория Git Mercurial Bazaar 14/70 15/70 Терминология VCS 2 Метка tag именованная версия проекта Ветка branch «метка, имеющая историю развития» Коммит, фиксация commit, checkin сохранение изменений в репозитории Чекаут, извлечение checkout получение рабочей копии (без истории) Push, pull отправка/получение изменений в/из другого репозитория cvs HEAD svn trunk git master Основная ветка 16/70 Иллюстрация работы с VCS Коммиты История неизменна Ничего не теряется 18/70 Изменения Хранятся не файлы целиком, а изменения 19/70 Редактирование Можем отменить внесенные изменения Можем получить любую предыдущую версию файла 20/70 Тегирование Любому коммиту может быть назначена метка Метка включает в себя номер версии и краткое описание Коммит легко найти по его метке 21/70 Ветвление Не бойтесь делать много веток На каждую фичу – свою ветку! Ветка – указатель на последовательность коммитов 22/70 Ветвление и слияние Терминология VCS 3 Слияние merge Объединение изменений из разных веток Перестановка rebase Применение изменений из одной ветки на другую Конфликт conflict Попытка объединить два по-разному измененных файла 24/70 Для начала представим, что вы работаете над своим проектом и уже имеете пару коммитов 25/70 А теперь Вы решили, что вы будете работать над проблемой №53 из системы отслеживания ошибок, используемой вашей компанией. Так как проблема №53 является обособленной задачей, над которой вы собираетесь работать, мы создадим новую ветку и будем работать на ней. 26/70 Во время работы Вы делаете несколько коммитов. Эти действия сдвигают ветку iss53 вперёд потому, что вы на неё перешли (то есть ваш HEAD указывает на неё) Master остаётся на месте 27/70 Теперь Вы получаете звонок о том, что есть проблема, которую необходимо немедленно устранить. Нет нужды делать исправления поверх тех изменений, которые вы уже сделали в iss53. Всё, что вам нужно сделать, это перейти на ветку master. 28/70 Вы запустили тесты, убедились, что решение работает, и сливаете (merge) изменения назад в ветку master, чтобы включить их в продукт. 29/70 Теперь вы можете вернуться обратно к рабочей ветке для проблемы №53 и продолжить работать над ней Допустим, вы разобрались с проблемой №53 и сделали коммит С5. Теперь вы готовы объединить эту ветку и свой master. Чтобы сделать это, мы сольём ветку iss53 30/70 Это слияние немного отличается от слияния, сделанного ранее для ветки hotfix. В данном случае история разработки разделилась в некоторой точке. Так как коммит на той ветке, на которой вы находитесь, не является прямым предком для ветки, которую вы сливаете, VCS придётся проделать кое-какую работу 31/70 VCS автоматически создаёт новый коммит, содержащий результаты слияния (при условии, что не будет конфликтов) 32/70 Основы конфликтов при слиянии Иногда процесс слияния не идёт гладко. Если вы изменили одну и ту же часть файла по- разному в двух ветках, которые собираетесь слить, VCS не сможет сделать это чисто. Например, если ваше решение проблемы №53 изменяет ту же часть файла, что и hotfix, вы получите конфликт слияния $ git merge iss53 Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result. 33/70 VCS приостановит процесс слияния до тех пор, пока вы не разрешите конфликт Всё, что имеет отношение к конфликту слияния и что не было разрешено, отмечено как unmerged. <<<<<<< HEAD:index.html contact : email.support@github.com ======= please contact us at support@github.com >>>>>>> iss53:index.html После того, как Вы устраните все конфликты, можно выполнить коммит для завершения слияния. 34/70 Merge tool 35/70 Rebase Кроме слияния изменений (merge), некоторые системы контроля версия позволяют выполнять перестановку (rebase). Rebase позволяет добиться более наглядной истории изменений Кажется, что работа над проектом велась последовательно, хотя, на самом деле, велась параллельно. 36/70 37/70 Основы Git План Что такое Git? Установка и настройка Git Репозиторий Git Работа с репозиторием Работа с branch Игнорирование файлов Github и Bitbucket UI для работы с git 39/70 Что такое Git Git - распределенная система контроля версий Первая версия появилась в 2005 г. Разработана Линусом Торвальдсом для использования в управлении разработкой ядра Linux. 40/70 Ключевые особенности Git Поддерживается автономная работа; локальные фиксации изменений могут быть отправлены позже. Каждое рабочее дерево в Git содержит хранилище с полной историей проекта. Ни одно хранилище Git не является по своей природе более важным, чем любое другое. Скорость работы, ветвление делается быстро и легко. 41/70 Установка и настройка Загрузить Git можно с официального сайта: http://git- scm.com/ 42/70 Установка выполняется как и обычной программы. Необходимо указать каталог для установки и некоторые параметры. Start 43/70 Для минимальной настройки Git на компьютере необходимо задать глобальные параметры, которые будут применяться к вносимым изменениям и подписывать их. Они будут указывать на Вас в истории коммитов в удаленных репозиториях. Такими глобальными настройками являются имя пользователя и его email. Их можно установить следующими командами в консоли Git: $ git config --global user.name “Your name" $ git config --global user.email email@example.com Все параметры будут помещены в файл с настройками Git .gitconfig, расположенным в домашнем каталоге пользователя. 44/70 Репозиторий Git Git хранит информацию в структуре данных называемой репозиторий (repository). Репозиторий хранит: Набор коммитов (commit objects) Набор ссылок на коммиты (heads). Репозиторий хранится в той же директории, что и сам проект в поддиректории .git. 45/70 Commit objects содержат: Набор файлов, отображающий состояние проекта в текущую точку времени Ссылки на родительские commit objects SHA1 имя – 40 символьная строка которая уникально идентифицирует commit object. Идентичные коммиты всегда будут иметь одинаковое имя. 46/70 Основные команды git init - создание репозитория git add <имена файлов> - Добавляет файлы в индекс git commit – выполняет коммит проиндексированных файлов в репозиторий git status – показывает какие файлы изменились между текущей стадией и HEAD. Файлы разделяются на 3 категории: новые файлы, измененные файлы, добавленные новые файлы git checkout git push – отправка изменений в удаленный репозиторий git fetch – получение изменений из удаленного репозитория git clone 47/70 48/70 Сначала перейдем в папку, в которой хотим создать новый репозиторий git Воспользуемся командой git init Появилась новая скрытая папка: .git – наш репозиторий Кроме того, была создана ветка master Пример: создание репозитория 49/70 Создадим в нашей папке новый файл. Пусть это будет текстовый документ SomeFile.txt с парой строк внутри. Используем команду git status. Git сообщает нам, что появился новый файл, который пока не добавлен в индекс Пример: добавление файлов и создание коммитов 50/70 Давайте добавим наш текстовый файл в систему контроля версий. Прописываем git add SomeFile.txt Если ещё раз запросить статус (git status), мы увидим, что теперь наш файл подсвечен зеленым и добавлен в индекс 51/70 Нам осталось только зафиксировать изменения, создав новый коммит. Для этого воспользуемся командой git commit с ключом –m (добавить информационное сообщение к коммиту) Git проинформирует нас об успешном создании нового коммита 52/70 Полезные команды git log – показывает лог commits начиная с HEAD git remote – показывает информацию об удаленных репозиториях, а также позволяет удалять и добавлять их git mv – используется для перемещения или переименования файла git rm – удаляет файл из репозитория не затрагивая рабочую копию gitk – визуальная утилита для работы с репозиторием 53/70 Работа с ветками Создание branch выполняется следующей командой: git branch branch_name Переключение веток осуществляется командой: git checkout branch_name Данная команда выполняет 2 функции: Сдвинет указатель HEAD на branch_name Перезапишет все файлы в директории на соответствующие новому HEAD 54/70 Игнорирование файлов Далеко не все файлы проекта требуется включать в систему контроля версий: Результаты сборки Настройки IDE Файлы кэша Индивидуальные файлы пользователя Для этого используется файл .gitignore 55/70 .gitignore – обычный текстовый файл Можно использовать регулярные выражения и подстановки Можно вставлять комментарии 56/70 Github и Bitbucket 57/70 Github GitHub — крупнейший веб-сервис для хостинга IT- проектов и их совместной разработки. Основан на системе контроля версий Git. Создатели сайта называют GitHub «социальной сетью для разработчиков» 58/70 Особенности Сервис абсолютно бесплатен для проектов с открытым исходным кодом и предоставляет им все возможности. (для частных проектов предлагаются различные платные тарифные планы) Кроме размещения кода, участники могут общаться, комментировать правки друг друга, а также следить за новостями знакомых. Программисты могут объединять свои репозитории — GitHub предлагает удобный интерфейс для этого и может отображать вклад каждого участника в виде дерева. Для проектов есть личные страницы, вики-разметка и система отслеживания ошибок. Прямо на сайте можно просмотреть файлы проектов с подсветкой синтаксиса для большинства языков программирования. 59/70 GitHub – социальная сеть для разработчиков! 60/70 Bitbucket Bitbucket — веб-сервис для хостинга проектов и их совместной разработки, основанный на системе контроля версий Mercurial и Git. По назначению и предлагаемым функциям аналогичен GitHub. Для публичных репозиториев количество пользователей не ограничено (BitBucket бесплатен для проектов открытого программного обеспечения). К частному (закрытому) репозиторию может иметь доступ до пяти пользователей; большее количество записей предоставляется в рамках платного обслуживания. 61/70 Пример: работа с GitHub Давайте отправим ранее созданный репозиторий на github. Для начала необходимо создать новый репозиторий на сайте: https://github.com/new Заполняем имя проекта. Заодно можем создать файлы readme и .gitignore (github предоставляет шаблоны игнор- файлов для большинства языков программирования) 62/70 Github подсказывает, какие команды необходимо использовать, чтобы отправить наши файлы на сервер: Теперь заглянем на страницу нашего проекта: Репозиторий успешно отправлен на удаленный сервер! 63/70 Теперь рассмотрим процесс клонирования уже существующего репозитория Удалим наш локальный репозиторий, а затем выполним команду git clone Мы получили копию нашего репозитория и все файлы из него 64/70 UI для работы с Git Не всем нравится использовать консольные команды Для работы git существует множество визуальных оболочек и программ. Вот лишь некоторые из них: Gitk Github Desktop TortoiseGit Atlassian SourceTree 65/70 Gitk Поставляется вместе с git Простая визуальная утилита, позволяющая просматривать текущий репозиторий, историю коммитов и изменений в нем. 66/70 Github Desktop Разработана для удобной работы с github. Красивый интерфейс, мало возможностей Для большинства действий всё равно придется открывать консоль :( 67/70 TortoiseGit «Черепашка» добавляет возможность работы с git в контекстное меню проводника Большинство функций доступны в несколько щелчков мыши Не очень наглядна, требует больше времени на освоение 68/70 Atlassian SourceTree Разработана создателями Bitbucket Похожа на Github Desktop, позволяет получить доступ к большему числу возможностей git 69/70 Спасибо за внимание! 70/70 |