Arthur Kh
Page featuread image

“Мобильная” разработка. [Системы контроля версий, Git]

Published on

Системы контроля версий

Системы Контроля Версий (СКВ или 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.

  1. Перейдите на сайт GitHub: откройте веб-браузер и перейдите на github.com.
    Github homepage
  2. Регистрация: на главной странице вам будет предложено создать учётную запись (Sign up). Введите адрес электронной почты, пароль и желаемое имя пользователя.
    Sign up example
  3. Подтверждение регистрации: после ввода данных нажмите на кнопку “Sign up for GitHub”. Вам может быть предложено решить простую капчу для подтверждения, что вы не робот.
  4. Выбор тарифного плана: GitHub предлагает различные тарифные планы, включая также и бесплатный. Выберите тот, который подходит вам лучше всего. Для большинства индивидуальных пользователей и малых проектов бесплатного плана будет достаточно.
  5. Настройка дополнительных параметров: вам может быть предложено ответить на несколько вопросов, чтобы помочь GitHub понять, как вы планируете использовать платформу. Этот шаг можно пропустить.
  6. Подтверждение электронной почты: перейдите на свой почтовый ящик, который вы указали при регистрации. Вы должны получить письмо от GitHub с ссылкой для подтверждения вашего адреса электронной почты. Нажмите на эту ссылку, чтобы завершить процесс регистрации.
  7. Завершение регистрации: после подтверждения адреса электронной почты вы будете перенаправлены на GitHub, где сможете начать работу с платформой.
    Gtihub dashboard

Теперь мы можем установить git в наш эмулятор консоли Termux. Для этого используем стандартный пакетный менеджер pkg:

pkg install git

И сразу же проверим доступность новой команды, выведя её версию:

git -v
git installation

Настройка git

После установки нам следует сразу же настроить git. И начнём мы с настройки пользователя. Для этого нужно установить своё имя и адрес электронной почты. Это важно, потому что каждый коммит в Git содержит эту информацию:

git config --global user.name "ваш юзернейм, который вы указали при регистрации в GitHub"
git config --global user.email "ваша_почта@example.com, которую вы указали при регистрации в GitHub"

Для моего случая это будет:
my git config fill
Настройка цветового вывода команд:

git config --global color.ui true

Чтобы проверить установленные настройки:

git config --list

config list
Теперь же очень важно настроить авторизацию с GitHub. При каждом взаимодействии с GitHub (например, когда вы загружаете свои изменения или подтягиваете их с сервера) вам нужно будет авторизоваться. Самый простой, безопасный и общепринятый вариант авторизации при работе с git – это использовать SSH ключи.

  1. Для начала нам скорее всего понадобится установить OpenSSH локально. Для этого мы снова можем использовать pkg:
pkg install openssh
openssh installation
  1. Сгенерируем ключи для GitHub:
cd ~/.ssh
ssh-keygen
ssh-keygen
  1. Теперь нам нужно скопировать наш публичный ключ. Он нам понадобится для настроек GitHub.
cat id_rsa.pub

public key example
Чтобы скопировать текст в Termux, нужно зажать текст, который вы хотите выделить, и тогда появятся стандартные кнопки для выделения и кнопка скопировать. Выделяем весь выведенный текст и копируем его:
termux copy

Теперь переходим в настройки аккаунта Github, чтобы установить наш публичный SSH ключ.

  1. Откроем боковое меню, нажав на аватарку:
    Side menu
  2. Выберем настройки:
    settings
  3. На странице настроек выберем “SSH and GPG keys”:ssh gpg keys
  4. И нажимаем на “New SSH Key”, чтобы добавить наш SSH ключ:
    Add new SSH Key
  5. Теперь мы можем заполнить форму для добавления SSH ключа. Названия ключа может быть любым, но лучше всего указать “termux”, чтобы потом точно знать, к какому именно устройству привязан ключ. Тип указываем или оставляем “Authentication key” и вставляем скопированный публичный SSH ключ из Termux. После чего нажимаем “Add SSH Key”, чтобы сохранить его.
    new ssh key addition page
  6. Если вы всё сделали правильно, то после добавления появится сообщение об успешном добавлении нового SSH ключа:
    SSH success message

Теперь мы настроили git, подключили его к GitHub и можем приступить к созданию своего первого репозитория.

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

Репозиторий Git – это специально организованное хранилище, в котором сохраняется история изменений проекта и различная информация, необходимая для работы системы контроля версий Git. Простыми словами, это место, где Git хранит все данные о вашем проекте.

Существуют два основных типа репозиториев Git:

  • Локальный репозиторий: это репозиторий, который находится на вашем компьютере. Когда вы инициализируете новый репозиторий с помощью команды git init или клонируете существующий репозиторий с помощью git clone, вы работаете с локальным репозиторием. Он содержит все коммиты, ветки, теги и другую информацию, связанную с историей проекта.
  • Удалённый репозиторий: это версия вашего репозитория, которая хранится в интернете или на каком-либо удалённом сервере. Примеры платформ для хостинга удалённых репозиториев – GitHub, GitLab, Bitbucket и другие. Удалённые репозитории используются для совместной работы с другими разработчиками, а также для резервного копирования вашего проекта. Команды, такие как git push и git pull, позволяют вам взаимодействовать с удалёнными репозиториями, отправляя изменения на сервер или получая изменения с него.

Мы начнем с создания удалённого репозитория:

  1. Переходим в GitHub и открываем боковое меню, как мы делали при настройке SSH ключей, и нажимаем на “плюс”:
    plus
  2. Нажимаем на “New repository”:
    New repository
  3. После этого у нас откроется форма для создания репозитория. Для начала нам будет достаточно просто ввести своё имя для репозитория. Нажимаем “Create repository”. Я буду использовать для первого репозитория имя my-first-repo:
    first repo
    create repository
  4. Теперь нам открылась пустая страница нового репозитория. Здесь мы выбираем тип SSH и копируем команды для создания репозитория из терминала:
    empty repository page
  5. Открываем Termux. В нём переходим в домашнюю папку и создаём папку для репозитория:
cd
mkdir my-first-repo
cd my-first-repo
folder navigation
  1. Теперь вставляем команды, которые скопировали из GitHub:
    paste example
  2. Вызываем команды, нажав Enter:
    git init
  3. Ответив yes, мы закончим процесс создания репозитория:
    git init finish

Так мы создали свой первый удалённый репозиторий и его локальную копию. После этого мы можем приступить к созданию коммитов и веток.

Создание коммита

Коммит (commit) – это запись о наборе изменений в репозитории. Суть коммита – зафиксировать текущее состояние проекта в определённый момент времени. Это позволяет разработчикам отслеживать историю изменений, а также возвращаться к любому предыдущему состоянию проекта, если это необходимо.

Каждый коммит в Git содержит:

  1. Ссылку на набор изменений – детальное описание того, какие файлы были добавлены, изменены или удалены.
  2. Уникальный идентификатор – идентификатор (обычно хеш SHA-1), который позволяет Git однозначно идентифицировать коммит.
  3. Информацию о коммиттере – имя и адрес электронной почты того, кто совершил коммит.
  4. Дату и время создания коммита.
  5. Сообщение коммита – короткое описание изменений, внесённых в коммит, которое помогает разработчикам понять, что было сделано и почему.

Чтобы создать коммит, нужно выполнить следующие шаги:

  1. Вносим изменения в любой файл проекта:
nano code.sh
code nano
cat code.sh
  1. Добавляем эти изменения в индекс с помощью команды
git add <filename>

Обычно для добавления всех изменений вызывают git add с текущей папкой .:

git add .
  1. Фиксируем изменения, создав коммит с помощью команды
git commit -m "Ваше сообщение о коммите"
git commit

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

git log

git log
Когда у вас образуется большое количество коммитов, нужно будет нажать q, *чтобы выйти из режима лога.

Создание ветки

Ветка (branch) – это линия развития работы, изолированная от других линий развития. Ветка представляет собой независимый поток изменений, который может быть объединён с главной линией развития или другими ветками в любой момент времени.

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

Чтобы создать новую ветку и переключиться на неё, вы можете использовать команду:

git checkout -b имя_новой_ветки

Чтобы переключиться между ветками:

git checkout имя_ветки

Чтобы обновить ветку на GitHub (или другом удалённом репозитории):

git push -u origin имя_ветки

Создадим ветку для нашего изменения:

git checkout -b new-branch

git checkout
И обновим ветку в GitHub:

git push -u origin new-branch
git push

Теперь, после того как мы обновили ветку в GitHub, мы можем создать Pull Request, чтобы обновить основную ветку.

Создание Pull Request

Пулреквест (Pull Request, часто сокращенно PR) – это функциональность платформ управления репозиториями, таких как GitHub, GitLab или Bitbucket. Пулреквест представляет собой предложение внести изменения из одной ветки в другую, чаще всего из ветки в вашем форке репозитория в основную ветку оригинального репозитория.

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

Пулреквесты позволяют:

  1. Просматривать изменения: вы и другие участники проекта можете просмотреть предложенные изменения перед их интеграцией.
  2. Обсуждать детали: в комментариях к пулреквесту можно обсудить детали предложенных изменений, задать вопросы или предложить дополнения.
  3. Проводить ревью кода: другие разработчики могут рассмотреть код на предмет ошибок или улучшений.
  4. Тестировать изменения: некоторые системы позволяют автоматически запускать тесты на код из пулреквеста, чтобы убедиться, что предложенные изменения не нарушают функциональность проекта.

Чтобы создать пулреквест, переходим в наш репозиторий GitHub и переходим во вкладку Pull Request:

  1. Во вкладке Pull Request нажимаем на “New”:
    PR Page
  2. Далее выбираем ветку, изменения которой мы хотим внести в основную ветку:
    branch selection 1
branch selection 2
  1. После этого нажимаем на “Create pull request”. Здесь мы уже можем увидеть, какие изменения будут внесены:
    Create Pull Request
  2. На странице Pull Request можно вести обсуждение по изменению; перейдя во вкладку “Commits”, можно увидеть коммиты, которые будут добавлены. Проскролим вниз, чтобы принять наш Pull Request:
    PR Page
  3. Внизу мы можем принять наши изменения, отклонить их или написать комментарий. Для принятия наших изменений нажмём “Merge pull request”:
    Merge, Close Buttons
    И подтвердим:
    Confirm merge

Теперь мы можем перейти на главную страницу репозитория и увидеть наши изменения:
repo page

code.sh content

Итог

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

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

Полезные ссылки

  1. Официальные ресурсы:
  2. Обучающие ресурсы:
    • Pro Git book – бесплатная книга на официальном сайте Git. Она доступна на многих языках и охватывает почти все аспекты работы с Git.
    • Git How To – интерактивное руководство для изучения Git.
  3. Вспомогательные инструменты:
    • Gitignore.io – генератор файлов .gitignore для различных сред разработки.
    • Visualizing Git – интерактивная визуализация для понимания команд Git.
  4. Полезные статьи и руководства:
    • A successful Git branching model – известная модель ветвления от Vincent Driessen.
    • GitHub Flow – понимание процесса ветвления и слияния на GitHub.
    • Git Tips – сборник полезных советов и трюков по Git.
  5. Курсы и видео:
  6. Форумы и сообщества:
    • Stack Overflow Git tags – для решения конкретных проблем и вопросов по Git.
    • Reddit r/git – сообщество для обсуждения новостей, вопросов и лучших практик, связанных с Git.
    • dev.to Git tags – другие статьи на dev.to на тему git.

Обязательно подписывайтесь на мой аккаунт dev.to и Telegram-канал, скоро будет ещё больше контента: https://t.me/MainArthur