1. Введение
Представьте, что вы пишете курсовую работу. Вы начали работу над ней, сохранили документ. Потом добавили в него что-то, перечитали; не понравилось — удалили, добавили новое, сохранили как "курсовая-черновик.docx". Через день вы внесли кучу правок, а научный руководитель говорит: "Слушай, предыдущий вариант был лучше. Вернись к нему". И вот вы сидите, пытаясь вспомнить, что именно вы там поменяли. А может, у вас есть "курсовая-финал.docx", а потом еще "курсовая-финал-реально-финал.docx", и вы уже не помните, где какая версия? Знакомо?
В программировании эта проблема возводится в абсолют. Вы работаете над кодом, добавляете новую фичу, а потом понимаете, что она кривая и ломает всё, что работало до этого. Как откатиться назад — к моменту, когда все было хорошо? Или другой случай. Вы работаете над большим проектом не в одиночестве, а с командой. Как синхронизировать изменения, чтобы никто не перетер работу другого? Как понять, кто, когда и зачем добавил ту самую "гениальную" строчку кода, которая теперь вызывает ошибку в три часа ночи?
Если вы когда-нибудь сталкивались с подобными ситуациями, то уже интуитивно понимаете, зачем нужны системы контроля версий (Version Control Systems, VCS). Это своего рода машины времени для вашего кода. Они позволяют:
- Сохранять версии: записывать "снимки" состояния вашего проекта в любой момент времени.
- Откатываться назад: возвращаться к любой предыдущей версии проекта, если что-то пошло не так.
- Сравнивать изменения: точно видеть, какие строчки кода были добавлены, удалены или изменены между разными версиями.
- Работать в команде: несколько разработчиков могут одновременно работать над одним проектом, автоматически или полуавтоматически объединяя свои изменения.
- Вести историю: записывать, кто, когда и зачем вносил те или иные изменения.
Одна из таких систем называется Git. И она завоевала мир.
Видео
Посмотрите лекцию от одного из ведущих менторов JavaRush Университета, который погрузит вас в мир Git — ключевой технологии для любого современного разработчика.
Видео состоит из двух частей:
- Сначала вы разберете основы работы с Git через терминал. Этот фундаментальный подход поможет вам понять, что происходит «под капотом» системы.
- Затем вы перейдете к практике в IntelliJ IDEA, где научитесь выполнять те же операции с помощью удобного графического интерфейса, как это ежедневно делают профессионалы.
Все практические примеры в видео демонстрируются на языке Java, однако принципы работы с Git и интерфейс IDE универсальны и применимы для любого языка, будь то C#, Kotlin или Rust.
Зеркало на Vimeo: Лекция 26 Git
2. Зачем разработчику нужен Git?
Git — это мощная система управления версиями, которую используют для отслеживания изменений в исходном коде во время разработки программного обеспечения. Она позволяет разработчикам сохранять различные версии файлов и координировать работу нескольких людей над общим проектом.
Основные понятия Git:
Репозиторий
Репозиторий (или "репо") — это место, где хранится вся история проекта, включая все изменения и версии файлов.
Коммиты
commit — это сохранённое состояние проекта. Каждый коммит в Git содержит информацию о том, какие изменения были внесены в проект, кем и когда. Коммиты образуют историю проекта и позволяют вернуться к любой предыдущей версии.
gitGraph
commit id: "1"
commit id: "2"
commit id: "3"
commit id: "4"
commit id: "5"
commit id: "6"
Каждый коммит — это "снимок" проекта, который следует за предыдущим, формируя последовательную историю изменений.
Ветви
branch — это независимая линия разработки. По умолчанию Git создает ветку main. Вы можете создавать новые ветви для разработки новых фич или исправлений, а затем объединять их обратно в основную ветвь.
gitGraph
commit id: "1"
commit id: "2"
branch develop
commit id: "3"
commit id: "4"
commit id: "5"
checkout main
commit id: "6"
commit id: "7"
merge develop
commit id: "8"
commit id: "9"
От основной ветки main "отпочковывается" ветка develop для параллельной разработки. После завершения работы изменения из develop сливаются обратно в main.
3. Основные команды Git (то, что под капотом)
Ниже — список основных команд для работы с Git через терминал. Важно понимать, какие команды лежат в основе всех операций. Однако мы будем придерживаться GUI-подхода и научимся выполнять все эти действия с помощью удобного графического интерфейса IntelliJ IDEA. Смотрите на эти команды как на то, что происходит "под капотом".
| Команда | Описание |
|---|---|
git init |
Инициализирует новый Git-репозиторий в текущей директории. |
git clone |
Клонирует репозиторий из URL в новую директорию. |
git add |
Добавляет файлы в индекс для следующего коммита. |
git commit |
Фиксирует подготовленные изменения в репозитории. |
git push |
Отправляет изменения из локального репозитория в удалённый. |
git pull |
Обновляет текущую ветку с последней версией из удалённого репозитория. |
git branch |
Показывает, создаёт или удаляет ветки. |
git merge |
Сливает изменения указанной ветки в текущую ветку. |
Эти команды представляют основные инструменты работы в Git, позволяя управлять изменениями кода, ветками и слияниями в проектах любого размера.
sequenceDiagram
participant Рабочая директория
participant Область индексации (Staging)
participant Локальный репозиторий
participant Удаленный репозиторий
Рабочая директория ->> Область индексации (Staging): git add (Подготовить)
Область индексации (Staging) ->> Локальный репозиторий: git commit (Сохранить локально)
Локальный репозиторий ->> Удаленный репозиторий: git push (Отправить на сервер)
Удаленный репозиторий ->> Рабочая директория: git pull (Скачать обновления)
4. Три места хранения кода
Когда вы будете пользоваться системой контроля версий для вашего кода, он, грубо говоря, будет храниться в трех местах:
1. Удаленный репозиторий
Это централизованное место для хранения вашего кода, обычно размещенное на таких сервисах как GitHub, GitLab или Bitbucket. Они обеспечивают централизованное хранение кода и являются основой для совместной работы. Удаленный репозиторий служит точкой интеграции для автоматизации процессов, таких как сборка, тестирование и развертывание приложений.
2. Локальный репозиторий
Локальный репозиторий — это ваша персональная копия кода, хранящаяся на вашем компьютере. В этом репозитории вы можете выполнять все операции с Git (коммиты, ветвления, слияния) без необходимости подключения к интернету.
3. Рабочая директория
Рабочая директория на вашем компьютере содержит актуальные файлы проекта, над которыми вы в данный момент работаете. Это место, где вы можете видеть и изменять файлы, добавлять новый функционал или исправлять ошибки.
Эти компоненты совместно обеспечивают мощную инфраструктуру для управления исходным кодом, позволяя разработчикам управлять историей проекта и сотрудничать.
5. GitHub — ваше портфолио
GitHub — это ведущая веб-платформа для хостинга исходного кода, использующая систему контроля версий Git. Основанная в 2008 году, она быстро стала одним из ключевых инструментов для разработчиков во всем мире.
GitHub дает возможность пользователям создавать репозитории для управления проектами, контролировать и отслеживать изменения в коде и сотрудничать с другими разработчиками. Для современного разработчика профиль на GitHub является важной частью портфолио, которое можно показать потенциальным работодателям.
6. Создание вашего первого репозитория на GitHub
Шаг 1. Зайдите на https://github.com и зарегистрируйтесь.
Шаг 2. Нажмите на кнопку New repository для создания нового репозитория.
Шаг 3. Задайте параметры для репозитория:
- Имя репозитория: придумайте осмысленное имя.
- Публичный или приватный: для учебных проектов лучше выбрать "Public", чтобы его могли видеть другие.
- Add a README file: обязательно поставьте эту галочку. README — это "лицо" вашего проекта.
- Add .gitignore: нажмите на выпадающий список и выберите шаблон для вашего языка.
- Choose a license: можно пропустить.
- Нажмите
Create repository.
Шаг 4. Поздравляем, ваш первый удаленный репозиторий создан!
7. Установка и настройка Git
Хотя основы Git можно изучать через консольные команды (как показано в видео), в ежедневной работе 99% разработчиков используют именно удобные инструменты, встроенные в среду разработки. Наша цель — научить вас работать так, как это делают профессионалы.
Интерфейс для работы с Git во всех современных IDE от JetBrains — будь то IntelliJ IDEA для Java/Kotlin, Rider для C# или PyCharm для Python — практически идентичен. Это значит, что научившись работать с Git в одной среде вы сможете легко применять эти навыки в любой другой. Поэтому мы будем использовать IntelliJ IDEA как универсальный пример. Все, что вы увидите здесь, будет выглядеть и работать точно так же и в вашей любимой IDE.
Чтобы работать с Git на вашем компьютере, Git нужно сначала установить. Если вы используете IntelliJ IDEA, она, скорее всего, предложит вам установить Git автоматически, если он не найден в системе. Мы рекомендуем согласиться с этим предложением — это самый простой путь.
Закройте текущий проект, выбрав File > Close Project, и нажмите Clone Repository.
Если же вы хотите установить его вручную, воспользуйтесь официальным сайтом: https://git-scm.com/downloads.
8. Немного об истории: main vs master
Ранее ветка в Git по умолчанию называлась master. Однако в 2020 году сообщество разработчиков и крупнейшие платформы, включая GitHub, перешли на использование более нейтрального термина — main.
Это важно знать, так как в некоторых старых статьях или проектах вы все еще можете встретить упоминание ветки master. В наших лекциях и в современных проектах основной веткой всегда будет main.
Подробнее о переходе на main можно узнать по следующим ссылкам:
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ