Мастер-класс по Git
О работе
В данной работе предстоит:
- Познакомиться с основами Git.
- Создать репозиторий в GitLab и склонировать.
- Выполнить действия по управлению репозиторием.
Часть 0. Установка Git
Установка Git на Windows
Статья основана на "Install Git" и "Download for Windows".
Шаги установки
- Загрузите последнюю версию установщика Git для Windows.
- После успешного запуска программы установки вы должны увидеть экран мастера настройки Git. Следуйте инструкциям
NextиFinish, чтобы завершить установку. Параметры по умолчанию довольно понятны для большинства пользователей. - Настройте имя пользователя и адрес электронной почты в Git, как показано в статье "Настройки Git" из данного руководства.
Установка Git на Linux
Статья основана на "Install Git" и "Download for Linux and Unix".
Возможно, в вашем дистрибутиве git уже установлен. Чтобы узнать, откройте терминал и введите
git --version
Проще всего установить Git в Linux, используя предпочтительный менеджер пакетов вашего дистрибутива Linux. Если вам требуется более свежая версия Git или он по какой-то причине отсутствует в вашей операционной системе, то следуйте указаниям ниже.
Шаги установки
- Установите Git согласно инструкциям, указанные в статье "Download for Linux and Unix".
- Настройте имя пользователя и адрес электронной почты в Git, как показано в статье "Настройки Git" из данного руководства.
Установка Git на macOS
Статья основана на "Install Git" и "Download for macOS".
Существует несколько способов установки Git на Mac. На самом деле, если вы установили XCode (или его инструменты командной строки), Git, возможно, уже установлен. Чтобы узнать, откройте терминал и введите
git --version
Apple на самом деле поддерживает и поставляет свою собственную версию Git, но она, как правило, отстает от основной версии Git на несколько основных версий. Если вам требуется более свежая версия, то следуйте указаниям ниже.
Шаги установки
- Установите Git согласно инструкциям, указанные в статье "Download for macOS".
- Настройте имя пользователя и адрес электронной почты в Git, как по казано в статье "Настройки Git" из данного руководства.
Часть 1. Основы Git
Управление исходным кодом
Управление исходным кодом (англ. source control management, SCM) используется для отслеживания изменений в репозитории исходного кода. SCM отслеживает текущую историю изменений в базе кода и помогает разрешать конфликты при объединении обновлений от нескольких участников.
Репозиторий — место, где хранятся и поддерживаются какие-либо данные. Чаще всего данные в репозитории хранятся в виде файлов, доступных для дальнейшего распространения по сети. Также под репозиторием понимается каталог файловой системы, в котором могут находиться файлы журналов конфигураций и операций, выполняемых над репозиторием, а также сами контролируемые файлы.
Git-репозиторий (источник: learn.microsoft.com):

По мере роста количества строк кода и количества участников программных проектов растут и затраты на коммуникационные издержки, а также сложность управления. SCM является важнейшим инструментом для облегчения организационной нагрузки, связанной с растущими затратами на разработку.
Важность инструментов управления исходным кодом
Когда несколько разработчиков работают в рамках общей кодовой базы, внесение изменений в общий фрагмент кода является обычным делом. Отдельные разработчики могут работать над, казалось бы, изолированной функцией, однако эта функция может использовать общий модуль кода. Поэтому разработчик №1, работающий над функцией №1, может внести некоторые правки и позже выяснить, что разработчик №2, работающий над функцией №2, имеет конфликтующие правки.
В интересах кого SCM работает (источник atlassian.com/git):
До принятия SCM это был кошмарный сценарий. Разработчики будут редактировать текстовые файлы напрямую и перемещать их в удаленные места с помощью FTP или других протоколов. Разработчик №1 внесет изменения, а разработчик №2 неосознанно сохранит работу разработчика №1 и уничтожит изменения. Роль SCM как механизма защиты от этого конкретного сценария известна как контроль версий.
SCM внедрила меры контроля версий для предотвращения потери работы из-за перезаписи конфликта. Эти меры предосторожности работают путем отслеживания изменений от каждого отдельного разработчика, выявления конфликтных областей и предотвращения перезаписи. Затем SCM сообщит об этих конфликтных м оментах разработчикам, чтобы они могли безопасно просмотреть и устранить.
Взаимодействие в команде разработки (источник atlassian.com/git):
Этот основополагающий механизм предотвращения конфликтов имеет побочный эффект, заключающийся в обеспечении пассивной коммуникации для команды разработчиков. Затем команда может отслеживать и обсуждать текущую работу, которую отслеживает SCM. SCM отслеживает всю историю изменений в базе кода. Это позволяет разработчикам изучать и просматривать правки, которые могли привести к ошибкам или регрессиям.
Преимущества управления исходным кодом
В дополнение к контролю версий SCM предоставляет набор других полезных функций, которые делают совместную разработку кода более удобной для пользователя. Как только SCM начинает отслеживать все изменения в проекте с течением времени, создается подробная историческая запись жизненного цикла проекта. Эта историческая запись затем может быть использована для ‘отмены’ изменений в кодовой базе. SCM может мгновенно вернуть кодовую базу к предыдущему моменту времени. Это чрезвычайно важно для предотвращения регрессий при обновлениях и устранения ошибок.
- Архив SCM всех изменений за время существования проекта обеспечивает ценный учет примечаний к выпускной версии проекта. Чистый и поддерживаемый журнал истории SCM можно взаимозаменяемо использовать в качестве примечаний к выпуску. Это обеспечивает понимание и прозрачность хода выполнения проекта, которыми можно поделиться с конечными пользователями или командами, не занимающимися разработкой.
- SCM сокращает коммуникационные издержки команды и увеличит скорость выпуска. Без SCM разработка идет медленнее, потому что участникам приходится прилагать дополнительные усилия для планирования непересекающейся последовательности разработки для выпуска. С помощью SCM разработчики могут независимо работать над отдельными разделами разработки функций, в конечном итоге объединяя их вместе.
Коммуникация в команде разработки (источник atlassian.com/git):
В целом SCM - это огромная помощь инженерным командам, которая позволит снизить затраты на разработку, позволяя инженерным ресурсам работать более эффективно. SCM - это обязательное условие в современную эпоху разработки программного обеспечения. Профессиональные команды используют контроль версий, и ваша команда тоже должна это делать.
Вывод
SCM - бесценный инструмент для современной разработки программного обеспечения. Лучшие команды разработчиков программного обеспечения используют SCM, и ваша команда тоже должна. SCM очень легко настроить в новом проекте, а отдача от инвестиций высока.
Что такое Git и зачем он нужен?
Основано на статье Git для новичков (часть 1) | Habr.
Git - это консольная утилита, для отслеживания и ведения истории изменения файлов, в вашем проекте. Чаще всего его используют для кода, но можно и для других файлов. Например, для картинок - полезно для дизайнеров.
С помощью Git-a вы можете откатить свой проект до более старой версии, сравнивать, анализировать или сливать свои изменения в репозиторий.
Репозиторием называют хранилище вашего кода и историю его изменений. Git работает локально и все ваши репозитории хранятся в определенных папках на жестком диске.
Так же ваши репозитории можно хранить и в интернете. Обычно для этого используют три сервиса:
Каждая точка сохранения вашего проекта носит название коммит (commit). У каждого commit-a есть hash (уникальный id) и комментарий. Из таких commit-ов собирается ветка. Ветка - это история изменений. У каждой ветки есть свое название. Репозиторий может содержать в себе несколько веток, которые создаются из других веток или вливаются в них.
Базовые понятия
Репозиторий – папка проекта, отслеживаемого Git, содержащая дерево изменений проекта в хронологическом порядке. Все файлы истории хранятся в специальной папке .git/ внутри папки проекта.
Индекс – файл, в котором содержатся изменения, подготовленные для добавления в коммит. Вы можете добавлять и убирать файлы из индекса.
Коммит – фиксация изменений, внесенных в индекс. Другими словами, коммит – это единица изменений в вашем проекте. Коммит хранит измененные файлы, имя автора коммита и время, в которое был сделан коммит. Кроме того, каждый коммит имеет уникальный идентификатор, который позволяет в любое время к нему откатиться.
Указатели HEAD, ORIG_HEAD и т. д. – это ссылка на определенный коммит. Ссылка – это некоторая метка, которую использует Git или сам пользователь, чтобы указать на коммит.
Ветка – это последовательность коммитов. Технически же, ветка – это ссылка на последний коммит в этой ветке. Преимущество веток в их независимости. Вы можете вносить изменения в файлы на одной ветке, например, пробовать новую функцию, и они никак не скажутся на файлах в другой ветке. Изначально в репозитории одна ветка, но позже мы рассмотрим, как создавать другие.
Рабочая копия – Директория .git/ с её содержимым относится к Git. Все остальные файлы называются рабочей копией и принадлежат пользователю.
Настройки Git
В зависимости от области действия и места хранения в Git существуют 3 типа настроек:
- Системные. Представляют собой настройки на уровне всей системы, то есть они распространяются на всех пользователей. Файл с этими настройками хранится по следующему пути:
C:\Program Files\Git\etc\gitconfigдля Windows и/etc/gitconfigдля пользователей Linux/MacOS. - Глобальные. Эти настройки одинаковы для всех репозиториев, созданных под вашим пользователем. Среди них есть, например, имя ветки по умолчанию. Файл с этими параметрами хранятся по следующему адресу:
C:/User/<имя пользователя>/.gitconfigв windows, или~/.gitconfigв Unix системах. - Локальные. Это настройки на уровне репозитория, они не будут применяться к другим вашим проектам. Эти параметры хранятся в каждом вашем репозитории по адресу:
.git/config.
Области действия настроек Git (источник: smartiqa.ru/courses/git):

Изменить настройки Git можно двумя способами:
- Отредактировать файл
gitconfig(на уровне системы) или.gitconfig(глобально) или.git/config(на уровне репозитория) напрямую, то есть используя текстовый редактор. - Воспользоваться утилитой
git config. Кроме того, с помощью этой утилиты можно посмотреть значение соответствующего параметра.
Команда
git configустанавливает значение соответствующего параметра в конфигурации Git.Документация здесь.
Давайте попробуем задать имя пользователя глобально. Воспользуемся утилитой git config с параметром --global:
git config --global user.name "DevOps Student"
git config --global user.email devops@example.com
Посмотреть заданные переменные можно:
git config --global user.name
git config --global user.email
Файл $HOME/.gitconfig с заданным пользователем:
[user]
name = DevOps Student
email = devops@example.com
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
Как видно поля user.name и user.email действительно стали такими, какими мы их задали.
Команда
git config --list --show-originпоказывает все заданные переменные списком (--list) и откуда они наследованы (--show-origin).
Создание репозитория
Как было сказано выше, репозиторий должен обязательно содержать папку .git/ с историей этого репозитория. Создать эту папку можно двумя способами:
- Создать новый репозиторий.
- Клонировать к себе на компьютер существующий репозиторий.
Второй способ мы рассмотрим позже, а пока займемся первым. Итак, чтобы создать репозиторий, вам понадобится команда git init.
Команда
git initсоздает пустой репозиторий в директории, откуда была вызвана.Документация здесь.
Создадим папку devops и на ее базе создадим репозиторий Git:
mkdir devops
cd devops/
git init
Эта команда создала па пку .git внутри папки вашего проекта. В ней следующее содержимое:
devops/.git
├── HEAD
├── branches
├── config
├── description
├── hooks
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs
├── heads
└── tags
Подробнее о том, что содержится в этой папке и как оно изменяется вы можете изучить в курсе smartiqa.ru/courses/git и в учебнике git-scm.com/book.
Состояния файлов
Давайте более подробно разберемся с тем, в каких состояниях могут быть файлы с точки зрения Git. Каждый файл может находится только в одном из двух состояний:
- Отслеживаемым (tracked). Об этих файлах Git знает и отслеживает изменения в них. Отслеживаемые файлы в свою очередь могут находится в следующих состояниях:
- Неизмененным (unmodified). То есть с момента последнего коммита в файле не было никаких изменений
- Измененным (modified). То есть с последнего коммита в файле были произведены какие-то изменения.
- Подготовленным к коммиту (staged). Это значит, что вы внесли изменения в этот файл и затем проиндексировали их, и эти изменения будут добавлены в следующий коммит.
- Неотслеживаемым (untracked). О неотслеживаемых файлах Git не знает, поэтому изменения в них не будут добавлены в коммит. Это любые файлы в вашем рабочем каталоге, которые не входили в последний коммит и не подготовлены к текущему коммиту.
Наглядная визуализация состояний и переходов между ними (источник: git-scm.com/book):

Чтобы посмотреть статус текущих файлов, нам потребуется команда git status.
Команда
git statusвыводит информацию о статусе файлов, находящихся в репозитории.Документация здесь.
Предположим, вы добавили в свой проект новый файл, простой файл README.
echo 'My Project' > README
Наша папка будет выглядеть следующим образом:
devops/
└── README
Если этого файла раньше не было, и вы выполните git status, вы увидите свой неотслеживаемый файл вот так:
On branch main
No commits yet
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)
Видно, что на данный момент у нас нет ни одного коммита.