Как получить список всех репозиториев GitHub человека?

Мы работаем над проектом, в котором нам нужно отобразить все проекты человека в его репозитории на аккаунте GitHub.

Кто-нибудь может подсказать, как я могу отобразить имена всех git-репозиториев конкретного человека, используя его имя пользователя git?

24 ответа

Вы можете использовать GitHub API для этого. Удары https://api.github.com/users/username/repos будет перечислять публичные репозитории этого пользователя.

Используйте Github API:

/users/:user/repos

Это даст вам все публичные репозитории пользователя. Если вам нужно найти частные репозитории, вам нужно будет аутентифицироваться как конкретный пользователь. Затем вы можете использовать вызов REST:

/user/repos

найти все репозитории пользователя.

Для этого в Python сделайте что-то вроде:

USER='AUSER'
API_TOKEN='ATOKEN'
GIT_API_URL='https://api.github.com'

def get_api(url):
    try:
        request = urllib2.Request(GIT_API_URL + url)
        base64string = base64.encodestring('%s/token:%s' % (USER, API_TOKEN)).replace('\n', '')
        request.add_header("Authorization", "Basic %s" % base64string)
        result = urllib2.urlopen(request)
        result.close()
    except:
        print 'Failed to get api request from %s' % url

Где URL-адрес, переданный функции, является REST-адресом, как в приведенных выше примерах. Если вам не нужно проходить аутентификацию, просто измените метод, чтобы удалить добавление заголовка авторизации. Затем вы можете получить любой общедоступный URL-адрес API с помощью простого запроса GET.

Попробуйте следующее curl Команда для отображения репозиториев:

GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'

Чтобы получить список клонированных URL-адресов, выполните:

GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'

Если это личное, вам нужно добавить свой ключ API (access_token=GITHUB_API_TOKEN), например:

curl "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN" | grep -w clone_url

Чтобы клонировать их, смотрите: Как клонировать все репо сразу из GitHub?

Смотрите также: Как скачать GitHub Release из частного репозитория с помощью командной строки

Вы также можете использовать для этого новый модный github cli :

      $ gh api users/:owner/repos

Он также распечатает вывод, что сделает его более читаемым.

Вот полная спецификация API репозиториев:

https://developer.github.com/v3/repos/

GET /users/:username/repos

Параметры строки запроса:

Первые 5 задокументированы в приведенной выше ссылке API. Параметры дляpage а также per_page которые документированы в другом месте и полезны в полном описании.

  • type (строка): может быть одним из all, owner, member. По умолчанию:owner
  • sort (строка): может быть одним из created, updated, pushed, full_name. По умолчанию:full_name
  • direction (строка): может быть одним из asc или desc. По умолчанию:asc когда используешь full_name, иначе desc
  • page (целое число): Текущая страница
  • per_page (целое число): количество записей на странице

Поскольку это HTTP GET API, в дополнение к cURL, вы можете попробовать это просто в браузере. Например:

https://api.github.com/users/grokify/repos?per_page=1&page=2

Если у вас установлен jq, вы можете использовать следующую команду, чтобы просмотреть все публичные репозитории пользователя.

curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'

Вам, вероятно, нужно решение jsonp:

https://api.github.com/users/[user name]/repos?callback=abc

Если вы используете jQuery:

$.ajax({
  url: "https://api.github.com/users/blackmiaool/repos",
  jsonp: true,
  method: "GET",
  dataType: "json",
  success: function(res) {
    console.log(res)
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Модуль NPM РЕПО хватает JSON для всех публичных сделок РЕПО для некоторого пользователя или группы. Вы можете запустить это прямо изnpx поэтому вам не нужно ничего устанавливать, просто выберите организацию или пользователя (здесь "W3C"):

$ npx repos W3C W3Crepos.json

Это создаст файл с именем W3Crepos.json. Grep достаточно хорош, например, для получения списка репозиториев:

$ grep full_name W3Crepos.json

плюсы:

  • Работает с более чем 100 репозиториями (многие ответы на этот вопрос - нет).
  • Не много печатать.

минусы:

  • Требуется npx (или npm если хотите установить по-настоящему).

Теперь есть возможность использовать замечательный GraphQL API Explorer.

Мне нужен список всех активных репозиториев моей организации с соответствующими языками. Этот запрос делает именно это:

{
  organization(login: "ORG_NAME") {
    repositories(isFork: false, first: 100, orderBy: {field: UPDATED_AT, direction: DESC}) {
      pageInfo {
        endCursor
      }
      nodes {
        name
        updatedAt
        languages(first: 5, orderBy: {field: SIZE, direction: DESC}) {
          nodes {
            name
          }
        }
        primaryLanguage {
          name
        }
      }
    }
  }
}

Получите список всех публичных репозиториев пользователя GitHub с помощью Python:

import requests
username = input("Enter the github username:")
request = requests.get('https://api.github.com/users/'+username+'/repos')
json = request.json()
for i in range(0,len(json)):
  print("Project Number:",i+1)
  print("Project Name:",json[i]['name'])
  print("Project URL:",json[i]['svn_url'],"\n")

Ссылка

Если вы ищете репо организации -

api.github.com/orgs/$NAMEOFORG/repos

Пример:

curl https://api.github.com/orgs/arduino-libraries/repos

Также вы можете добавить параметр per_page, чтобы получить все имена на всякий случай, если возникнет проблема с разбивкой на страницы -

curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100

Используя Python:

      import requests

link = ('https://api.github.com/users/{USERNAME}/repos')

api_link = requests.get(link)
api_data = api_link.json()

repos_Data = (api_data)

repos = []

[print(f"- {items['name']}") for items in repos_Data]

Если вы хотите получить все репозитории в списке (массиве), вы можете сделать что-то вроде этого:

      import requests

link = ('https://api.github.com/users/{USERNAME}/repos')

api_link = requests.get(link)
api_data = api_link.json()

repos_Data = (api_data)

repos = []

[repos.append(items['name']) for items in repos_Data]

Это сохранит все репозитории в массиве repos.

Пейджинг JSON

Код JS ниже предназначен для использования в консоли.

username = "mathieucaroff";

w = window;
Promise.all(Array.from(Array(Math.ceil(1+184/30)).keys()).map(p =>
    fetch(`//api.github.com/users/{username}/repos?page=${p}`).then(r => r.json())
)).then(all => {
    w.jo = [].concat(...all);
    // w.jo.sort();
    // w.jof = w.jo.map(x => x.forks);
    // w.jow = w.jo.map(x => x.watchers)
})

HTML

<div class="repositories"></div>

JavaScript

// Репозитории Github

Если вы хотите ограничить список репозиториев, вы можете просто добавить ?per_page=3 после username/repos.

например username/repos?per_page=3

Вместо того /username/, вы можете разместить имя пользователя любого человека на Github.

var request = new XMLHttpRequest();
        request.open('GET','https://api.github.com/users/username/repos' , 
        true)
        request.onload = function() {
            var data = JSON.parse(this.response);
            console.log(data);
            var statusHTML = '';
            $.each(data, function(i, status){
                statusHTML += '<div class="card"> \
                <a href=""> \
                    <h4>' + status.name +  '</h4> \
                    <div class="state"> \
                        <span class="mr-4"><i class="fa fa-star mr-2"></i>' + status.stargazers_count +  '</span> \
                        <span class="mr-4"><i class="fa fa-code-fork mr-2"></i>' + status.forks_count + '</span> \
                    </div> \
                </a> \
            </div>';
            });
            $('.repositories').html(statusHTML);
        }
        request.send();

Ответ "/users/:user/repo", но у меня есть весь код, который делает это в проекте с открытым исходным кодом, который вы можете использовать для установки веб-приложения на сервере.

Я поддержал проект GitHub под названием Git-Captain, который связывается с GitHub API, в котором перечислены все репозитории.

Это веб-приложение с открытым исходным кодом, созданное с использованием Node.js и использующее GitHub API для поиска, создания и удаления ветки в многочисленных репозиториях GitHub.

Это может быть настройка для организаций или одного пользователя.

У меня есть пошаговая инструкция по настройке в read-me.

Использование Javascript Fetch

      async function getUserRepos(username) {
   const repos = await fetch(`https://api.github.com/users/${username}/repos`);
   return repos;
}

getUserRepos("[USERNAME]")
      .then(repos => {
           console.log(repos);
 }); 

Пейджинговый Баш

Вставьте свой токен в файл с именемgithub_token_fileи дайте ему разрешения0400.

      GITHUB_TOKEN=$(cat github_token_file)
USER=myuser

page=1
while : ; do
    echo Page $page
    result=$(curl --header "authorization: Bearer $GITHUB_TOKEN" "https://api.github.com/user/repos?per_page=100&page=$page")
    echo $result | jq '.[].name' | sort
    wc=$(echo $result | wc -w)
    [[ $wc -lt "10" ]] && break || true
    page=$((page+1))
done

Обратите внимание, что с помощью/users/<username>/reposвы заходите только в публичные репозитории, в то время как/user/reposпоражает как общественное, так и частное лицо.

Чтобы получить URL-адрес 100 общедоступных репозиториев пользователя:

$.getJSON("https://api.github.com/users/suhailvs/repos?per_page=100", function(json) {
  var resp = '';
  $.each(json, function(index, value) {
    resp=resp+index + ' ' + value['html_url']+ ' -';
    console.log(resp);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Немного улучшенная версия ответа @joelazar в виде очищенного списка:

      gh repo list <owner> -L 400 |awk '{print $1}' |sed "s/<owner>\///"

Разумеется, заменить на имя владельца.

Это также может получить списки с> 100 репозиториями (в данном случае 400)

const request = require('request');
const config = require('config');

router.get('/github/:username', (req, res) => {
    try {
        const options = {

            uri: `https://api.github.com/users/${req.params.username}/repos?per_page=5
                 &sort=created:asc
                 &client_id=${config.get('githubClientId')}
                 &client_secret=${config.get('githubSecret')}`,

            method: 'GET',

            headers: { 'user-agent': 'node.js' }
        };
        request(options, (error, response, body) => {
            if (error) console.log(error);
            if (response.statusCode !== 200) {
                res.status(404).json({ msg: 'No Github profile found.' })
            }
            res.json(JSON.parse(body));
        })
    } catch (err) {
        console.log(err.message);
        res.status(500).send('Server Error!');
    }
});

Немного более запоминающиеся (упрощенные) версии этого ответа (проголосовали за), чтобы получить публичные репозитории (только):

      # quick way to get all (up to 100) public repos for user mirekphd
$ curl -s "https://api.github.com/users/mirekphd/repos?per_page=100" | grep full_name | sort

Текущий метод получения всех (до 100) частных репозиториев из Github API (см. документы этот ): и ответ

      # get all private repos from the Github API 
# after logging with Personal Access Token (assuming secure 2FA is used)
$ export GITHUB_USER=mirekphd && export GITHUB_TOKEN=$(cat <path_redacted>/personal-github-token) && curl -s --header "Authorization: Bearer $GITHUB_TOKEN" --request GET "https://api.github.com/search/repositories?q=user:$GITHUB_USER&per_page=100" | grep "full_name" | sort

И если вы хотите перечислить имена репо, отфильтрованные по определенной теме:

      gh search repos --owner=<org> --topic=payments --json name --jq ".[].name" --limit 200

Просто сделайте это в почтальоне. Таким образом, вы можете визуализировать его, запускать скрипты и т. д.

Проверьте это.

https://learning.postman.com/docs/sending-requests/visualizer/

Используя официальный инструмент командной строки GitHub :

      gh auth login

gh api graphql --paginate -f query='
query($endCursor: String) {
    viewer {
    repositories(first: 100, after: $endCursor) {
        nodes { nameWithOwner }
        pageInfo {
        hasNextPage
        endCursor
        }
    }
    }
}
' | jq ".[] | .viewer | .repositories | .nodes | .[] | .nameWithOwner"

Примечание : сюда будут включены все ваши общедоступные, частные и чужие репозитории, к которым вам предоставлен доступ.

Рекомендации:

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