# Основы управления версиями

Платформа dbt

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

Вы можете создать отдельную ветку для разработки и внесения изменений. Изменения, которые вы вносите, не сливаются с основной веткой в вашем подключенном репозитории (обычно называемой веткой `main`), если они не проходят тесты успешно. Это помогает поддерживать организованность кода и повышает продуктивность, делая процесс разработки более плавным.

Вы можете прочитать больше о терминологии git ниже, а также ознакомиться с [документацией GitHub](https://docs.github.com/en).

## Обзор Git

Ниже приведены некоторые общие термины git, с которыми вы можете столкнуться при разработке:

| Название                         | Определение                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Репозиторий (repo)               | Репозиторий — это каталог, в котором хранятся все файлы, папки и содержимое, необходимые для вашего проекта. Его можно представить как базу данных объектов проекта, в которой хранится всё: от самих файлов до их версий, коммитов и удалений. Репозитории не привязаны к одному пользователю: ими можно делиться и их можно копировать.                                                                                                                                                                                                                                                                                                                                                                                                            |
| Ветка                            | Ветка — это параллельная версия репозитория. Она находится внутри репозитория, но не влияет на основную ветку (main), позволяя свободно работать, не нарушая работу текущей версии. Внеся нужные изменения, вы можете слить свою ветку с основной, чтобы опубликовать изменения                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| Переключение (checkout)          | Команда `checkout` используется для создания новой ветки, переключения с текущей рабочей ветки на другую или перехода к другой версии файла из другой ветки.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Коммит                           | Коммит — это изменение, внесённое пользователем в файл (или набор файлов). Когда вы создаёте коммит для сохранения своей работы, Git создаёт уникальный идентификатор, который позволяет отслеживать конкретные зафиксированные изменения, а также сведения о том, кто и когда их внёс. Коммиты обычно содержат сообщение с кратким описанием внесённых изменений.                                                                                                                                                                                                                                                                                                                                                                                   |
| main                             | Основная, базовая ветка всех репозиториев. Все зафиксированные и принятые изменения должны находиться в ветке main.<br /><br />В Studio IDE основная ветка защищена. Это означает, что при использовании пользовательского интерфейса dbt platform вы не можете напрямую редактировать, форматировать файлы или проверять их линтером, а также выполнять команды dbt в защищённой основной ветке Git. Помните, что все операции Git в Studio IDE подчиняются разрешениям настроенных учётных данных и правилам, заданным у провайдера удалённого Git-репозитория (например, правилам защиты веток в GitHub или GitLab). Поскольку Studio IDE не позволяет создавать коммиты в защищённой ветке, вы можете зафиксировать эти изменения в новой ветке. |
| Слияние (merge)                  | Слияние переносит изменения из одной ветки в другую (обычно main). Перед слиянием сопровождающим проекта эти коммиты обычно сначала отправляют на рассмотрение через запрос на слияние (pull request).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Запрос на слияние (pull request) | Если кто-то изменил код в отдельной ветке проекта и хочет, чтобы изменения проверили перед добавлением в основную ветку, он может создать запрос на слияние. Такой запрос предлагает сопровождающим репозитория проверить внесённые коммиты и, если они приемлемы, слить изменения с основным репозиторием (upstream). Добавление изменений в основную ветку выполняется при их принятии.                                                                                                                                                                                                                                                                                                                                                            |
| Отправка (push)                  | Команда `push` обновляет удалённую ветку коммитами, созданными в текущей ветке. Вы буквально *отправляете* свои изменения в удалённый репозиторий.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Удалённый репозиторий (remote)   | Это версия репозитория или ветки, размещённая на сервере. Удалённые версии можно связать с локальными клонами для синхронизации изменений.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |

## Кнопка git в облачной IDE

Вы можете выполнять операции git с помощью кнопки git в [Studio IDE](https://docs.getdbt.tech/docs/platform/studio-ide/develop-in-studio.md). Ниже приведены описания команд, доступных через кнопку git, и действий, которые они выполняют:

| Название                | Действия                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Abort merge             | Этот параметр позволяет отменить слияние, при котором возникли конфликты. Будьте осторожны: все изменения будут сброшены, и эту операцию нельзя отменить. Поэтому перед началом слияния обязательно зафиксируйте или сохраните все свои изменения.                                                                                                                                                                                                                                         |
| Change branch           | Этот параметр позволяет переключаться между ветками (checkout).                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Commit                  | Коммит — это отдельное изменение файла (или набора файлов). Когда вы создаёте коммит, чтобы сохранить свою работу, Git создаёт уникальный идентификатор (также называемый «SHA» или «хеш»), который позволяет отслеживать конкретные зафиксированные изменения, а также сведения о том, кто и когда их внёс. Коммиты обычно содержат сообщение с кратким описанием внесённых изменений. Когда в дальнейшем вы будете изменять код, эти изменения также нужно будет фиксировать в коммитах. |
| Create new branch       | Этот параметр позволяет создать новую ветку на основе базовой и редактировать проект. После инициализации проекта вы заметите, что основная ветка защищена.<br /><br />Это означает, что вы можете напрямую редактировать и форматировать файлы, проверять их линтером и выполнять команды dbt в защищённой основной ветке git. Когда всё будет готово, вы сможете зафиксировать эти изменения в новой ветке.                                                                              |
| Initialize your project | Это действие выполняется при первоначальной настройке проекта. При инициализации проекта все необходимые каталоги и файлы создаются в пустом репозитории на основе стартового проекта dbt.<br />Примечание: этот параметр не отображается, если ваш репозиторий не полностью пуст (например, содержит файл README).<br />После нажатия **Initialize your project** нажмите **Commit**, чтобы завершить настройку проекта.                                                                  |
| Open pull request       | Этот параметр позволяет открыть запрос на слияние в Git, чтобы коллеги могли проверить изменения перед их слиянием с базовой веткой.                                                                                                                                                                                                                                                                                                                                                       |
| Pull changes from main  | Этот параметр доступен, если вы находитесь в любой локальной ветке, которая отстаёт от удалённой версии базовой ветки или от удалённой версии текущей ветки.                                                                                                                                                                                                                                                                                                                               |
| Pull from remote        | Этот параметр доступен, если вы находитесь в локальной базовой ветке и в удалённую версию этой ветки недавно были отправлены изменения. Получение изменений из удалённого репозитория позволяет загрузить последнюю версию базовой ветки.                                                                                                                                                                                                                                                  |
| Rollback to remote      | Сбрасывайте изменения в репозитории непосредственно из Studio IDE. Вы можете вернуть репозиторий к состоянию более раннего клона удалённого репозитория. Для этого нажмите значок с тремя точками в правом нижнем углу Studio IDE и выберите **Rollback to remote**.                                                                                                                                                                                                                       |
| Refresh git state       | Этот параметр позволяет получить новые ветки из другой удалённой ветки в вашу локальную ветку с помощью одной команды.                                                                                                                                                                                                                                                                                                                                                                     |

## Конфликты слияния

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

Обратитесь к разделу [Конфликты слияния](https://docs.getdbt.tech/docs/platform/git/merge-conflicts.md), чтобы узнать, как разрешать конфликты слияния.

## Файл .gitignore

dbt использует глобальный [файл `.gitignore`](https://github.com/dbt-labs/dbt-starter-project/blob/main/.gitignore), который автоматически исключает следующие вложенные папки из вашего репозитория git для обеспечения бесперебойной работы:

```text
dbt_packages/
logs/
target/
```

Это включение использует завершающий слэш, делая эти строки в файле `.gitignore` действующими как 'подстановочные знаки для папок', которые предотвращают отслеживание любых файлов или папок внутри них git. Вы также можете указать дополнительные исключения по мере необходимости для вашего проекта.

Однако этот глобальный файл `.gitignore` *не применяется* напрямую к пользователям dbt v1 и dbt platform CLI. Поэтому, если вы работаете с dbt v1 или dbt platform CLI, необходимо вручную добавить три упомянутые выше строки в файл `.gitignore` вашего проекта.

Стоит отметить, что некоторые провайдеры Git создают базовый файл `.gitignore` при создании репозитория, но в нём часто отсутствуют необходимые для dbt исключения. Поэтому для корректной работы dbt важно убедиться, что в ваш файл `.gitignore` добавлены три упомянутые выше строки.

примечание

* **Проекты dbt, созданные после 1 декабря 2022 года** — Если вы используете кнопку **Initialize dbt Project** в Studio IDE для создания нового пустого проекта dbt, dbt автоматически добавит файл `.gitignore` с необходимыми записями. Если файл `.gitignore` уже существует, записи для необходимых папок будут добавлены в существующий файл.

* **Перенос проекта из dbt v1 в dbt** — Обязательно убедитесь, что файл `.gitignore` содержит необходимые записи. dbt v1 не взаимодействует с Git, поэтому dbt не добавляет и не проверяет записи в файле `.gitignore` автоматически. Кроме того, если репозиторий уже содержит код dbt и не требует инициализации, dbt не добавит недостающие записи в файл .gitignore.

Для получения дополнительной информации или советов по устранению неполадок, пожалуйста, обратитесь к [подробному FAQ](https://docs.getdbt.tech/faqs/Git/gitignore.md).
