Системы контроля версий
Системы Контроля Версий (СКВ или SCM) - это инструменты, которые позволяют отслеживать изменения в коде и других файлах, обеспечивая возможность возвращаться к предыдущим версиям и совмещать изменения от разных источников. В этой статье мы рассмотрим, что такое СКВ, какие их виды существуют и в чём их преимущества. Здесь же подробно рассмотрим и самую популярную СКВ - Git.
Виды СКВ
Системы контроля версий делятся на два основных типа:
- Централизованные СКВ (ЦСКВ): у таких систем есть единый центральный сервер, на котором хранятся все версии файлов. Примером может служить Subversion (SVN).
- Распределённые СКВ (РСКВ): каждый участник имеет свою локальную копию репозитория (хранилища), содержащую всю историю изменений. Примером является Git.
Преимущества использования СКВ
- Отслеживание изменений: вы всегда можете узнать, кто, когда и что изменил.
- Совместная работа: несколько разработчиков могут одновременно работать над проектом без конфликтов.
- Безопасность: в случае ошибок или сбоев можно легко вернуться к стабильной версии.
- Эффективное слияние: СКВ помогает объединять изменения из разных веток разработки.
Популярные системы контроля версий
Из самых распространённых систем контроля версий следует выделить следующие:
- Git: наиболее популярная РСКВ, используется в таких сервисах, как GitHub, GitLab и Bitbucket.
- Subversion (SVN): ещё одна популярная ЦСКВ, но менее актуальная, нежели Git.
- Mercurial: РСКВ, во многом похожая на Git, но с некоторыми отличиями в интерфейсе и подходах.
Git
Git - это распределённая система контроля версий, которая позволяет нескольким разработчикам одновременно работать с одним и тем же кодом, не мешая при этом друг другу. Она была создана Линусом Торвальдсом в 2005 году для разработки ядра Linux. Сегодня Git является одной из самых популярных и распространённых систем контроля версий.
Основные понятия Git
- Репозиторий (repository): это хранилище, в котором находятся ваш код, история всех изменений, ветки для разработки и другая важная информация.
- Коммит (commit): отдельное изменение или набор изменений. Каждый коммит имеет свой уникальный идентификатор.
- Ветка (branch): независимый поток разработки. С помощью веток можно разрабатывать новые функции, не затрагивая основной код.
- Слияние (merge): процесс объединения изменений в одной ветке с изменениями в другой.
- Rebase: это процесс переприменения коммитов из одной ветки на другую. В отличие от слияния, которое объединяет историю двух веток, rebase создаёт новые коммиты для каждого коммита в исходной ветке. Это делает историю коммитов более линейной.
Установка Git
Несмотря на то, что Git сам по себе можно использовать только локально, обычно он используется совместно с такими хостингами репозиториев, как GitHub или gitlab. В этом гайде мы будем использовать GitHub.
- Перейдите на сайт GitHub: откройте веб-браузер и перейдите на github.com.
- Регистрация: на главной странице вам будет предложено создать учётную запись (Sign up). Введите адрес электронной почты, пароль и желаемое имя пользователя.
- Подтверждение регистрации: после ввода данных нажмите на кнопку "Sign up for GitHub". Вам может быть предложено решить простую капчу для подтверждения, что вы не робот.
- Выбор тарифного плана: GitHub предлагает различные тарифные планы, включая также и бесплатный. Выберите тот, который подходит вам лучше всего. Для большинства индивидуальных пользователей и малых проектов бесплатного плана будет достаточно.
- Настройка дополнительных параметров: вам может быть предложено ответить на несколько вопросов, чтобы помочь GitHub понять, как вы планируете использовать платформу. Этот шаг можно пропустить.
- Подтверждение электронной почты: перейдите на свой почтовый ящик, который вы указали при регистрации. Вы должны получить письмо от GitHub с ссылкой для подтверждения вашего адреса электронной почты. Нажмите на эту ссылку, чтобы завершить процесс регистрации.
- Завершение регистрации: после подтверждения адреса электронной почты вы будете перенаправлены на GitHub, где сможете начать работу с платформой.
Теперь мы можем установить git
в наш эмулятор консоли Termux. Для этого используем стандартный пакетный менеджер pkg
:
pkg install git
И сразу же проверим доступность новой команды, выведя её версию:
git -v
Настройка git
После установки нам следует сразу же настроить git. И начнём мы с настройки пользователя. Для этого нужно установить своё имя и адрес электронной почты. Это важно, потому что каждый коммит в Git содержит эту информацию:
git config --global user.name "ваш юзернейм, который вы указали при регистрации в GitHub"
git config --global user.email "ваша_почта@example.com, которую вы указали при регистрации в GitHub"
Для моего случая это будет: Настройка цветового вывода команд:
git config --global color.ui true
Чтобы проверить установленные настройки:
git config --list
Теперь же очень важно настроить авторизацию с GitHub. При каждом взаимодействии с GitHub (например, когда вы загружаете свои изменения или подтягиваете их с сервера) вам нужно будет авторизоваться. Самый простой, безопасный и общепринятый вариант авторизации при работе с git
- это использовать SSH ключи.
- Для начала нам скорее всего понадобится установить OpenSSH локально. Для этого мы снова можем использовать
pkg
:pkg install openssh
- Сгенерируем ключи для GitHub:
cd ~/.ssh ssh-keygen
- Теперь нам нужно скопировать наш публичный ключ. Он нам понадобится для настроек GitHub.
Чтобы скопировать текст в Termux, нужно зажать текст, который вы хотите выделить, и тогда появятся стандартные кнопки для выделения и кнопка скопировать. Выделяем весь выведенный текст и копируем его:cat id_rsa.pub
Теперь переходим в настройки аккаунта Github, чтобы установить наш публичный SSH ключ.
- Откроем боковое меню, нажав на аватарку:
- Выберем настройки:
- На странице настроек выберем "SSH and GPG keys":
- И нажимаем на "New SSH Key", чтобы добавить наш SSH ключ:
- Теперь мы можем заполнить форму для добавления SSH ключа. Названия ключа может быть любым, но лучше всего указать "termux", чтобы потом точно знать, к какому именно устройству привязан ключ. Тип указываем или оставляем "Authentication key" и вставляем скопированный публичный SSH ключ из Termux. После чего нажимаем "Add SSH Key", чтобы сохранить его.
- Если вы всё сделали правильно, то после добавления появится сообщение об успешном добавлении нового SSH ключа:
Теперь мы настроили git, подключили его к GitHub и можем приступить к созданию своего первого репозитория.
Создание репозитория
Репозиторий Git - это специально организованное хранилище, в котором сохраняется история изменений проекта и различная информация, необходимая для работы системы контроля версий Git. Простыми словами, это место, где Git хранит все данные о вашем проекте.
Существуют два основных типа репозиториев Git:
- Локальный репозиторий: это репозиторий, который находится на вашем компьютере. Когда вы инициализируете новый репозиторий с помощью команды
git init
или клонируете существующий репозиторий с помощьюgit clone
, вы работаете с локальным репозиторием. Он содержит все коммиты, ветки, теги и другую информацию, связанную с историей проекта. - Удалённый репозиторий: это версия вашего репозитория, которая хранится в интернете или на каком-либо удалённом сервере. Примеры платформ для хостинга удалённых репозиториев - GitHub, GitLab, Bitbucket и другие. Удалённые репозитории используются для совместной работы с другими разработчиками, а также для резервного копирования вашего проекта. Команды, такие как
git push
иgit pull
, позволяют вам взаимодействовать с удалёнными репозиториями, отправляя изменения на сервер или получая изменения с него.
Мы начнем с создания удалённого репозитория:
- Переходим в GitHub и открываем боковое меню, как мы делали при настройке SSH ключей, и нажимаем на "плюс":
- Нажимаем на "New repository":
- После этого у нас откроется форма для создания репозитория. Для начала нам будет достаточно просто ввести своё имя для репозитория. Нажимаем "Create repository". Я буду использовать для первого репозитория имя
my-first-repo
: - Теперь нам открылась пустая страница нового репозитория. Здесь мы выбираем тип SSH и копируем команды для создания репозитория из терминала:
- Открываем Termux. В нём переходим в домашнюю папку и создаём папку для репозитория:
cd mkdir my-first-repo cd my-first-repo
- Теперь вставляем команды, которые скопировали из GitHub:
- Вызываем команды, нажав
Enter
: - Ответив
yes
, мы закончим процесс создания репозитория:
Так мы создали свой первый удалённый репозиторий и его локальную копию. После этого мы можем приступить к созданию коммитов и веток.
Создание коммита
Коммит (commit) - это запись о наборе изменений в репозитории. Суть коммита - зафиксировать текущее состояние проекта в определённый момент времени. Это позволяет разработчикам отслеживать историю изменений, а также возвращаться к любому предыдущему состоянию проекта, если это необходимо.
Каждый коммит в Git содержит:
- Ссылку на набор изменений - детальное описание того, какие файлы были добавлены, изменены или удалены.
- Уникальный идентификатор - идентификатор (обычно хеш SHA-1), который позволяет Git однозначно идентифицировать коммит.
- Информацию о коммиттере - имя и адрес электронной почты того, кто совершил коммит.
- Дату и время создания коммита.
- Сообщение коммита - короткое описание изменений, внесённых в коммит, которое помогает разработчикам понять, что было сделано и почему.
Чтобы создать коммит, нужно выполнить следующие шаги:
- Вносим изменения в любой файл проекта:
nano code.sh
- Добавляем эти изменения в индекс с помощью команды
Обычно для добавления всех изменений вызываютgit add <filename>
git add
с текущей папкой.
:git add .
- Фиксируем изменения, создав коммит с помощью команды
git commit -m "Ваше сообщение о коммите"
С помощью коммитов вы можете просмотреть историю вашего проекта, а также перемещаться между различными состояниями кода. Чтобы вывести историю коммитов, можно использовать команду
git log
Когда у вас образуется большое количество коммитов, нужно будет нажать q
, *чтобы выйти из режима лога.
Создание ветки
Ветка (branch) - это линия развития работы, изолированная от других линий развития. Ветка представляет собой независимый поток изменений, который может быть объединён с главной линией развития или другими ветками в любой момент времени.
Ветвление позволяет работать над различными функциями или исправлениями одновременно, не влияя на основной код проекта. Когда новая функция или какое-то исправление готовы, изменения из этой ветки могут быть объединены (мердж) с главной веткой или другой веткой.
Чтобы создать новую ветку и переключиться на неё, вы можете использовать команду:
git checkout -b имя_новой_ветки
Чтобы переключиться между ветками:
git checkout имя_ветки
Чтобы обновить ветку на GitHub (или другом удалённом репозитории):
git push -u origin имя_ветки
Создадим ветку для нашего изменения:
git checkout -b new-branch
И обновим ветку в GitHub:
git push -u origin new-branch
Теперь, после того как мы обновили ветку в GitHub, мы можем создать Pull Request, чтобы обновить основную ветку.
Создание Pull Request
Пулреквест (Pull Request, часто сокращенно PR) - это функциональность платформ управления репозиториями, таких как GitHub, GitLab или Bitbucket. Пулреквест представляет собой предложение внести изменения из одной ветки в другую, чаще всего из ветки в вашем форке репозитория в основную ветку оригинального репозитория.
Пулреквесты служат не только средством предложения изменений, но и платформой для обсуждения этих изменений с другими участниками проекта.
Пулреквесты позволяют:
- Просматривать изменения: вы и другие участники проекта можете просмотреть предложенные изменения перед их интеграцией.
- Обсуждать детали: в комментариях к пулреквесту можно обсудить детали предложенных изменений, задать вопросы или предложить дополнения.
- Проводить ревью кода: другие разработчики могут рассмотреть код на предмет ошибок или улучшений.
- Тестировать изменения: некоторые системы позволяют автоматически запускать тесты на код из пулреквеста, чтобы убедиться, что предложенные изменения не нарушают функциональность проекта.
Чтобы создать пулреквест, переходим в наш репозиторий GitHub и переходим во вкладку Pull Request:
- Во вкладке Pull Request нажимаем на "New":
- Далее выбираем ветку, изменения которой мы хотим внести в основную ветку:
- После этого нажимаем на "Create pull request". Здесь мы уже можем увидеть, какие изменения будут внесены:
- На странице Pull Request можно вести обсуждение по изменению; перейдя во вкладку "Commits", можно увидеть коммиты, которые будут добавлены. Проскролим вниз, чтобы принять наш Pull Request:
- Внизу мы можем принять наши изменения, отклонить их или написать комментарий. Для принятия наших изменений нажмём "Merge pull request": И подтвердим:
Теперь мы можем перейти на главную страницу репозитория и увидеть наши изменения:
Итог
Системы контроля версий являются незаменимым инструментом для всех современных разработчиков. Они обеспечивают безопасность, стабильность и эффективность процесса разработки. Вне зависимости от того, трудитесь ли вы над маленьким проектом один или над крупным проектом в команде, СКВ предоставят вам полезные ресурсы для успешной работы.
В свою очередь, конкретно Git - очень мощный инструмент для управления версиями, который стал стандартом для индустрии. В этой статье мы освоили основные команды и понятия, и теперь вы сможете эффективно управлять своим кодом, а также сотрудничать с другими разработчиками. Впереди, конечно же, вас ждёт ещё множество других возможностей Git, и вы позднее сможете освоить их по необходимости.
Полезные ссылки
- Официальные ресурсы:
- Обучающие ресурсы:
- Pro Git book - бесплатная книга на официальном сайте Git. Она доступна на многих языках и охватывает почти все аспекты работы с Git.
- Git How To - интерактивное руководство для изучения Git.
- Вспомогательные инструменты:
- Gitignore.io - генератор файлов
.gitignore
для различных сред разработки. - Visualizing Git - интерактивная визуализация для понимания команд Git.
- Gitignore.io - генератор файлов
- Полезные статьи и руководства:
- A successful Git branching model - известная модель ветвления от Vincent Driessen.
- GitHub Flow - понимание процесса ветвления и слияния на GitHub.
- Git Tips - сборник полезных советов и трюков по Git.
- Курсы и видео:
- Git and GitHub Crash Course на YouTube.
- Git Essential Training на LinkedIn Learning.
- Форумы и сообщества:
- Stack Overflow Git tags - для решения конкретных проблем и вопросов по Git.
- Reddit r/git - сообщество для обсуждения новостей, вопросов и лучших практик, связанных с Git.
- dev.to Git tags - другие статьи на dev.to на тему git.
Обязательно подписывайтесь на мой аккаунт dev.to и Telegram-канал, скоро будет ещё больше контента: t.me/MainArthur