Практика на GitHub
Теперь всё вместе, на настоящем сайте. Создадим бесплатный репозиторий на GitHub и выполним в нём маленькую задачу. Весь путь занимает 20–30 минут.
Задача: добавить SQL-запрос «топ-3 клиента по выручке» и показать его команде через Pull Request.
Вам нужен аккаунт и SSH-ключ из урока Установка.
Шаг 1. Создайте репозиторий
Заголовок раздела «Шаг 1. Создайте репозиторий»- Откройте github.com/new.
- Repository name:
sql-practice. - Visibility:
Public. Приватный тоже бесплатный. Для учебы выберите любой. Не кладите в него ничего личного. - Включите Add a README file.
- Add .gitignore: оставьте
None. Свой файл добавим позже. - Нажмите Create repository.
GitHub создал репозиторий с одним файлом README.md и веткой main. Платить не нужно.
Так выглядит страница репозитория. Здесь — публичный репозиторий этого сайта:

Что на ней искать:
- Вкладки сверху.
Code— файлы.Issues— задачи.Pull requests— изменения на ревью.Actions— CI/CD. - Ветка
mainслева над файлами. Здесь можно переключить ветку. - Последний коммит над списком файлов: автор, сообщение, hash. Ссылка
Commitsсправа открывает всю историю. Этоgit logв браузере. - Колонка справа от каждого файла — последний коммит, который его менял.
Шаг 2. Клонируйте его на компьютер
Заголовок раздела «Шаг 2. Клонируйте его на компьютер»На странице репозитория нажмите зелёную кнопку Code, вкладка SSH, скопируйте адрес.

На скриншоте нет вкладки SSH: он сделан без входа в аккаунт. Когда вы вошли и добавили SSH-ключ, вкладка появится рядом с HTTPS. Адрес SSH начинается с git@github.com:.
git clone git@github.com:YOUR_NAME/sql-practice.gitcd sql-practicelsВы увидели README.md. Команда git clone скачала репозиторий вместе с историей и сама настроила origin.
Шаг 3. Заведите задачу (Issue)
Заголовок раздела «Шаг 3. Заведите задачу (Issue)»В командах работа начинается с задачи. На GitHub откройте вкладку Issues → New issue.
- Title:
Add top 3 customers by revenue query - Description:
Нужен запрос: топ-3 клиента по сумме завершённых заказов.
Нажмите Submit new issue. У задачи есть номер, например #1. Он нужен для связи с Pull Request.
Шаг 4. Ветка и код
Заголовок раздела «Шаг 4. Ветка и код»Не работайте в main. Создайте ветку под задачу:
git switch -c add-top-customersДобавьте тестовые данные и запрос:
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 > top_customers.sql <<'SQL'select customer, sum(amount) as revenuefrom 'orders.csv'where status = 'completed'group by customerorder by revenue desclimit 3SQLПроверьте запрос (нужен DuckDB):
duckdb -c ".read top_customers.sql"Ожидаемый результат:
| customer | revenue |
|---|---|
| clara | 300 |
| anna | 170 |
| boris | 40 |
Шаг 5. Коммит и push
Заголовок раздела «Шаг 5. Коммит и push»Сделайте два отдельных коммита: данные и запрос.
git add orders.csvgit commit -m "Add sample orders"git add top_customers.sqlgit commit -m "Add top 3 customers query"git push -u origin add-top-customersВ ответ Git напечатает ссылку для создания Pull Request.
Шаг 6. Откройте Pull Request
Заголовок раздела «Шаг 6. Откройте Pull Request»- Обновите страницу репозитория. Нажмите Compare & pull request.
- Title:
Add top 3 customers query. - В описании напишите:
Closes #1
- Добавил запрос top_customers.sql- Добавил тестовые данные orders.csv
Как проверить: duckdb -c ".read top_customers.sql"Слова Closes #1 свяжут PR с задачей. После merge задача закроется сама.
- Нажмите Create pull request.
Так выглядит открытый Pull Request. Здесь — PR, в котором добавили этот курс:

Что на ней искать:
- Статус под названием:
Open,MergedилиClosed. Рядом — из какой ветки в какую:main←ваша-ветка. - Conversation — описание и обсуждение.
- Commits — все коммиты ветки.
- Checks — результат CI. Зелёная галочка или красный крестик.
- Files changed — diff. Здесь делают ревью.
- Справа — ревьюеры (
Reviewers) и связанные задачи (Development).
Шаг 7. Ревью
Заголовок раздела «Шаг 7. Ревью»Попросите коллегу или друга открыть вкладку Files changed и оставить комментарий к строке. Если никого нет, сделайте это сами.
Так выглядит diff на GitHub. Красное — удалено, зелёное — добавлено:

- Слева два столбца номеров: строка в старой версии и в новой.
- Сверху имя файла и счётчик
+1 -1. - Значок
+появляется, когда вы наводите мышь на номер строки. Им добавляют комментарий.
- Наведите мышь на строку
limit 3и нажмите+. - Напишите:
Что будет, если у двух клиентов одинаковая выручка? - Нажмите Start a review → Finish your review → Request changes.
Ответьте на замечание новым коммитом. Например, добавьте , customer в order by, чтобы порядок был всегда одинаковым:
# правим top_customers.sql: order by revenue desc, customergit commit -am "Make order stable for equal revenue"git pushНовый коммит сам появится в Pull Request. Ревьюер нажимает Approve.
Шаг 8. Merge
Заголовок раздела «Шаг 8. Merge»- Нажмите Squash and merge → Confirm.
- Нажмите Delete branch.
- Откройте Issue
#1. Она закрыта автоматически.
Обновите локальный репозиторий:
git switch maingit pullgit branch -d add-top-customersgit log --onelineВ main один новый коммит с вашим запросом.
Шаг 9. Добавьте защиту main
Заголовок раздела «Шаг 9. Добавьте защиту main»Сделайте так, чтобы в main нельзя было писать напрямую.
- Settings → Rules → Rulesets → New ruleset → New branch ruleset.
- Название:
protect-main. Enforcement status:Active. - Target branches:
Include default branch. - Включите Require a pull request before merging.
- Нажмите Create.
Проверьте:
echo "test" >> README.mdgit commit -am "Direct push"git push origin mainПроверка: git push отклонён с ошибкой. Значит, защита работает.
Уберите тестовый коммит из локального main:
git reset --hard origin/maingit reset --hard стирает локальные коммиты и правки без возврата. Здесь это нужно: тестовый коммит нам не нужен.
Проверьте себя
Заголовок раздела «Проверьте себя»- Репозиторий
sql-practiceесть на GitHub. - Issue
#1закрыта автоматически после merge. - В
mainестьtop_customers.sqlиorders.csv. - В истории PR виден комментарий ревью и коммит с исправлением.
- Ветка
add-top-customersудалена.
Дополнительные задания
Заголовок раздела «Дополнительные задания»Задание 1. Вторая задача
Заголовок раздела «Задание 1. Вторая задача»Заведите Issue Add revenue by customer status. Сделайте для неё ветку, запрос revenue_by_status.sql и Pull Request. Свяжите его с Issue словом Closes.
Проверка: merge закрыл вторую Issue.
Подсказка
select status, sum(amount) as revenuefrom 'orders.csv'group by statusЗадание 2. Шаблон Pull Request
Заголовок раздела «Задание 2. Шаблон Pull Request»Добавьте файл .github/pull_request_template.md:
## Что изменилось
## Как проверитьПроверка: при создании нового PR описание заполнено шаблоном.
Задание 3. Форк
Заголовок раздела «Задание 3. Форк»Зайдите в чужой публичный репозиторий. Нажмите Fork. Исправьте опечатку в README.md и откройте Pull Request в оригинал. Так работают в open source.
Проверка: PR открыт. Мержить его не нужно.