Слайд 2
![Система контроля версий VCS Version Control System Хранение истории изменений](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-1.jpg)
Система контроля версий VCS
Version Control System
Хранение истории изменений
Возможность вернуться к более
ранней версии
Возможность разрабатывать проект в команде
Отслеживать, кто и какой участок кода написал
Возможность обмениваться кодом
Слайд 3
![Виды VCS 1. Централизованные Более старый подход, пример: SVN (subversion),](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-2.jpg)
Виды VCS
1. Централизованные
Более старый подход, пример: SVN (subversion), Perforce
2. Распределённые
Современный подход
— Git, Mercurial
Слайд 4
![Централизованные VCS Есть единое хранилище всех данных — это центральный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-3.jpg)
Централизованные VCS
Есть единое хранилище всех данных — это центральный репозиторий
Все изменения
сохраняются на этот центральный репозиторий.
Обмен кодом осуществляется через единое хранилище данных
Слайд 5
![Распределённые VCS Нет центрального репозитория. Есть удалённый репозиторий, но вся](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-4.jpg)
Распределённые VCS
Нет центрального репозитория.
Есть удалённый репозиторий, но вся история изменения
хранится у вас на локальном компьютере и можете в любой момент обносить её до версии актуальной.
Более гибкая разработка за счёт системы ветвей
Слайд 6
![Удалённые репозитории Это модификации проекта, которые хранятся в интернете или](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-5.jpg)
Удалённые репозитории
Это модификации проекта, которые хранятся в интернете или ещё где-то
в сети. Их может быть несколько, каждый из которых, как правило, доступен для вас либо только на чтение, либо на чтение и запись.
Слайд 7
![Что же такое система контроля версий? Это такая программа, которая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-6.jpg)
Что же такое система контроля версий?
Это такая программа, которая позволяет хранить
всю историю изменений, которые вы вносили в свой проект
Слайд 8
![Понятие commit Это пакет изменений, которые вы внесли в ваш](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-7.jpg)
Понятие commit
Это пакет изменений, которые вы внесли в ваш проект, например:
удаление файла, добавление файла или изменения уже существующих файлов. Представляем commit, как контрольную точку внесённых изменений
Слайд 9
![Понятие commit Commit не должен содержать огромное число изменённых файлов,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-8.jpg)
Понятие commit
Commit не должен содержать огромное число изменённых файлов, чтобы иметь
возможность оптимально откатить внесённые изменения в случае ошибки. В commit лучше вносить одну таску, одну фичу
Слайд 10
![Шаги для установки Переходим на сайт https://git-scm.com/ скачиваем и устанавливаем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-9.jpg)
Шаги для установки
Переходим на сайт https://git-scm.com/ скачиваем и устанавливаем программу
Заходим в
терминал и проверяем успешно ли установлен git. git --version
Создаём пустой проект или в существующем
Выполняем git init. Создаётся папка .git (скрыта ls -force)
git status — выяснение текущего статуса
git add название файла или .
git commit -m «good comment» фиксация версии
Каждый commit имеет hash — имя объекта
Слайд 11
![Игнорирование файлов Создаём .gitignore .vs /errors для папок Нужно сам файл .gitignore нужно добавить в отслеживание](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-10.jpg)
Игнорирование файлов
Создаём .gitignore
.vs
/errors для папок
Нужно сам файл .gitignore нужно добавить в
отслеживание
Слайд 12
![Работа с ветками git branch текущая ветка git branch name_branch](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-11.jpg)
Работа с ветками
git branch текущая ветка
git branch name_branch создание ветки
git branch
-D name_branch удаление ветки
git checkout name_branch переключение между ветками
git checkout -b name_branch создать и переключиться
git merge name_branch слияние веток
git rebase name_branch слияние веток
Слайд 13
![Работа с github Регистрируемся на https://github.com/ Создаём репозиторий Для соединения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-12.jpg)
Работа с github
Регистрируемся на https://github.com/
Создаём репозиторий
Для соединения локального и внешнего репозитория
делаем так:
git config --global user.name «Name Your»
git config--global user.email «your email»
git remote add origin http://address_repository
git push -u origin main
git pull забрать все последние изменения с сервера (обязательно делаем в начале рабочего дня)
git remote set-url origin http
Слайд 14
![HEAD Это псевдоним (второе символическое имя) текущего выбранного коммита. Он](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-13.jpg)
HEAD
Это псевдоним (второе символическое имя) текущего выбранного коммита.
Он всегда указывает
на последний коммит вашего локального дерева
Обычно HEAD указывает на имя ветки
Слайд 15
![HEAD](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-14.jpg)
Слайд 16
![Detaching HEAD Отделение HEAD означает, что можно присвоить его не](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-15.jpg)
Detaching HEAD
Отделение HEAD означает, что можно присвоить его не ветке, а
конкретно выбранному коммиту
git checkout hash_commit
Слайд 17
![Как перемещать HEAD? git checkout HEAD~n git checkout HEAD^ ^](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-16.jpg)
Как перемещать HEAD?
git checkout HEAD~n
git checkout HEAD^
^ перемещение на 1 коммит
назад
~n переместит указатель HEAD на n коммитов назад, где n — целое число
Слайд 18
![Перемещение ветки Branch forcing git branch -f main HEAD~3 Принудительно](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-17.jpg)
Перемещение ветки
Branch forcing
git branch -f main HEAD~3
Принудительно переместит ветку main на
три родительских коммита назад от HEAD
Главная цель, для которой используются относительные ссылки это перемещение веток по истории коммитов
Слайд 19
![Отмена изменений git reset - отменяет изменения, перенося ветку на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-18.jpg)
Отмена изменений
git reset - отменяет изменения, перенося ветку на более ранний
коммит, как-будто новых коммитов и не было (только для локальных репозиториев)
git revert отменяет изменения в удалённом репозитории
Пример: git revert HEAD^
Слайд 20
![](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-19.jpg)
Слайд 21
![Для каждой версии файла GIT создаёт объект и отличаются они по хешу](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-20.jpg)
Для каждой версии файла GIT создаёт объект и отличаются они по
хешу
Слайд 22
![Файлы, по статусам отслеживания](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-21.jpg)
Файлы, по статусам отслеживания
Слайд 23
![Типы объектов в GIT (.git/objects)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-22.jpg)
Типы объектов в GIT (.git/objects)
Слайд 24
![Из чего состоит коммит? name, email автора Описание Ссылки на родительские коммиты](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-23.jpg)
Из чего состоит коммит?
name, email автора
Описание
Ссылки на родительские коммиты
Слайд 25
![Сайт с визуализацией работы https://learngitbranching.js.org/?locale=ru_RU](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/577364/slide-24.jpg)
Сайт с визуализацией работы
https://learngitbranching.js.org/?locale=ru_RU