Pull Request
GitHub предоставляет удобный механизм совместной работы — Pull Request (PR). В этом документе описан полный процесс отправки PR в проект Apache Doris.
Процесс включает следующие шаги:
- Создайте форк репозитория
apache/dorisв своей учётной записи. - Настройте локальный git и создайте коммит с изменениями.
- Создайте PR на GitHub.
- Если возникнут конфликты, разрешите их с помощью rebase.
1. Создание форка репозитория
Перейдите на страницу GitHub репозитория apache/doris и нажмите кнопку Fork в правом верхнем углу, чтобы создать форк.

2. Настройка Git и создание коммита с изменениями
(1) Клонируйте код на локальный компьютер
git clone https://github.com/<your_github_name>/doris.git
cd doris
git submodule update --init --recursive
Примечание: замените <your_github_name> своим именем пользователя на GitHub.
После клонирования origin по умолчанию указывает на ваш удалённый форк на GitHub.
(2) Добавьте apache/doris как удалённый репозиторий upstream
cd doris
git remote add upstream https://github.com/apache/doris.git
(3) Проверьте настройки удалённых репозиториев
git remote -v
origin https://github.com/<your_github_name>/doris.git (fetch)
origin https://github.com/<your_github_name>/doris.git (push)
upstream https://github.com/apache/doris.git (fetch)
upstream https://github.com/apache/doris.git (push)
(4) Создайте новую ветку для своих изменений
git checkout -b <your_branch_name>
Примечание: <your_branch_name> — выбранное вами имя ветки.
После создания ветки можно вносить в неё изменения кода.
(5) Отправьте код в удалённую ветку
git commit -a -m "<your_commit_message>"
git push origin <your_branch_name>
Подробнее об использовании git см. в официальной документации GitHub: Использование git.
3. Создание PR
(1) Откройте новый PR
В браузере перейдите на свою страницу GitHub, выберите ветку, которую вы отправили (<your_branch_name>), и нажмите кнопку Compare & pull request, чтобы создать PR.

(2) Подготовьте ветку
Теперь появится кнопка Create pull request. Если она не появилась, проверьте, правильно ли выбрана ветка. Также можно нажать compare across forks, чтобы заново выбрать репозиторий и ветку.

(3) Заполните сообщение коммита
Укажите краткое описание коммита и подробности, затем нажмите Create pull request, чтобы завершить создание.
Основные правила написания сообщения коммита:
| Параметр | Требование |
|---|---|
| Форма | На английском языке, в форме «глагол + дополнение», в виде повелительного предложения |
| Время | Не используйте глаголы в прошедшем времени |
| Заголовок и основной текст | Оба обязательны и разделяются пустой строкой (на странице PR в GitHub заполните соответствующие поля по отдельности) |
| Длина заголовка | Не более 50 символов |
| Длина строки основного текста | Не более 72 символов в строке; более длинные строки переносите вручную |
| Содержание основного текста | Объясните, «что было сделано, почему и как» |
| Первая буква заголовка | Заглавная |
| Конец заголовка | Без точки |
| Связанная задача | Укажите связанную задачу в основном тексте (например, #233) |
Подробнее см. на странице https://chris.beams.io/posts/git-commit.

(4) Завершите создание PR
После создания PR вы увидите, что он ожидает проверки сопровождающими проекта Doris. Можно дождаться проверки и слияния или напрямую связаться с сообществом, чтобы узнать о ходе рассмотрения.

Теперь PR создан. Подробнее о PR см. в разделе Совместная работа с задачами и Pull Request.
(5) Дождитесь успешного прохождения проверок CI
После создания PR автоматически запускается конвейер CI. В списке проверок внизу страницы PR:
- Проверки с пометкой Обязательные должны все пройти успешно (стать зелёными), прежде чем PR можно будет объединить.
- Остальные, необязательные проверки носят справочный характер и не блокируют слияние.
Какие именно проверки обязательны, определяется текущими отметками на странице PR. Если проверка завершилась с ошибкой, нажмите на неё, чтобы открыть журнал GitHub Actions и найти причину. После исправления выполните git push, чтобы запустить проверки повторно.
4. Разрешение конфликтов
Конфликты кода при отправке PR обычно возникают, когда несколько человек редактируют один и тот же файл. Чтобы разрешить их, выполните следующие шаги:
(1) Переключитесь на основную ветку
git checkout master
(2) Синхронизируйте локальную основную ветку с удалённой
git pull upstream master
(3) Вернитесь в ветку разработки (предположим, она называется fix)
git checkout fix
(4) Выполните rebase
git rebase -i master
Откроется файл с историей коммитов. В большинстве случаев достаточно сохранить его без изменений. Затем Git укажет файлы с конфликтами. Откройте каждый такой файл и разрешите конфликт. После обработки всех конфликтующих файлов выполните:
git add .
git rebase --continue
Повторяйте эти действия, пока на экране не появится сообщение об успешном завершении rebase, например rebase successful. Затем принудительно отправьте обновления в ветку PR:
git push -f origin fix
5. Полный пример
Ниже приведён полный пример: от синхронизации кода до отправки ветки.
(1) Получите последнюю версию кода, находясь в локальной ветке с уже настроенным upstream
$ git branch
* master
$ git fetch upstream
remote: Counting objects: 195, done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 141 (delta 75), reused 108 (delta 48)
Receiving objects: 100% (141/141), 58.28 KiB, done.
Resolving deltas: 100% (75/75), completed with 43 local objects.
From https://github.com/apache/doris
9c36200..0c4edc2 master -> upstream/master
(2) Выполните rebase
$ git rebase upstream/master
First, rewinding head to replay your work on top of it...
Fast-forwarded master to upstream/master.
(3) Проверьте, остались ли коммиты других участников, ещё не синхронизированные с вашим репозиторием
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# custom_env.sh
nothing added to commit but untracked files present (use "git add" to track)
(4) Синхронизируйте коммиты других участников со своим репозиторием
$ git push origin master
Counting objects: 195, done.
Delta compression using up to 32 threads.
Compressing objects: 100% (41/41), done.
Writing objects: 100% (141/141), 56.66 KiB, done.
Total 141 (delta 76), reused 140 (delta 75)
remote: Resolving deltas: 100% (76/76), completed with 44 local objects.
To https://lide-reed:xxxx@github.com/lide-reed/doris.git
9c36200..0c4edc2 master -> master
(5) Создайте новую ветку и начните разработку
$ git checkout -b my_branch
Switched to a new branch 'my_branch'
$ git branch
master
* my_branch
(6) Добавьте изменения в индекс после редактирования кода
$ git add -u
(7) Укажите сообщение и создайте коммит в локальной ветке
$ git commit -m "Fix a typo"
[my_branch 55e0ba2] Fix a typo
1 files changed, 2 insertions(+), 2 deletions(-)
(8) Отправьте ветку в свой репозиторий на GitHub
$ git push origin my_branch
Counting objects: 11, done.
Delta compression using up to 32 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 534 bytes, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
remote:
remote: Create a pull request for 'my_branch' on GitHub by visiting:
remote: https://github.com/lide-reed/doris/pull/new/my_branch
remote:
To https://lide-reed:xxxx@github.com/lide-reed/doris.git
* [new branch] my_branch -> my_branch
Теперь можно создать PR, следуя описанным выше шагам.