如何检索一个人的所有 GitHub 存储库的列表?

我们需要在 GitHub 帐户上显示个人仓库中的所有项目。

如何使用某个特定用户的 git 用户名显示他的所有 git 存储库的名称?

171802 次浏览

您可以为此使用 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,如上例所示。如果不需要身份验证,那么只需修改该方法以删除添加 Authorization 头的操作。然后,您可以使用一个简单的 GET 请求获取任何公共 api URL。

尝试使用以下 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

如果用户是组织,则使用 /orgs/:username/repos来返回所有存储库。

要克隆它们,请参见: 如何从 GitHub 一次性克隆所有回购协议?

参见: 如何使用命令行从私有回购下载 GitHub 发布

您可能需要一个 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>

如果安装了 JQ,可以使用以下命令列出用户的所有公开回购

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

呼叫 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)
})

答案是“/users/: user/repo”,但是在一个开源项目中,我有完成这项工作的所有代码,您可以使用这些代码在服务器上支持 Web 应用程序。

我放弃了一个名为 饭桶,队长的 GitHub 项目,该项目与列出所有回购协议的 GitHub API 进行通信。

它是一个开源 web 应用程序,使用 Node.js 构建,利用 GitHub API 查找、创建和删除遍布 GitHub 存储库的分支。

它可以为组织或单个用户设置。

我有一个一步一步如何设置它以及在阅读我。

NPM 模块 回购协议为某些用户或组获取所有公开回购的 JSON。您可以直接从 npx运行它,所以您不需要安装任何东西,只需选择一个组织或用户(“ W3C”在这里) :

$ npx repos W3C W3Crepos.json

这将创建一个名为 W3Crepos.json 的文件:

$ grep full_name W3Crepos.json

优点:

  • 工程超过100回购(许多回答这个问题不)。
  • 没什么可打的。

缺点:

  • 需要 npx(或者 npm,如果你想真正安装它)。

使用 Python 检索 GitHub 用户的所有公共存储库列表:

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")

参考文献

要获取用户的100个公共存储库的 URL:

$.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>

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!');
}
});

超文本标示语言

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

JavaScript

//Github 回购协议

如果希望限制存储库列表,只需在 username/repos之后添加 ?per_page=3

username/repos?per_page=3

你可以把任何人的用户名放在 Github 上,而不是/username/。

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();

下面是回购协议 API 的完整规范:

Https://developer.github.com/v3/repos/#list-repositories-for-a-user

GET /users/:username/repos

查询字符串参数:

前5个在上面的 API 链接中有记录。pageper_page的参数在其他地方有记录,在完整的描述中非常有用。

  • type(字符串) : 可以是 allownermember之一。默认值: owner
  • sort(字符串) : 可以是 createdupdatedpushedfull_name之一。默认值: full_name
  • direction(字符串) : 可以是 ascdesc之一。默认值: 使用 full_name时为 asc,否则为 desc
  • page(整数) : 当前页
  • per_page(整数) : 每页的记录数

由于这是一个 HTTPGET API,除了 cURL 之外,您还可以在浏览器中简单地尝试一下。例如:

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

现在有一个选项可以使用令人敬畏的 GraphQL API 资源管理器

我想要一个所有我的组织的积极回购与他们各自的语言列表。这个查询正是这样做的:

{
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
}
}
}
}
}


如果寻找一个组织的回购协议-

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

使用 gh命令

你可以使用 Github Cli:

$ gh api users/:owner/repos

或者

gh api orgs/:orgname/repos

对于所有的回购协议,你将需要 --paginate,你可以将其与 --jq相结合,以显示每个回购协议只有 name:

gh api orgs/:orgname/repos --paginate  --jq '.[].name' | sort

使用 官方 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"

注意 : 这将包括所有与您共享的公开、私人和其他人的回购协议。

参考文献:

使用 Javascript 获取

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


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

使用 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”数组中存储所有存储库。

稍微改进一下@joelazar 的回答:

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

当然是用所有者的名字替换。

这也可以得到大于100个回购协议的清单(在这种情况下,是400个)

如果您想列出按特定主题过滤的回购名称:

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

一个更加难忘(简化)的 这个答案(否决)获得 公众人士回购(只) :

# 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

从 Github API 获得 所有(最多100个) 二等兵回购协议的 目前方法(参见 医生这个答案) :

# 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

在邮递员那里就行了。 这样你就可以将它可视化,运行脚本等等。

看看这个。

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

enter image description here

enter image description here