Git: введение и основы работы через терминал. Часть 1
31 мая 2024

Git: введение и основы работы через терминал. Часть 1

Структурируем знания по Git: разбираем, как гит работает изнутри, учимся работать с гит через консоль + некоторые рекомендации по работе с ним. Вы можете посмотреть полную видеозапись лекции внизу страницы.

Андрей Гладков
Ведущий инженер-разработчик ПО

Более 9 лет опыта в разработке.


Повышение квалификации:

  • «Создание web-интерфейсов(HTML/CSS)», (сертификат "Htmlacademy");
  • «JavaScript/DOM/элементы» (сертификат "learn.javascript.ru")
  • «Комплексное обучение JS developer» (сертификат "Loftschool");
  • «PHP. Архитектура сложных веб-сервисов» (сертификат "Htmlacademy").

Инструментарий:

  • HTML5, CSS;
  • Webpack, Git;
  • JavaScript(React.Redux,Mobx,Next,Apollo graphql);
  • Angular(TypeScript,RxJS,MUI);
  • Leaflet,OpenLayers;
  • NodeJs(Express,Koa,NestJs);
  • Postgresql, Mongo.
Цели курса:

  • получить хорошие эмоции и узнать что-то новое =)
  • структурировать знание по git;
  • понять как git работает изнутри;
  • научиться работать с git через консоль;
  • узнать о рекомендация при работах с git.


Что такое GIT? Почему его стоит использовать?

Git - это система управления версиями ,т.е основная задачи гит помогать создавать и сохранять различные версии проекта. Иными словами хранилище истории разработки проекта

Git - распределенная система. На каждом компьютере находится полная версия репозитория (без интернета будут доступны все объекты гит, для переключения между разными версиями проекта, каждый репозиторий независимо от других, и на каждом ПК находится полная версия репозитория).


Преимущества:

  • позволяет сохранять разные версии проекта;
  • быстрый переход между версиями проекта;
  • откат к предыдущей версии при необходимости;
  • улучшает процесс командной работы над одними и теми же проектами;
  • независимая одновременная разработка различных новых функций в проекта.


Разница между Git и GitHub ;)

GIT — распределённая система контроля версий

GITHUB — сервис хостинга GIT репозиториев



Основные команды в терминале

cd ~/SomeFolder — переход в папку

mkdir MyProject — создание новой папки

echo ‘some text' > file. html — создание файла с текстом

ls — спиcок файлов в папке

cat file. txt — просмотр содержимого файла

rm file. txt — удаление файлов

rm -rf file. txt — удаление файлов и папок



Установка и начало работы


•Проверить установлен ли git уже на ваш компьютер с помощью терминала.

git -version <2.42.0>

•Разговор про семантическое управление версиями (Что такое семантическое версионирование? | Merion Academy — платформа доступного IT образования | Дзен (dzen.ru))

main.minor.patch

Main/Major (основной номер версии) основной номер указывает на текущую версию общедоступного интерфейса пакета.

Minor (дополнительный номер версии) — дополнительный номер указывает на текущую функциональную версию вашего программного обеспечения. Он увеличивается всякий раз, когда вы добавляете новую функцию, но не меняете интерфейс вашего пакета.

Patch (номер исправления) — номер исправления увеличивается каждый раз, когда вы вносите какое-то незначительное изменение, которое не влияет на общедоступный интерфейс или общую функциональность вашего пакета.

• Скачать с сайта Git (git-scm.com).



Создание репозитория


• перейти в директорию где хотите создать репозиторий

• ввести команду git init

• после инициализации создастся скрытая папка .git

• чтобы увидеть скрытую папку в терминале ls --la (Mac) / ls -Force (Windows)

• создайте папку MyProject на рабочем столе и инициируйте там новый репозиторий



Области GIT


В гит существует три области в которых могут находиться файлы и папки и какие у них (файлов) есть статусы в ситеме контроля версий git.


­Рабочая директория (working directory)

Именно это область гит содержит те видимые файлы и папки которые вы видите в вашем проекте.


­Индекс (staging area)

­В эту область добавляются файлы перед сохранение в репозиторий (т.е подготавливаете)


­Репозиторий (repository)

­Сохраненные изменения из индекса записываются в репозиторий (это именно то что находится в папке .git/objects)


­P.s. Индекс и репозиторий скрыты и находятся в папке .git



Рабочая директория — working directory


Тут все просто.


Индекс — staging area

В индексе (промежуточная область между рабочей директорией и репозиторием) находятся файлы и папки которые вы подготавливаете для сохранения в репозиторий (для commit) которые можно просмотреть с помощью git status.


Репозиторий — repository

Непосредственно то, что содержится в скрытой папке .git

Все объекты: файлы, папки, коммиты и т. д. находятся в папке objects. Название файлов и папок основывается хешах гит объектов

Как GIT сохраняет файлы

Версия 1 (сгенерирован уникальный sha1 hash и создан новый объект).

Версия 2 (сгенерирован уникальный sha1 hash и создан новый объект).

Рабочий процесс — перемещение данных между областями

В рабочую директорию они добавляются известным способом — создание файлов на компьютере.


Рабочие директории => индекс с помощью команды:

  • ­git add (подготовить);
  • git add . -все файлы;
  • git add <имя файла> — конкретный файл.

Индекс => в репозиторий с помощью команды:

  • ­git commit (сохранить) — commit тоже является объектом гит и сохраняется в репозитории, коммит это просто объект который указывает на версию вашего проекта.

Переход между версиями (при этом файлы в вашей рабочей директории перезаписываются соответствующей версией из гит репозитория) с помощью команды:

  • git checkout — перейти к определенной версии проекта.
Статусы файлов в GIT

  • UNTRACKED (не отслеживаемый)
  • STAGED (подготовленный)
  • UNMODIFIED (не модифицированный)
  • MODIFIED (модифицированный)

Посмотрим на их взаимосвязи.

Типы объектов в GIT

  • BLOB — файл
  • TREE — дерево, содержит ссылки на файлы или подпапки (другие объекты tree)
  • COMMIT — коммит, содержит методанные
  • ANNOTATED TAG — аннотированный тег, можно создать на любом этап жизненного цикла проекта, и после этого перемещаться между разными версиями проекта по названию тегов

P. S.: Зайдя в папку гит вы не увидите такие объекты, вы увидите только файлы с сгенерированными хеш-названиями.
Для просмотра типов объектов есть свои команды — но об этом позднее.


Хэши объектов и SHA1 хэш-функция

Каждый объект в git имеет уникальный ID (sha1 хеш).

­Каждый объект генерируется с помощью хеш-функции которая называется sha1.


Как работает хеш-функция

Именно на сгенерированных хешах объектов гит основаны названия подпапок папки object и файлов в этих подпапках.

Название папки — первые 2 символа.

Название файла — остальная часть.


Коллизия GIT J или Сбор атомов на 10 лунах


Хэш SHA-1 представляет собой строку из 40 шестнадцатеричных символов… это 4 бита на символ, умноженный на 40… 160 бит. Теперь мы знаем, что 10 бит — это примерно 1000 (1024, если быть точным), что означает, что существуют

1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 разных хэшей SHA-1 … 1048.

Чему это эквивалентно? Ну, Луна состоит примерно из 1047 атомов. Итак, если у нас есть 10 Лун… и вы случайным образом выбираете один атом на одной из этих лун… а затем продолжайте и снова выберите случайный атом в них … тогда вероятность того, что вы выберете один и тот же атом дважды, равна вероятности того, что два заданных коммита git будут иметь одинаковый хэш SHA-1.



Что такое COMMIT? что он содержит?

Как коммиты связаны между собой, практические примеры, и еще больше о гите в записи лекции ниже.


Содержание:

00:00:00 — Вступление. Моя мотивация при создании этого курса. Цели курса.
00:04:00 — Что такое Гит? Преимущества Git. Разница между Git и GitHub :)
00:06:48 — Основные команды в терминале, которые нам понадобятся. Установка Git. Начало работы с Git. Создание репозитория. Области Git (немного порисуем:)
00:12:08 — Рабочая директория (Working directory). Индекс (Stagin aria).
00:24:00 — Репозиторий (Repository). Как Git сохраняет файлы. Перемещение данных между областями.
00:28:00 — Статусы файлов в Git. Типы объектов в Git: UNTRACKED (не отслеживаемый), STAGED (подготовленный), UNMODIFIED (не модифицированный), MODIFIED (модифицированный).
00:30:16 — Объекты Git: BLOB (файл), TREE (дерево), COMMIT (коммит), ANNOTATED TAG (аннотированный тег).
00:32:57 — Подробнее о том как Git хранит объекты (Хэши объектов и SHA1 хэш-функция).
00:35:44 — Коллизия GIT или Сбор атомов на 10 лунах. Что такое commit? Что он содержит?
00:41:06 — Как коммиты связаны между собой? Что такое Head? Что такое ветка? (еще разок порисуем))
00:46:40 — Пример репозитория. Первая версия проекта. Вторая версия проекта.
00:52:03 — Заключение. Основные КОМАНДЫ GIT что мы узнали? Вопросы.
Вам также может быть интересно