Как вывести список частных репозиториев организации через GitHub API?
Я пытаюсь получить список всех репозиториев организации, включая частные. (Или, если быть более точным, все частные репозитории, к которым у определенного пользователя есть доступ.)
Запрос информации для организации (https://api.github.com/orgs/acme?access_token=[...]
) показывает, что действительно существует множество частных репозиториев:
...
"public_repos": 5,
"total_private_repos": 68,
"owned_private_repos": 68,
...
(Используемый мной токен был ранее сгенерирован с использованием API для имени пользователя / пароля.)
Но все, что я пытаюсь перечислить репо...
https://api.github.com/orgs/acme/repos&access_token=[...]
... GitHub API просто возвращает 5 общедоступных репозиториев. ( Документация говорит type=all
по умолчанию. Также попытался добавить параметр type=private
; нет разницы.)
Есть идеи, что я делаю не так?
Пользователь, для которого фактически был сгенерирован токен доступа, имеет доступ Push & Pull только к некоторым частным репозиториям организации, но ни один из них не появляется в списке, который я получаю (только 5 общедоступных репозиториев).
9 ответов
Все, что вы делаете, в порядке. Однако при создании токенов OAuth для аутентификации убедитесь, что вы определяете правильные области. Каждая область определяет определенный набор разрешенных действий (информацию, которую вы можете читать / записывать), поэтому вы должны проверить, что вы создаете токен с помощью repo
объем.
Ваш URL нужен? не & &. Должно быть так:
https://api.github.com/orgs/acme/repos?access_token=your_access_token
Следует также отметить, что если вы обращаетесь к частным репозиториям из Организации, владельцы приложения OAuth должны авторизоваться в зависимости от настроек.
https://help.github.com/articles/authorizing-oauth-apps/
Для организаций с ограничениями доступа к приложению OAuth вы можете попросить администраторов организации одобрить приложение для использования в этой организации. Если организация не одобрит приложение, приложение сможет получить доступ только к общедоступным ресурсам организации. Если вы являетесь администратором организации, вы можете одобрить заявку самостоятельно.
Для организаций без ограничений доступа к приложению OAuth приложение автоматически авторизуется для доступа к ресурсам этой организации. По этой причине вам следует внимательно следить за тем, какие приложения OAuth вы одобряете для доступа к ресурсам вашей личной учетной записи, а также к ресурсам организации.
username = "Your_org"
token = "your_TOKEN"
request = requests.get('https://api.github.com/orgs/'+username+'/repos?per_page=1000', auth=(username, token))
Недавно у меня были те же симптомы, но причина была другой. Я зарегистрировал приложение GitHub, а не приложение OAuth, не осознавая разницы. Чтобы приложение GitHub отображало частные репозитории организации, приложение должно быть установлено для этой организации, а также должно быть авторизовано пользователем. В противном случае вы просто получите список общедоступных репозиториев.
Вы можете использовать команду gh https://cli.github.com/
gh repo list <org name> -L <total number of repos> --json sshUrl -q .[].sshUrl
Чтобы увидеть список полей json, запустите
gh repo list --json help
. Если вы хотите видеть только общедоступные или частные репозитории, вы можете использовать эти флаги.
FLAGS
--archived Show only archived repositories
--no-archived Omit archived repositories
--private Show only private repositories
--public Show only public repositories
# Get Github Repo Names
"""
>>>> pip install PyGithub
>>>> Reference Link: https://pypi.org/project/PyGithub/
>>>> Getting the access token.
Go to github <settings>.
Go to <Developer Settings>.
Go to <Personal access tokens>.
Click on <Generate new token> button.
Add a note.
Check all the setting in that page.
Click on <Generate token> button.
Copy the access token and paste in below code.
>>>>
>>>>
>>>>
>>>>
"""
from github import Github
access_token = ''
g = Github(access_token)
repo_list = [i for i in g.get_user().get_repos()]
for i in repo_list:
repo_name = str(i).replace('Repository(full_name="', '')
repo_name = str(repo_name).replace('")', '')
print('https://www.github.com/' + repo_name)
Ответ 2022 года:
## List all repos ( private, internal, public )
curl "https://api.github.com/orgs/foobar-org/repos" \
-u 'username:<personal access token>'
Ссылка на GitHub API здесь .
Ответ 2023 года с использованием последней версии GitHub CLI
gh
2.28.0:
gh repo list --json visibility,name --jq 'group_by(.visibility) | .[] | "\(.[0].visibility | ascii_upcase):", (.[] | .name), ""'
PR 7337 добавляетvisibility
Поле JSON.
В несколько строк для удобства чтения:
gh repo list --json visibility,name \
--jq 'group_by(.visibility) | .[] | "\(.[0].visibility | ascii_upcase):", (.[] | .name), ""'
The jq
фильтр включает в себя:
-
group_by(.visibility)
: группирует репозитории по свойству видимости (включая общедоступные, частные и внутренние). -
.[]
: перебирает каждую группу. -
"\(.[0].visibility | ascii_upcase):"
: выводит значение видимости в верхнем регистре, за которым следует двоеточие. -
(.[] | .name)
: выводит имя каждого репозитория в группе. -
""
: выводит пустую строку после каждой группы.
Эта команда выведет результат в виде обычного текстового списка с пустой строкой между каждой группой, например:
PUBLIC:
repo1
repo2
PRIVATE:
repo3
repo4
INTERNAL:
repo5