Практика на GitLab
Повторим путь из прошлого урока на GitLab. Идея та же. Отличаются названия и кнопки.
Задача: добавить SQL-запрос «выручка по статусам заказов» и показать его команде через Merge Request.
Вам нужен аккаунт GitLab и SSH-ключ из урока Установка.
Словарь: GitHub и GitLab
Заголовок раздела «Словарь: GitHub и GitLab»| GitHub | GitLab |
|---|---|
| Repository | Project |
| Pull Request | Merge Request (MR) |
| Issues | Issues |
| Actions | CI/CD Pipelines |
| Squash and merge | Squash commits (галочка при merge) |
| Fork | Fork |
Шаг 1. Создайте проект
Заголовок раздела «Шаг 1. Создайте проект»- Откройте gitlab.com и нажмите New project → Create blank project.
- Project name:
sql-practice. - Visibility Level:
PublicилиPrivate. Оба бесплатные. - Включите Initialize repository with a README.
- Нажмите Create project.
Так выглядит страница проекта. Здесь — публичный проект GitLab Runner:

Главное отличие от GitHub — меню слева:
- Code — файлы, ветки, коммиты и Merge requests.
- Plan — задачи (Issues или Work items).
- Build — CI/CD: Pipelines и Jobs.
- Settings — настройки проекта. Видны только владельцу.
Над файлами — последний коммит и кнопка History. Это git log в браузере.
Шаг 2. Клонируйте проект
Заголовок раздела «Шаг 2. Клонируйте проект»Нажмите синюю кнопку Code, скопируйте адрес из блока Clone with SSH.
cd ..git clone git@gitlab.com:YOUR_NAME/sql-practice.git sql-practice-gitlabcd sql-practice-gitlabМы указали имя папки sql-practice-gitlab, чтобы не путать её с проектом на GitHub.
Шаг 3. Заведите Issue
Заголовок раздела «Шаг 3. Заведите Issue»Слева откройте Plan → Issues → New issue. В новых версиях GitLab этот пункт называется Work items, а кнопка — New item. Выберите тип Issue.
- Title:
Add revenue by status query - Description:
Нужен запрос: выручка по статусам заказов.
Нажмите Create issue. Запомните номер, например #1.
Шаг 4. Ветка и код
Заголовок раздела «Шаг 4. Ветка и код»git switch -c add-revenue-by-status
cat > orders.csv <<'CSV'order_id,customer,amount,status1,anna,100,completed2,boris,50,cancelled3,anna,70,completed4,clara,300,completed5,boris,40,completed6,dima,20,completedCSV
cat > revenue_by_status.sql <<'SQL'select status, sum(amount) as revenuefrom 'orders.csv'group by statusorder by statusSQL
duckdb -c ".read revenue_by_status.sql"Ожидаемый результат:
| status | revenue |
|---|---|
| cancelled | 50 |
| completed | 530 |
Шаг 5. Коммит и push
Заголовок раздела «Шаг 5. Коммит и push»git add orders.csv revenue_by_status.sqlgit commit -m "Add revenue by status query"git push -u origin add-revenue-by-statusGitLab напечатает ссылку для создания Merge Request.
Шаг 6. Откройте Merge Request
Заголовок раздела «Шаг 6. Откройте Merge Request»- Перейдите по ссылке из терминала. Или откройте Code → Merge requests → New merge request.
- Title:
Add revenue by status query. - В описании напишите:
Closes #1
- Добавил запрос revenue_by_status.sql- Добавил тестовые данные orders.csv
Как проверить: duckdb -c ".read revenue_by_status.sql"- Включите Squash commits и Delete source branch.
- Нажмите Create merge request.
Так выглядит Merge Request после merge:

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

В этом MR исправили опечатку: ppc64el → ppc64le. Маленький и понятный MR легко проверить.
- Наведите мышь на строку и нажмите значок комментария.
- Напишите:
Добавь в запрос количество заказов по статусам. - Нажмите Start review → Submit review.
В GitLab у комментария есть thread. Автор отвечает в нём и нажимает Resolve thread, когда исправил.
Исправьте запрос:
# добавьте в select: count(*) as ordersgit commit -am "Add orders count"git pushНовый коммит появится в Merge Request.
Шаг 8. Merge
Заголовок раздела «Шаг 8. Merge»- Нажмите Approve, если кнопка есть. Если вы работаете один, этот шаг можно пропустить.
- Нажмите Merge.
- Проверьте: Issue
#1закрыта, ветка удалена.
git switch maingit pullgit log --onelineШаг 9. Защита main
Заголовок раздела «Шаг 9. Защита main»В GitLab ветка main по умолчанию защищена: в неё нельзя делать force push. Прямой push доступен владельцу. Чтобы закрыть и его:
- Settings → Repository → Protected branches.
- У ветки
mainв Allowed to push and merge выберитеNo one. Или рольMaintainersдля merge. - В Settings → Merge requests включите Pipelines must succeed, когда подключите CI (урок CI/CD).
Проверьте себя
Заголовок раздела «Проверьте себя»- Проект
sql-practiceесть на GitLab. - Issue
#1закрыта после merge. - В
mainестьrevenue_by_status.sql. - В Merge Request виден thread ревью и коммит с исправлением.
Дополнительные задания
Заголовок раздела «Дополнительные задания»Задание 1. Одна история, два сервера
Заголовок раздела «Задание 1. Одна история, два сервера»В локальном репозитории sql-practice (из GitHub) добавьте GitLab как второй remote. Отправьте main на оба сервера.
Проверка: на GitHub и GitLab одинаковая история коммитов.
Решение
cd ../sql-practicegit remote add gitlab git@gitlab.com:YOUR_NAME/sql-practice-copy.gitgit remote -vgit push gitlab mainСначала создайте на GitLab пустой проект без README. Назовите его sql-practice-copy.
Задание 2. Шаблон Merge Request
Заголовок раздела «Задание 2. Шаблон Merge Request»Создайте файл .gitlab/merge_request_templates/Default.md:
## Что изменилось
## Как проверитьПроверка: при создании нового MR описание заполнено шаблоном.
Задание 3. Сравнение
Заголовок раздела «Задание 3. Сравнение»Заполните таблицу для себя: где вам было удобнее и почему.
| GitHub | GitLab | |
|---|---|---|
| Создание репозитория | ||
| Ревью кода | ||
| Закрытие Issue из PR/MR |
Нет правильных ответов. Важно увидеть, что обе платформы делают одно и то же.