Перейти к содержимому
TelegramGitHub

Практика на GitLab

Повторим путь из прошлого урока на GitLab. Идея та же. Отличаются названия и кнопки.

Задача: добавить SQL-запрос «выручка по статусам заказов» и показать его команде через Merge Request.

Вам нужен аккаунт GitLab и SSH-ключ из урока Установка.

GitHubGitLab
RepositoryProject
Pull RequestMerge Request (MR)
IssuesIssues
ActionsCI/CD Pipelines
Squash and mergeSquash commits (галочка при merge)
ForkFork
  1. Откройте gitlab.com и нажмите New project → Create blank project.
  2. Project name: sql-practice.
  3. Visibility Level: Public или Private. Оба бесплатные.
  4. Включите Initialize repository with a README.
  5. Нажмите Create project.

Так выглядит страница проекта. Здесь — публичный проект GitLab Runner:

Страница проекта на GitLab: меню слева, кнопка Code, список файлов и последний коммит

Главное отличие от GitHub — меню слева:

  • Code — файлы, ветки, коммиты и Merge requests.
  • Plan — задачи (Issues или Work items).
  • Build — CI/CD: Pipelines и Jobs.
  • Settings — настройки проекта. Видны только владельцу.

Над файлами — последний коммит и кнопка History. Это git log в браузере.

Нажмите синюю кнопку Code, скопируйте адрес из блока Clone with SSH.

Окно терминала
cd ..
git clone git@gitlab.com:YOUR_NAME/sql-practice.git sql-practice-gitlab
cd sql-practice-gitlab

Мы указали имя папки sql-practice-gitlab, чтобы не путать её с проектом на GitHub.

Слева откройте Plan → Issues → New issue. В новых версиях GitLab этот пункт называется Work items, а кнопка — New item. Выберите тип Issue.

  • Title: Add revenue by status query
  • Description: Нужен запрос: выручка по статусам заказов.

Нажмите Create issue. Запомните номер, например #1.

Окно терминала
git switch -c add-revenue-by-status
cat > orders.csv <<'CSV'
order_id,customer,amount,status
1,anna,100,completed
2,boris,50,cancelled
3,anna,70,completed
4,clara,300,completed
5,boris,40,completed
6,dima,20,completed
CSV
cat > revenue_by_status.sql <<'SQL'
select
status,
sum(amount) as revenue
from 'orders.csv'
group by status
order by status
SQL
duckdb -c ".read revenue_by_status.sql"

Ожидаемый результат:

statusrevenue
cancelled50
completed530
Окно терминала
git add orders.csv revenue_by_status.sql
git commit -m "Add revenue by status query"
git push -u origin add-revenue-by-status

GitLab напечатает ссылку для создания Merge Request.

  1. Перейдите по ссылке из терминала. Или откройте Code → Merge requests → New merge request.
  2. Title: Add revenue by status query.
  3. В описании напишите:
Closes #1
- Добавил запрос revenue_by_status.sql
- Добавил тестовые данные orders.csv
Как проверить: duckdb -c ".read revenue_by_status.sql"
  1. Включите Squash commits и Delete source branch.
  2. Нажмите Create merge request.

Так выглядит Merge Request после merge:

Merge Request на GitLab: статус Merged, вкладки Overview, Commits, Pipelines, Changes, пройденный pipeline и блок Approved by

Что на нём искать:

  • Статус под названием: Open или Merged. Рядом — из какой ветки в какую.
  • Описание со словами Closes #40238. После merge задача закрылась сама.
  • Pipeline — результат CI. Кружки — это этапы (stages). Зелёные — пройдены.
  • Approved by — кто одобрил.
  • Вкладки: Overview — обсуждение, Commits — коммиты, Pipelines — запуски CI, Changes — diff.
  1. Откройте вкладку Changes. Тут тот же diff, что на GitHub:

Вкладка Changes в Merge Request на GitLab: три удалённые строки красным и три добавленные строки зелёным, исправлена опечатка ppc64el на ppc64le

В этом MR исправили опечатку: ppc64el → ppc64le. Маленький и понятный MR легко проверить.

  1. Наведите мышь на строку и нажмите значок комментария.
  2. Напишите: Добавь в запрос количество заказов по статусам.
  3. Нажмите Start review → Submit review.

В GitLab у комментария есть thread. Автор отвечает в нём и нажимает Resolve thread, когда исправил.

Исправьте запрос:

Окно терминала
# добавьте в select: count(*) as orders
git commit -am "Add orders count"
git push

Новый коммит появится в Merge Request.

  1. Нажмите Approve, если кнопка есть. Если вы работаете один, этот шаг можно пропустить.
  2. Нажмите Merge.
  3. Проверьте: Issue #1 закрыта, ветка удалена.
Окно терминала
git switch main
git pull
git log --oneline

В GitLab ветка main по умолчанию защищена: в неё нельзя делать force push. Прямой push доступен владельцу. Чтобы закрыть и его:

  1. Settings → Repository → Protected branches.
  2. У ветки main в Allowed to push and merge выберите No one. Или роль Maintainers для merge.
  3. В Settings → Merge requests включите Pipelines must succeed, когда подключите CI (урок CI/CD).
  • Проект sql-practice есть на GitLab.
  • Issue #1 закрыта после merge.
  • В main есть revenue_by_status.sql.
  • В Merge Request виден thread ревью и коммит с исправлением.

В локальном репозитории sql-practice (из GitHub) добавьте GitLab как второй remote. Отправьте main на оба сервера.

Проверка: на GitHub и GitLab одинаковая история коммитов.

Решение
Окно терминала
cd ../sql-practice
git remote add gitlab git@gitlab.com:YOUR_NAME/sql-practice-copy.git
git remote -v
git push gitlab main

Сначала создайте на GitLab пустой проект без README. Назовите его sql-practice-copy.

Создайте файл .gitlab/merge_request_templates/Default.md:

## Что изменилось
## Как проверить

Проверка: при создании нового MR описание заполнено шаблоном.

Заполните таблицу для себя: где вам было удобнее и почему.

GitHubGitLab
Создание репозитория
Ревью кода
Закрытие Issue из PR/MR

Нет правильных ответов. Важно увидеть, что обе платформы делают одно и то же.