#git #github-pages #github-api #pull-request
#git #github-страницы #github-api #запрос на извлечение
Вопрос:
Я вижу, что для фиксаций в запросе на извлечение максимальный предел равен 250 согласно документу: Список фиксирует запрос на извлечение, и если запрос на извлечение превышает 250 фиксаций, тогда предлагается другая конечная точка, которая является: Список фиксирует
Перечисляет максимум 250 коммитов для запроса на извлечение. Чтобы получить полный список фиксаций для запросов на извлечение с более чем 250 фиксациями, используйте конечную точку List commits.
GET /repos/:owner/:repo/pulls/:pull_number/commits
Но я не вижу, как с помощью List фиксирует конечную точку, я могу выяснить, связано ли это с запросом на извлечение.
РЕДАКТИРОВАТЬ: Интересно, должен ли я вместо этого полагаться на команды git здесь. т. е. клонировать репозиторий, запустить git log, чтобы получить список всех коммитов.. Есть ли лучший подход? Проблема: не все коммиты были бы отправлены в запрос на извлечение?
Кроме того, я ищу способ узнать, есть ли какие-либо новые фиксации, постепенно добавляемые в запрос на извлечение с момента его первого запуска. В случаях, когда комментарии к обзору обрабатываются и добавляются к существующему запросу на извлечение, в этом случае я хочу просто подтвердить постепенные изменения. Какие-либо указатели или документ о том, как этого добиться?
Ответ №1:
Вы можете перечислить запросы на извлечение, связанные с фиксацией, используя GET /repos/:owner/:repo/commits/:commit_sha/pulls
, который покажет запросы на извлечение, с которыми связан данный коммит. Это означает, что вам нужно будет проверять каждый коммит, чтобы увидеть, связан ли он с PR. Это создаст МНОГО избыточного сетевого трафика, поэтому, если это не является абсолютно необходимым, я бы не советовал искать связанные с PR коммиты с использованием этой конечной точки.
Лучшее решение, которое я вижу для поиска новых коммитов для PR, — это получить все коммиты ветки после создания запроса на извлечение. Вам нужно было бы GET
указать PR, извлечь created_at
поле и использовать конечную точку фиксации для извлечения коммитов из ветки, а также использовать created_at
поле PR для since
поля в теле запроса на фиксацию и указать целевую ветку.
Комментарии:
1. Хорошее начало! Но я хочу добавить, что при использовании поля created_at из PR будут пропущены все коммиты, отправленные в ветку до создания PR. Лучше получить PR-базу sha и запросить created_at из этого коммита.
Ответ №2:
В документации github указано, как проверять запрос на извлечение локально :
в удаленном репозитории текущая «активная фиксация» запроса на извлечение хранится под refs/pull/<id>/head
; когда запрос на слияние объединяется, в refs/pul/<id>/merge
появляется другая ссылка.
Цитируя документы: вы можете получить в своей локальной копии отдельный запрос на слияние :
Извлекает ссылку на запрос на извлечение на основе его идентификационного номера, создавая новую ветвь в процессе.
$ git fetch origin pull/ID/head:BRANCHNAME
Теперь вы можете сравнить BRANCHNAME
и master
(*), чтобы увидеть список коммитов по запросу на слияние :
git log master..BRANCHNAME
git rev-list master..BRANCHNAME
Обратите внимание, что вы можете выбрать выборку pull/ID/head
в какую-либо ссылку, отличную от ветки :
git fetch origin pull/ID/head:refs/remotes/origin/pr/ID
# now the pr appears as 'origin/pr/ID'
(*) если целевой ветви нет master
, вам нужно будет получить эту информацию иным способом, например, из api.
Вы также можете настроить свою спецификацию для автоматической выборки всех запросов на слияние; смотрите, например, эту суть :
Найдите раздел для вашего пульта github в файле .git / config. Это выглядит так:
[remote "origin"] fetch = refs/heads/*:refs/remotes/origin/* url = git@github.com:joyent/node.git
Теперь добавьте строку
fetch = refs/pull/*/head:refs/remotes/origin/pr/*
в этот раздел. Очевидно, измените URL-адрес github, чтобы он соответствовал URL-адресу вашего проекта. В конечном итоге это выглядит так:[remote "origin"] fetch = refs/heads/*:refs/remotes/origin/* url = git@github.com:joyent/node.git fetch = refs/pull/*/head:refs/remotes/origin/pr/*
Следующий git fetch
загрузит все ссылки для всех запросов на извлечение (закрытые, объединенные и открытые вместе).
Я не вижу истории запроса на извлечение, представленной в спецификации :
- вы могли бы настроить клон репозитория с приведенной выше спецификацией,
- и перехват на github, который будет уведомлять этот клон каждый раз, когда выполняется нажатие на запрос на извлечение,
- чтобы клон просто запускался
git fetch origin
при уведомлении
Таким образом: история запроса на извлечение будет отображаться в его рефлоге :
git reflog origin/pr/<id>
Более прямой способ: с помощью перехвата у вас будет доступ к отправляемым коммит-кодам и обновляемому запросу на извлечение, поэтому вы можете настроить что-то для хранения истории этого запроса на извлечение.
Ответ №3:
GitHub CLI может перечислять PR-коммиты. Удобно, что интерфейс командной строки предварительно установлен в исполнителях GitHub Actions.
gh pr view 19 --json commits
{
"commits": [
{
"authoredDate": "2022-11-21T20:36:33Z",
"authors": [
{
"email": "1677955 someone@users.noreply.github.com",
"id": "MDQ6VXNlcjE2Nzc5NTU=",
"login": "someone",
"name": "someone"
}
],
"committedDate": "2022-11-21T20:36:33Z",
"messageBody": "",
"messageHeadline": "chore(main): release 0.3.5",
"oid": "7da95da24f502d32bbdc01a117bc881bad6007df"
}
]
}