Git и GitHub: нестрашный гайд для начинающих

Привет! Меня зовут Юлия Евсеева, я генеральный директор школы Devman. Мой личный опыт прикладного программирование более 13 лет. В школе мы уже 9 лет обучаем python-разработчиков и часто сталкиваемся с тем, что новичкам сложно разобраться с Git на начальных этапах.

В этом материале я разберу три главных вопроса, которые встают перед новичком:

Что вообще происходит? Разбираемся с новыми понятиями: репозиторий, коммит, ветка и почему Git, GitHub и GitHub Desktop — это не одно и то же.

Чем пользоваться? Обзор клиентов. Спойлер: для веба консольный учить придется, но на локальной машине можно комфортнее.

Где хранить код? Обзор платформ: GitHub, GitLab, Bitbucket, GitVerse.

Если вы пока путаете `push` и `pull` и боитесь сломать все одним неверным движением — этот гайд для вас.

Давайте разбираться с инструментом, без которого не обходится ни один бэкенд разработчик на Python. А если обходится – не светит ему место в крутой ИТ-команде!

Git, Github и другие звери

Итак, Python разработчик обязан регулярно использовать Git. В консоли, в десктопном клиенте или встроенным в IDE интерфейсе. Начнем с основных понятий, а затем выберем удобный клиент для работы с Git.

Что такое Git

Git — это распределенная система контроля версий.

❗Важно! Не путать с GitHub. Это программные продукты разного назначения, они не прямые аналоги.

Сохранение истории изменений

У программного продукта всегда есть версии. И каждое стабильное состояние желательно сохранять, чтобы вернуться в него, если расширение функционала или рефакторинг что-то поломали. Git отслеживает и сохраняет историю изменений в коде.

Разработка программного продукта в команде

При работе в команде несколько разработчиков изменяют код одного проекта и часто даже одного файла. Один разработчик правит багу, другой разработал новую фичу, а фичу третьего разработчика отменили. В итоге нужно сделать так, чтобы разработчики не мешали друг другу и итоговая версия содержала все нужные изменения кода.

Синхронизация изменений между распределенными репозиториями

Данные хранятся и используются на удаленных машинах: локальные машины разработчиков, централизованное хранилище кода организации, сервера, на которых развернуты веб-приложения. Git позволяет синхронизировать изменения в коде из разных источников.

Git — самый распространенный инструмент для работы с кодом. Альтернативы ему, конечно, есть. Но де-факто Git — это стандартный инструмент, который должен знать и уметь использовать любой бэкенд-разработчик на Python. 10 лет назад Mercurial еще составлял конкуренцию, но не сейчас. Приняли, смирились,используем.

Аналоги Git:

— Mercurial

— Bazaar

— Apache Subversions

Ветка, коммит, репозиторий — базовые концепты

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

Примеры:

👉 main или master — основная ветка, код из которой разворачивается в проде («боевой» версии веб-приложения на сервере).

👉new-payment-system — отдельная ветка, которая заведена под разработку отдельной фичи — новой платежной системы. В конце разработки будет влита в main-ветку

Коммит (commit) — зафиксированное состояние репозитория.

У коммита есть метаданные: идентификатор, имя автора, дата создания, комментарий.

Как работать с коммитами:

— Делайте коммиты атомарными. Один коммит = одна новая фича или одна правка. Это позволит в случае необходимости точечно откатить изменения.

— Давайте коммитам понятные названия

— Коммит всегда фиксирует работающий код. Если один коммит не работает без следующего -- объедините их.

Примеры коммитов:

— Fix bug #1338. ConnectionError;

— Добавлена платежная система Prodamus;

— Rename file `tg.py` to `tg_bot.py`.

Репозиторий (repo) — хранилище, содержащее все файлы и историю изменений проекта.

В операционной системе обычно выглядит как папка, которая содержит все файлы проекта, документацию. Внутри всегда есть скрытая папка `.git`, которая содержит историю изменений.

Примеры репозиториев:

— origin — локальный репозиторий на машине разработчика

— remote — удаленный репозиторий, например, в хранилище Github

В репозитории не рекомендуется хранить:

— чувствительные данные (пароли, токены)

— большие файлы

— служебные файлы и кэши IDE (например, файлы `pyc`, `.idea`, `__pycache__`, `DS_Store`, каталог `.vscode`)

Для управления тем, изменения в каких файлах и директориях нужно отслеживать и сохранять в истории, используйте файл `.gitignore`.

Что умеет Git

Слияние (merge) — перенос изменений из одной ветки репозитория в другую.

Пример: Разработчик Иван добавил в своей ветке код, которые позволяет оплачивать заказ Долями. Нужно влить изменения в main-ветку, чтобы фича появилась в продакшн версии сайте.

Клонирование (Clone) — копирование кода вместе со всей его историей, т.е. копирование репозитория. Клонированный репозиторий будет привязан к родительскому репозиторию.

Пример: вы клонировали репозиторий партнера по проекту с GitHub, чтобы доработать и отладить свой блок работ на локальной машине. В Git клиенте вы видите, что в качестве `remote` указан исходный репозиторий на GitHub. Как будете готовы, вы отправите свой код в удаленный репозиторий и ваши сокомандники увидят ваш код.

Пул (Pull) — получение последних изменений с удаленного сервера репозитория.

Пример: пока вы работали над своим блоком работ, ваш коллега уже внес изменения в модели данных вашего общего проекта на GitHub. Вы хотите ими воспользоваться в своем коде. Выполните операцию pull и на вашей локальной машине появится самая свежая версия кода из удаленного репозитория.

Пуш (Push) — отправка всех неотправленных ранее коммитов в удаленный репозиторий.

Пример: вы закончили свой блок работ, закоммитили все изменения. Но ваши коллеги пока не видят ваш код. Пушните свои изменения в удаленный репозиторий и они смогут подтянуть эти изменения к себе и использовать для дальнейшей разработки вашего общего проекта.

Клиенты для работы с Git

Для работы с Git можно использовать как интерфейс командной строки (она же консоль), так и встроенные в IDE инструменты, а также графические приложения.

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

<i>Консольный Git</i>
Консольный Git
<i>Графический Git</i>
Графический Git

Консольный Git — обязательный инструмент для веб-разработчика. На сервере редко можно установить графический клиент и работа с репозиторием возможна только из командной строки.

Плюсы консольного Git:

— Доступен на любой ОС

— Полная версия доступна бесплатно как для некоммерческого, так и коммерческого использования

— Незаменим на сервере

Возможные проблемы:

— Сложно вычитать изменения в коде или слить две ветки с кодом

— Могут возникать проблемы с путями в Windows из-за Unicode кодировки

📌Памятка по командам Git:

git config --global user.name "Devman" – Настройка, авторизация

git config --global user.email support@dvmn.org

`git init` — создание пустого репозитория

git clone — клонирование удаленного репозитория

git status — просмотр текущих изменений.

`git add` — добавить файл в репозиторий

`git commit` — зафиксировать изменения в коде, создать новый коммит в локальном репозитории.

`git push` — отправка изменений в удаленный репозиторий.

`git pull` — получение изменений из удаленного репозитория.

`git log` — просмотр истории изменений.

Для освоения навыков работы с Git читайте официальный гайд.

Разберем основные клиенты для работы с Git с графическим интерфейсом:

GitHub Desktop

— Официальный клиент от Microsoft и GitHub;

— Полная версия доступна бесплатно как для некоммерческого, так и коммерческого использования;

— Работает под Windows и MacOS. Версия для Linux официально не поддерживается;

— Код проекта открыт и доступен для доработки.

GitHub Desktop довольно минималистичный и предоставляет только базовый набор инструментов для работы с удаленными репозиториями. Довольно сложный интерфейс, отсутствует визуализация истории веток.

Sourcetree

— Разработан Atlassian (разработчики Jira, Confluence и BitBucket);

— Бесплатно, но код закрыт а отличие от GitHub Desktop;

— Может работать как с git репозиториями, так и репозиториями Mercurial;

— Доступен для Windows и MacOS.

У Sourcetree простой интерфейс, но есть подробная визуализация истории изменения веток. Вместе с Jira и BitBucket образует единую экосистему разработки программного обеспечения от одного производителя.

❗Сервис официально недоступен в РФ.

Sublime Merge

— От разработчиков Sublime Text;

— Есть бесплатная и платная лицензии;

— Может работать с любыми платформами для хранения и управления репозиториями: GitHub, GitLab, BitBucket;

— Доступен на Windows, macOS и Linux.

Sublime Merge отличается отличным визуалом для вычитки изменений и просмотра истории изменения веток кода. Возможна настройка светлой и темной темы. Приложение достаточно легковесное. Для начинающих полезно видеть команды в строке, которые выполняются после нажатия кнопок в интерфейсе.

GitKraken

— От разработчиков популярного расширения GitLence для Visual Studio Code

— Бесплатно доступна только ограниченная версия

— Может работать с любым хранилищем репозиториев GitHub, Gitlab, BitBucket

— Доступен на Windows, macOS и Linux

В GitKraken большое внимание уделяется дизайну и визуализации. Возможна интеграция с Jira и Trello. Есть встроенная командная строка для работы с Git. Можно одновременно работать из-под нескольких аккаунтов, создавать команды разработчиков. Визуализация истории веток красивая, яркая, но абсолютно нечитаемая.

Платформы для управления репозиториями

Мы уже разобрали систему контроля версий Git и графические клиенты. Теперь расскажем о платформах для управления репозиториями.

Одна из ключевых особенностей Git — это распределенная система. Т.е. код хранится и на локальной машине разработчика, и на сервере где работает сайт, и еще в каком-то удаленном централизованном хранилище, например, в рамках компании.

К централизованному хранилищу предъявляются требования по доступности и надежности.

В качестве удаленного хранилища репозиториев может использоваться как веб-сервис, так и развернутая на своих серверах система. Познакомимся с самыми популярными платформами.

GitHub

GitHub — это крупнейший веб-сервис для хостинга IT-проектов и их совместной разработки. Кроме размещения кода, участники могут общаться, комментировать правки друг друга, а также следить за новостями знакомых. Поэтому GitHub называют «соцсетью для разработчиков».

— Доступны публичные и приватные репозитории.

— Есть инструмент для отслеживания ошибок и редактор с подсветкой кода прямо на сайте.

— Место, где размещают свой код самые известные библиотеки и языки программирования с открытым исходным кодом: Python, Django, FastAPI, Requests, NumPy.

Платформа бесплатная для проектов с открытым исходным кодом.

❗В настоящее время GitHub принадлежит компании Microsoft. Доступ к платформе уже ограничен из Крыма и новых регионов РФ. Надеемся, что санкции не отрежут полностью доступ к столь важному для российского IT-сообщества сервису.

GitLab

— имеет близкий к GitHub интерфейс,

— собственную wiki-систему,

— issue-трекер,

— возможность назначить пользователям роли в проекте,

— встроенные возможности непрерывной интеграции и развертывания (CI/CD), — — — инструменты для постановки и отслеживания задач,

— интеграцию с Google Cloud.

Почти полностью повторяет функционал GitHub.

В настоящее время — это один из самых распространенных вариантов для компаний в РФ, которые могут развернуть GitLab на своих серверах, благодаря лицензии, позволяющей использовать систему для работы с проприетарным (коммерческим) кодом.

BitBucket

Платформа от Atlassian, которой также принадлежат популярные в IT системы Jira, Trello и Confluence. Сервис интегрирован с этими и другими проектами — например, инструментами развертывания приложений AWS CodeDeploy и Deploy to Azure, сервисом для поиска ошибок Instabug, средами разработки Visual Studio и Unity и прочими.

🛑Платформа ориентирована на большие компании. Но из-за санкций Atlassian со всеми продуктами официально покинул РФ.

GitVerse

Платформа анонсирована СберТехом в 2023 году. Это российская разработка и она выглядит перспективно на фоне массового ухода с рынка РФ зарубежных веб-сервисов.

Заявленная стратегическая цель — создать некое «единое окно», среду, где можно вести весь процесс разработки: от проектирования архитектуры до деплоя. По задумке эта среда будет пронизана ИИ, автоматизирующим рутинные задачи. Таким образом разработчик сможет достичь максимальной эффективности и сосредоточиться на решении сложных проблем.

Платформа активно развивается и уже доступна для размещения личных репозиториев. Все еще довольно редкая.

В мире Python-разработки Git давно стал не просто рекомендацией, а стандартом де-факто. Без него невозможно представить себе ни одного серьезного проекта, будь то веб-приложение или библиотека с открытым исходным кодом. Требования по владению Git есть в каждой вакансии.

Так что не откладывайте. Начните с малого: установите клиент, сделайте первый коммит в учебном проекте, попробуйте откатить изменения.

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

Начать дискуссию