Files
SecondBrain/00 Inbox/Система контроля версий. Знакомство с Git.md
T
Dmitry 793c2ebf3f ada-pc: 2026-06-10 22:27:38 | 1
Affected files:
00 Inbox/Система контроля версий. Знакомство с Git.md
2026-06-10 22:27:38 +03:00

223 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
status: seed
type: concept
tags: []
created: 2025-12-17
updated: 2026-06-10
aliases: []
---
# Система контроля версий. Знакомство с Git
## Git
Неоспоримыми преимуществами Git являются:
- Высокая производительность.
- Безопасность.
- Гибкость в распределенных системах.
- Прекрасные возможности для командной работы.
### Производительность
Высокая производительность Git обусловлена подходом по оптимизации внутренних процедур и использованию анализа содержимого файлов Git работает с файлами, храня объекты с содержимым каталога и метаданными их версий.
### Безопасность
Безопасность при работе с Git обеспечивается целостностью исходного кода и применением алгоритма шифрования SHA1.
Использование Git гарантирует подлинность истории изменений и защищает исходный код от тайного внесения изменений.
### Гибкость
Гибкость при работе с Git достигается за счет поддержки линейных и нелинейных циклов разработки, совместимости со множеством других информационных систем и популярных протоколов.
### Возможности для командной работы
Git обладает впечатляющими возможностями для командной работы за счет поддержки множества разнообразных моделей управления исходным кодом, удовлетворяющих нужды больших и маленьких команд, простых и сложных распределенных проектов
## Часть 3. Модели управления исходным кодом
Работа с версиями исходного кода в Git построена на основе использования:
- Коммитов (Commits).
- Веток (Branches).
- Слияния веток (Merge).
- Сравнения версий (Diff).
Большой популярностью до сих пор пользуется модель под названием Gitflow.
### Gitflow
**Gitflow** — модель ветвления в Git, в которой используются основные ветки (Main, Кelease, Вevelop) и функциональные ветки (Feature).
В качестве основных веток в Gitflow часто используются:
- Main (Ex. master).
- Release.
- Develop (Dev).
В ветке Main хранится официальная история релизов, в Release ветках концентрируется функционал готово к выпуску релиза продукта, а ветка Develop предназначена для разработки функционала.
В качестве функциональных веток в `Gitflow` используются *Feature* ветки, ответвленные от основной ветки *Develop*.
Работа над каждым новым функционалом ведется командой в собственной *Feature-ветке*.
После завершения разработки функционала, каждая *Feature-ветка* **сливается** с *Develop-веткой*.
Когда в *Develop-ветке* оказывается достаточно функционала для выпуска нового релиза, на основе *Develop-ветки* создается ветка **Release**.
После прохождения всех тестов и проверок, Release-ветка сливается с остальными основными ветками — Main и Develop.
**Весь цикл разработки в модели Gitflow можно визуализировать** **следующим образом:**
![](https://legacy.merionet.ru/images/devops/images/3756/img_01.png)
**Модель Gitflow обладает и недостатками:**
- Не лучшая совместимость с современными процессами CI/CD.
- Не подходит для рабочих процессов, основывающихся на подходах, отличных от регулярного выпуска релизов.
- Потенциально запутанная схема веток и трудности в восстановлении историчности их слияний в сложных проектах.
На данный момент, Gitflow является *недостаточно универсальной моделью* рабочего процесса разработки и считается **устаревшей**.
Предпочтительной для современных процессов разработки является модель магистральных рабочих процессов (TBD).
### TBD
**TBD (Trunk Based Development)** — альтернативная модель управления исходным кодом в Git на основе ветвления, пришедшая на смену устаревшей модели Gitflow.
Модель TBD основана на принципе использования одной главной ветки, называемой “магистралью” (Trunk).
Вся работа над новым функционалом ведется разработчиками именно в магистральной ветке, что исключает трудности, связанные со слиянием и неработающими сборками.
Команда разработки, ведущая работу над новым функционалом, сохраняет свои изменения только в Trunk-ветку и обеспечивает непрерывную сборку, тестирование и доставку нового функционала, не привязываясь к срокам и частоте выпуска релизов.
При использовании модели TBD и регулярном добавлении в основную Trunk-ветку функционала, а также настроенных стабильных процессов сборки и доставки продукта (CI/CD), выпустить релиз можно практически в любой момент.
**Модель TBD можно визуализировать следующим образом:**
![](https://legacy.merionet.ru/images/devops/images/3756/img_02.png)
Модель TDB быстро завоевала популярность в разветвленных проектах и прекрасно зарекомендовала себя в распределенных больших командах разработки за счет своей понятности, динамичности и совместимости с CI/CD-процессами.
## Часть 4. Знакомство с Gitlab
### Gitlab
**Gitlab** — это веб-приложение, обеспечивающее управление репозиториями программного кода в системе контроля версий Git.
Установить и использовать Gitlab можно на собственном сервере или в облачной инфраструктуре.
Gitlab позволяет:
- Создавать, изменять и удалять репозитории.
- Управлять пользователями и их правами.
- Автоматизировать процессы CI/CD и тестирования.
- Полнофункционально взаимодействовать с исходным кодом из веб-интерфейса.
Основные преимущества Gitlab:
- Гибкие возможности по планированию командной разработки.
- Создание и управление проектами.
- Построение процессов тестирования кода.
- Непрерывная сборка и доставка (CI/CD).
- Наблюдаемость (Observability).
Gitlab позволяет эффективно поддерживать и развивать выбранный вами подход по управлению исходным кодом и командной разработкой (Gitflow, TDB и другие).
Работа с репозиториями в Gitlab осуществляется посредством создания, изменения, управления, удаления проектов и работы с пользователями.
Функциональность Gitlab позволяет задействовать инструменты по управлению ветками и коммитами пользователей, обеспечивая слаженную командную работу.
В Gitlab реализованы инструменты для проведения следующих операций над исходным кодом:
- Code-review.
- Оценка качества кода.
- Тестирование.
Возможна настройка модели приемки качества исходного кода, его проверки и тестирования.
Gitlab обладает интегрированными инструментами, позволяющими автоматизировать рутинные операции с исходным кодом:
- Непрерывную сборку и доставку (CI/CD).
- Тестирование новых версий.
- Релизный цикл продукта.
- Проверки по безопасности.
Gitlab позволяет отслеживать и обрабатывать множество важной информации о процессе разработки:
- Трекинг затраченного рабочего времени на разработку функционала и выпуск новых релизов.
- Мониторинг работоспособности приложения.
- Расширенный сбор и анализ метрик.
## Часть 5. Основные команды git
### Команды Git
#### `git init`
Создание нового Git-репозитория (преобразование существующего проекта или создание нового пустого репозитория).
#### `git clone`
Создание локальной копии удаленного Git-репозитория.
#### `git branch`
Создание отдельной ветки на основе существующей для осуществления в новой ветке процесса разработки с возможным последующим слиянием.
#### `git checkout`
Переключение между различными версиями целевого объекта (файлы, коммиты и ветки).
#### `git status`
Отображение рабочего состояния файлов в локальной копии отслеживаемого проекта.
#### `git add`
Индексирование изменений в локальной копии отслеживаемого проекта.
#### `git commit`
Подготовка к отправке в удаленный репозиторий набора проиндексированных изменений в локальном проекте.
#### `git push`
Выгрузка в удаленный репозиторий подготовленного набора проиндексированных изменений из отслеживаемой локальной копии.
#### `git pull`
Загрузка содержимого из удаленного репозитория и немедленное слияние изменений в локальный отслеживаемый репозиторий.
#### `git restore`
Отмена индексации изменений в локальном репозитории.
#### `git revert`
Отмена подготовленных к отправке проиндексированных изменений в локальном репозитории с сохранением истории.
#### `git merge`
Слияние ответвления (ветки ответвленной с веткой изначальной). Изменения часто проходят процедуру согласования с участниками команды разработки через механизм merge Request.
#### `git rebase`
Операция, подобная слиянию (Git merge).
**Команды Git merge и Git rebase решают одну и ту же проблему –** **слияние одной ветки в другую, но делают это по-разному.**
**Git merge** — это неразрушающая операция, существующие ветки никак не изменяются.
![](https://legacy.merionet.ru/images/devops/images/3756/img_04.png)
**Git rebase** — это операция фактического перебазирования ответвленной ветки в исходную, с созданием идеальной линейной истории проекта.
![](https://legacy.merionet.ru/images/devops/images/3756/img_03.png)
Золотое правило перебазирования:
**“Never rebase while you're on a public branch”** (никогда не используйте git rebase в публичных репозиториях) Если вы предпочитаете иметь чистую линейную историю без ненужных коммитов слияния – используйте Git rebase.
Если вам необходимо сохранить полную историю проекта и избежать перезаписи публичных коммитов – используйте команду Git merge.