Фиксация списка при запросе на извлечение

#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 появляется другая ссылка.

Цитируя документы: вы можете получить в своей локальной копии отдельный запрос на слияние :

  1. Извлекает ссылку на запрос на извлечение на основе его идентификационного номера, создавая новую ветвь в процессе.

     $ 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"
    }
  ]
}