126

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

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

4

20 回答 20

91

您可以为此使用github api。点击https://api.github.com/users/USERNAME/repos将列出用户USERNAME的公共存储库。

于 2012-01-03T14:21:25.793 回答
43

使用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。如果您不需要进行身份验证,则只需修改方法以删除添加授权标头。然后,您可以使用简单的 GET 请求获取任何公共 api url。

于 2012-01-03T14:25:14.653 回答
43

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

于 2015-10-15T22:56:35.583 回答
13

这是 repos API 的完整规范:

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

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=2&page=2

于 2020-03-12T15:57:24.457 回答
12

使用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
于 2021-02-22T14:49:29.910 回答
10

如果您安装了jq,您可以使用以下命令列出用户的所有公共存储库

curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'
于 2018-11-30T08:11:12.213 回答
8

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

于 2017-06-07T13:50:26.687 回答
6

NPM 模块存储库为某个用户或组获取所有公共存储库的 JSON。您可以直接从中运行它,npx因此您无需安装任何东西,只需选择一个组织或用户(此处为“W3C”):

$ npx repos W3C W3Crepos.json

这将创建一个名为 W3Crepos.json 的文件。Grep 足够好,例如获取 repos 列表:

$ grep full_name W3Crepos.json

优点:

  • 适用于 100 多个存储库(此问题的许多答案都没有)。
  • 打字不多。

缺点:

  • 需要npx(或者npm如果您想真正安装它)。
于 2019-06-22T10:06:41.727 回答
5

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

参考

于 2019-07-30T16:15:59.497 回答
5

如果寻找组织的回购 -

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
于 2020-03-22T22:31:51.397 回答
4

现在有一个使用很棒的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
        }
      }
    }
  }
}

于 2020-03-17T15:17:02.417 回答
2

HTML

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

JavaScript

// Github 仓库

如果你想限制存储库列表,你可以添加?per_page=3after 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();
于 2020-03-08T00:33:15.707 回答
2

分页 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)
})
于 2018-12-25T23:38:16.040 回答
1

使用 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”数组中。

于 2021-10-11T14:53:15.190 回答
1

答案是“/users/:user/repo”,但我在一个开源项目中拥有执行此操作的所有代码,您可以使用这些代码在服务器上建立一个 Web 应用程序。

我建立了一个名为Git-Captain的 GitHub 项目,它与列出所有 repos 的 GitHub API 进行通信。

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

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

我在自述文件中也有一步一步的设置方法。

于 2019-01-30T14:16:19.183 回答
1

要获取用户的 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>

于 2019-09-12T04:39:34.467 回答
1
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!');
    }
});
于 2019-11-26T12:24:27.167 回答
0

使用 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);
 }); 
于 2021-10-07T16:13:01.977 回答
0

@joelazar 的答案的略微改进版本,以作为清理列表:

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

当然,替换为所有者名称。

这也可以获得 >100 个 repos 的列表(在本例中为 400)

于 2021-10-17T06:57:08.730 回答
0

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

注意:这将包括与您共享的所有公共、私人和其他人的存储库。

参考:

于 2021-03-29T18:37:48.020 回答