Как я могу получить последний коммит из GitHub API

Мне было интересно, какой лучший способ получить последнюю информацию о коммите из репозитория git с помощью GitHub API (Rest API v3).

Опция 1: GET /repos/:owner/:repo/commits/masterМогу ли я предположить, что объект 'commit' из ответа является последним коммитом от master-узла ветки?

Вариант 2: GET /repos/:owner/:repo/git/commits/5a2ffИли сделайте вызовы, один, чтобы получить sha, получив ссылку HEAD от master, а затем получить информацию о коммите, используя возвращенный sha.

Спасибо за помощь

4 ответа

Решение

Это зависит от вашего определения "последний".

  • для данной ветви (как master), GET /repos/:owner/:repo/commits/master действительно последний (самый последний) коммит.

  • Но вы также можете рассмотреть последнее push-событие: оно будет представлять последний и последний сделанный коммит (в любой ветке), выдвинутый пользователем в это репо.

Другой способ получить последнюю фиксацию от пользователя - использовать следующую конечную точку https://api.github.com/users/<username>/events/public

Если вам нужен только SHA1 последнего коммита определенной ветки, вот curl запрос, который сделает это:

      curl -s -H "Authorization: token {your_github_access_token}" \
-H "Accept: application/vnd.github.VERSION.sha" \ 
"https://api.github.com/repos/{owner}/{repository_name}/commits/{branch_name}"

Вы также можете использовать Github GraphQL v4, чтобы получить последний коммит ветки по умолчанию:

{
  repository(name: "linux", owner: "torvalds") {
    defaultBranchRef {
      target {
        ... on Commit {
          history(first: 1) {
            nodes {
              message
              committedDate
              authoredDate
              oid
              author {
                email
                name
              }
            }
          }
        }
      }
    }
  }
}

Или для всех веток:

{
  repository(name: "material-ui", owner: "mui-org") {
    refs(first: 100, refPrefix: "refs/heads/") {
      edges {
        node {
          name
          target {
            ... on Commit {
              history(first: 1) {
                nodes {
                  message
                  committedDate
                  authoredDate
                  oid
                  author {
                    email
                    name
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Попробуйте в проводнике

Другие вопросы по тегам