Перейти к содержимому
Последнее обновление

Pull Request

GitHub предоставляет удобный механизм совместной работы — Pull Request (PR). В этом документе описан полный процесс отправки PR в проект Apache Doris.

Процесс включает следующие шаги:

  1. Создайте форк репозитория apache/doris в своей учётной записи.
  2. Настройте локальный git и создайте коммит с изменениями.
  3. Создайте PR на GitHub.
  4. Если возникнут конфликты, разрешите их с помощью 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.

Новый PR

(2) Подготовьте ветку​

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

Создание PR

(3) Заполните сообщение коммита​

Укажите краткое описание коммита и подробности, затем нажмите Create pull request, чтобы завершить создание.

Основные правила написания сообщения коммита:

ПараметрТребование
ФормаНа английском языке, в форме «глагол + дополнение», в виде повелительного предложения
ВремяНе используйте глаголы в прошедшем времени
Заголовок и основной текстОба обязательны и разделяются пустой строкой (на странице PR в GitHub заполните соответствующие поля по отдельности)
Длина заголовкаНе более 50 символов
Длина строки основного текстаНе более 72 символов в строке; более длинные строки переносите вручную
Содержание основного текстаОбъясните, «что было сделано, почему и как»
Первая буква заголовкаЗаглавная
Конец заголовкаБез точки
Связанная задачаУкажите связанную задачу в основном тексте (например, #233)

Подробнее см. на странице https://chris.beams.io/posts/git-commit.

Создание PR

(4) Завершите создание PR​

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

Создание PR

Теперь 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, следуя описанным выше шагам.

На этой странице