Similar presentations:
Образовательный центр программирования и высоких технологий
1.
Минск, 2020 г.ОБРАЗОВАТЕЛЬНЫЙ ЦЕНТР
ПРОГРАММИРОВАНИЯ И ВЫСОКИХ
ТЕХНОЛОГИЙ
Введение в работу с GIT
2.
Что такое VCSVCS – version control system.
Система контроля версий — это система, записывающая изменения
файла или набора файлов в течение времени и позволяющая
вернуться позже к определённой версии.
3.
Типы VCS1. Локальные (RCS)
2. Централизованные (CVS, Subversion)
3. Распределенные(Git, Mercurial, BitKeeper)
4.
Локальная VCS5.
Централизованная VCS6.
Распределенная VCS7.
Преимущества GIT• Скорость
• Простая архитектура
• Хорошая поддержка нелинейной разработки (тысячи параллельных
веток)
• Полная децентрализация
• Возможность эффективного управления большими проектами,
такими как ядро Linux (скорость работы и разумное использование
дискового пространства)
8.
Основные идеи• Версии – это снимки, а не diff.
• Практически все операции выполняются локально
• Целостность. SHA-1 хеш высчитывается для всего.
• После добавления данных в гит, их тяжело (но можно) потерять.
• Полная поддержка git – только в терминале.
• Все файлы могут находится в одном из следующих состояний –
сохраненные (committed, измененные (modified), припасенные
(staged))
9.
Основные идеиВерсии – это снимки, а не diff.
Это означает, что github не хранит разницу между версиями файлов, а
сохраняет полный снимок каждой версии. Таким образом, вы можете легко
переключаться между разными версиями и видеть, как выглядел ваш проект
в определенный момент времени.
10.
Изменения это снимки а не разность (diff)11.
Основные идеиПрактически все операции выполняются локально.
Это означает, что вы не нуждаетесь в постоянном подключении к
интернету, чтобы работать с github. Вы можете создавать,
редактировать, коммитить и откатывать изменения на своем
локальном репозитории, а затем синхронизировать его с удаленным
репозиторием, когда у вас будет доступ к сети.
12.
Основные идеиЦелостность. SHA-1 хеш высчитывается для всего.
Это означает, что github использует алгоритм хеширования SHA-1,
чтобы присваивать уникальный идентификатор каждому объекту в
репозитории, будь то файл, папка, коммит или ветка. Это
гарантирует, что никто не сможет подделать или повредить ваши
данные, и вы всегда сможете проверить, что вы работаете с
правильной версией.
13.
Основные идеиПосле добавления данных в гит, их тяжело (но можно) потерять.
Это означает, что github очень надежно хранит ваши данные, и вы не
должны беспокоиться о том, что они будут случайно удалены или
перезаписаны. Однако, если вы совершите какую-то ошибку, например,
удалив нужный файл или ветку, или сделав нежелательный коммит, вы все
равно сможете восстановить их, используя специальные команды гита,
такие как git reset, git revert, git reflog и т.д.
14.
Основные идеиПолная поддержка git – только в терминале.
Это означает, что вы можете использовать все возможности и
функции гита, если вы работаете с ним через командную строку. Хотя
существуют и другие способы работы с гитом, например, через
графические интерфейсы или веб-сайты, они могут быть ограничены
в некоторых аспектах или не поддерживать некоторые команды или
опции.
15.
Основные идеиВсе файлы могут находится в одном из следующих состояний –
сохраненные (committed, измененные (modified), припасенные (staged)).
Это означает, что в любой момент времени вы можете определить, в каком
состоянии находятся ваши файлы относительно вашего репозитория.
Сохраненные файлы – это те, которые уже были добавлены в репозиторий
и не имеют никаких изменений. Измененные файлы – это те, которые были
отредактированы, но еще не были припасены для коммита. Припасенные
файлы – это те, которые были отмечены для включения в следующий
коммит. Вы можете использовать команды git status, git diff и git add, чтобы
управлять состояниями файлов и подготовить их к коммиту.
16.
Состояния файлов17.
Конфигурация Git• git config [--<layer>]
<key>
layers:
• --system
• --global
• --local
$ git config --global user.name "John Doe"
$ git config $--global user.email [email protected]
$ git config --global core.editor nano
$ git config --global credential.helper store
18.
Help$ git help [command]
$ man git-<verb> //Linux command
$ git <verb> -h | --help
19.
Начало работыВ рабочей папке выполняем команды:
• git init
• git add README.md (либо перечисляем файлы, либо пишем . )
• git commit -m "first commit"
• git branch -M main
• git remote add origin https://github.com/{ссылка на ваш
репозиторий}.git
• git push -u origin main
20.
Жизненный цикл файлов21.
Жизненный цикл файловНеотслеживаемый (Untracked). Это значит, что файл еще не был добавлен в
репозиторий гита и гит не знает о его существовании. Чтобы добавить файл в
репозиторий, вы должны использовать команду git add <имя файла>. После
этого файл перейдет в статус Неизмененный (Unmodified).
Неизмененный (Unmodified). Это значит, что файл уже есть в репозитории
гита, но вы не вносили в него никаких изменений с момента последнего
коммита. Если вы отредактируете файл, он перейдет в статус Измененный
(Modified). Если вы захотите удалить файл из репозитория, вы должны
использовать команду git rm <имя файла>. После этого файл перейдет в статус
Неотслеживаемый (Untracked).
22.
Жизненный цикл файловИзмененный (Modified). Это значит, что вы изменили файл, но еще не
приготовили его к коммиту. Чтобы приготовить файл к коммиту, вы должны
использовать команду git add <имя файла>. После этого файл перейдет в
статус Подготовленный (Staged). Если вы захотите отменить свои изменения,
вы можете использовать команду git checkout -- <имя файла>. После этого
файл вернется в статус Неизмененный (Unmodified).
Подготовленный (Staged). Это значит, что вы отметили файл для включения в
следующий коммит. Чтобы сделать коммит, вы должны использовать команду
git commit -m "<сообщение коммита>". После этого файл перейдет в статус
Неизмененный (Unmodified).
23.
Добавление в stagingДобавить изменения в staging
$ git add <filename> [<filename>]
Можно использовать wildcards:
$ git add *.py
‘.’ Применяется для того чтобы добавить все изменения:
$ git add .
* - для замены любой строки символов звёздочка
? - для замены любого одиночного символа знак вопроса.
24.
Просмотр состояния GITТекущее состояние (изменения, ветка)
$ git status
Параметры команды:
$ git status --help
Посмотреть изменения файла:
$ git diff [<filename>]
25.
Сохраняем изменения. CommitСохранение изменений из staging в репозиторий. Откроется
текстовый редактор.
$ git commit
Если не очень хочется отдельно писать сообщение для коммита:
$ git commit -m “my first commit”
Сохранить все:
$ git commit -a
26.
Работа с изменениямиПередвинуть файл из staged в modified
$ git reset HEAD <filename>
Передвинуть файл в состояние unchanged. (Отмена всех изменений):
$ git checkout -- <filename>
Удалить файл из рабочей директории.
--cached чтобы пометить к удалению но не удалять физически:
$ git rm [ --cached] <filename>
Добавить изменения из staging в последний комит:
$ git commit --amend
27.
Просмотр истории$ git log
commit 5f5b7b4b1e1684a9b428dce1bfcf86085ccf4b6f (HEAD -> issue-1)
Author: Maxim_Belov <[email protected]>
Date: Sat Sep 21 22:11:19 2023 +0300
20
Add view for GET user credentials
commit ac1b0e4a0613fab175a7a99858e128d17412fbf3 (origin/issue-1)
Author: Maxim_Belov <[email protected]>
Date: Tue Sep 17 23:19:06 2023 +0300
Add db settings
28.
Ветки29.
Версии и коммиты как снимки30.
Структура коммита31.
Указатели: HEAD, ветки, тэги32.
Указатели: HEAD, ветки, тэгиКоммиты или снимки. Это белые прямоугольники с уникальными кодами,
например, 98ca9, 34ac2, f30ab. Каждый коммит представляет собой полный
снимок состояния вашего проекта в определенный момент времени. Каждый
коммит имеет уникальный идентификатор, который вычисляется с помощью
алгоритма хеширования SHA-1. Этот идентификатор позволяет гиту отличать
коммиты друг от друга и проверять их целостность.
33.
Указатели: HEAD, ветки, тэгиВерсии снимков. Это бирюзовые прямоугольники под кодами коммитов,
например, A, B, C. Они показывают, какие версии снимков были созданы в
процессе разработки вашего проекта. Вы можете дать своим снимкам любые
имена, которые вам удобны, или использовать автоматические номера
версий, например, v1.0, v2.0 и т.д.
34.
Указатели: HEAD, ветки, тэгиСтрелки между коммитами. Они показывают, как происходит переход от
одного коммита к другому. Каждый новый коммит ссылается на
предыдущий коммит, создавая цепочку истории вашего проекта. Вы можете
перемещаться по этой цепочке, используя разные команды гита, например,
git checkout, git reset, git revert и т.д.
Ветки. Это красные прямоугольники над кодами коммитов, например,
master. Они показывают, как вы можете создавать разные варианты развития
вашего проекта, не затрагивая основную линию. Ветки позволяют вам
экспериментировать с новыми функциями, исправлять ошибки, совмещать
изменения и т.д. Вы можете создавать, переключаться, сливать и удалять
ветки, используя разные команды гита, например, git branch, git switch, git
merge, git branch -d и т.д.
35.
Указатели: HEAD, ветки, тэгиHEAD. Это желтый прямоугольник, указывающий на ветку master. Он
показывает, на какой ветке или коммите вы сейчас находитесь. HEAD всегда
указывает на последний коммит в текущей ветке. Вы можете изменить
положение HEAD, используя разные команды гита, например, git checkout, git
reset, git rebase и т.д.
36.
Работа с веткамиСписок веток:
$ git branch
Создание веток:
$ git branch branch_name
Переключение на ветку:
$ git checkout branch_name
Создание ветки и переключение на нее:
$ git checkout -b my_branch_name
37.
Создание ветки38.
Переключение на новую ветку39.
Коммит изменений$ touch other_file
$ git commit -a -m “my branch commit”
40.
Слияние (merge)41.
42.
Метод Fast-forward$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
Эта картинка иллюстрирует метод “Fast-forward” в гите, системе контроля версий. В этом
методе, если между текущей веткой и веткой, которую нужно слить (в данном случае,
“master” и “hotfix”), нет разветвленных коммитов, то гит просто переместит (или “быстро
перемотает”) указатель текущей ветки на последний коммит ветки, которая сливается.
43.
Метод recursive$ git checkout iss53
$ touch iss53.py
$ git commit -a -m 'fix issue 53'
Эта картинка иллюстрирует метод “recursive” в гите, системе контроля версий. Он
показывает, как вы можете исправить проблему, помеченную как “iss53”, и слить ее
обратно в ветку “master”. Команды, перечисленные на картинке, используются для
переключения на ветку проблемы, создания нового файла с именем iss53.py и фиксации
изменений с сообщением, говорящим, что проблема 53 исправлена.
44.
$ git checkout master$ git merge iss53
45.
$ git merge iss5346.
Merge конфликты$ 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 mergetool
47.
$ git mergetoolThis message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge
ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html
Normal merge conflict for 'index.html':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (opendiff):
48.
Долгоживущие ветки49.
Долгоживущие веткиЭта картинка показывает концепцию долгоживущих веток в системах
контроля версий, в частности, в гите. Диаграмма разделена на две части:
верхняя часть показывает отдельные коммиты (C1-C7) на разных ветках
(master, develop, topic), а нижняя часть иллюстрирует, как эти ветки и
коммиты интегрируются.
50.
Ветки для задач51.
Удаленные репозитории(remotes)
52.
Удаленные ветки53.
Удаленные ссылкиЭта картинка показывает типичный
сценарий в системе контроля версий гита,
когда локальный репозиторий и удаленный
репозиторий не синхронизированы. В
верхней части картинки есть удаленный
репозиторий, размещенный на
“git.ourcompany.com” с коммитами до
“31b8e”. Однако кто-то еще запушил новый
коммит “190a3” в ветку master на
удаленном репозитории. В нижней части
картинки, на “My Computer”, вы скачали
коммиты до “f4265” и сделали два
дополнительных коммита “a38de” и “893cf”.
Ваша локальная ветка master опережает
origin/master, но отстает от обновленной
ветки master на удаленном репозитории.
54.
Работа с удаленными репозиториямиСписок remotes:
$ git remote –v
Синхронизироваться с удаленным репозиторием(забрать изменения):
$ git fetch [<repository_name>]
$ git fetch origin
Чтобы сохранить работу в удаленном репозитории:
$ git push [<remote>] [your_branch[:remote_branch]]
git pull == git fetch + git merge
55.
FetchЭта картинка иллюстрирует операцию
“fetch” в гите, системе контроля версий. Она
показывает, как вы можете получать новые
коммиты с удаленного репозитория в
локальный репозиторий, но не сливать их с
рабочей веткой.
56.
Git Workflow56
57.
58.
Информация, тренировка• https://git-scm.com/book/en/v2 - pro git (Scott Chacon and Ben
Straub)
• https://learngitbranching.js.org/ - интерактивная обучалка