136

I have a company GitHub account and I want to back up all of the repositories within, accounting for anything new that might get created for purposes of automation. I was hoping something like this:

git clone git@github.com:company/*.git 

or similar would work, but it doesn't seem to like the wildcard there.

Is there a way in Git to clone and then pull everything assuming one has the appropriate permissions?

4

38 回答 38

148

Windows和所有UNIX/LINUX系统上,使用Git Bash任何其他终端,替换YOURUSERNAME为您的用户名并使用:

CNTX={users|orgs}; NAME={username|orgname}; PAGE=1
curl "https://api.github.com/$CNTX/$NAME/repos?page=$PAGE&per_page=100" |
  grep -e 'git_url*' |
  cut -d \" -f 4 |
  xargs -L1 git clone
  • 设置CNTX=usersNAME=yourusername以下载所有存储库。
  • 设置CNTX=orgsNAME=yourorgname以下载您组织的所有存储库。

最大页面大小为 100,因此您必须使用正确的页码多次调用它才能获取所有存储库(设置PAGE为您要下载的所需页码)。

这是执行上述操作的 shell 脚本:https ://gist.github.com/erdincay/4f1d2e092c50e78ae1ffa39d13fa404e

于 2015-09-28T23:36:14.577 回答
64

我认为不可能那样做。最好的办法是使用 API 查找并循环浏览组织的存储库列表。

尝试这个:

  • 通过转到帐户设置 -> 应用程序来创建 API 令牌
  • 拨打电话:http://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}
  • 响应将是一个 JSON 对象数组。每个对象都将包含有关该组织下的一个存储库的信息。我认为在您的情况下,您将专门寻找该ssh_url物业。
  • 然后git clone每个ssh_urls。

这是一些额外的工作,但 GitHub 有必要进行适当的身份验证。

于 2013-10-24T21:40:51.367 回答
62

组织存储库

要从您的组织中克隆所有存储库,请尝试以下 shell 单行:

GHORG=company; curl "https://api.github.com/orgs/$GHORG/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone

用户存储库

使用 Git 存储库 URL 克隆所有内容:

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

使用克隆 URL 克隆所有内容:

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

这是可以添加到用户启动文件中的有用的 shell 函数(使用curl+ jq):

# Usage: gh-clone-user (user)
gh-clone-user() {
  curl -sL "https://api.github.com/users/$1/repos?per_page=1000" | jq -r '.[]|.clone_url' | xargs -L1 git clone
}

私有存储库

如果您需要克隆私有存储库,您可以在标题中添加授权令牌,例如:

-H 'Authorization: token <token>'

或在参数 ( ) 中传递它?access_token=TOKEN,例如:

curl -s "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN&per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone

笔记:

  • 要仅获取私有存储库,请添加type=private到您的查询字符串中。
  • 另一种方法是hub在配置您的 API 密钥后使用。

也可以看看:


提示: - 要提高速度,请通过为= 4 个进程)
指定-P参数来设置并行进程数。xargs-P4
- 如果您需要提高 GitHub 限制,请尝试通过指定您的 API 密钥进行身份验证。
- 添加--recursive递归到已注册的子模块,并更新其中的任何嵌套子模块。

于 2015-09-26T23:23:22.023 回答
26

使用 GitHub CLI 的简单脚本(无 API 密钥)

这是一个使用官方 GitHub CLI 工具的简单解决方案gh- 不需要 API 密钥,并且可以处理任意数量的私有存储库:

# 1. Login with gh for private repos, and follow prompts
gh auth login

# 2. Clone (or update) up to 1000 repos under `./myorgname` folder
#    [replace 'myorgname' with your org name and increase repo limit if needed]
gh repo list myorgname --limit 1000 | while read -r repo _; do
  gh repo clone "$repo" "$repo"
done

设置

获取GitHub CLI 工具

当 GitHub API 发生变化时,将长期支持 GitHub CLI 工具。

可选:更新现有结帐

要更新磁盘上已经存在的 repo 文件夹,以及添加新的 repos,您需要检查是否失败gh repo clone- 将该行替换为:

    gh repo clone "$repo" "$repo" -- -q 2>/dev/null || (
        cd "$repo"
        # Handle case where local checkout is on a non-main/master branch
        # - ignore all errors because some repos may have zero commits, 
        # so no main or master
        set +e
        git checkout -q main 2>/dev/null
        git checkout -q master 2>/dev/null
        git pull -q
        set -e
    )

背景

于 2021-08-13T10:48:15.250 回答
25

这个要点在命令行的一行中完成了任务:

curl -s https://api.github.com/orgs/[your_org]/repos?per_page=200 | ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

替换[your_org]为您组织的名称。per_page并在必要时设置您的。

更新:

正如 ATutorMe 提到的,根据 GitHub 文档,最大页面大小为 100 。

如果您有超过 100 个存储库,则必须page向您的 url 添加一个参数,并且您可以为每个页面运行该命令。

curl -s "https://api.github.com/orgs/[your_org]/repos?page=2&per_page=100" | ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

注意:默认per_page参数是30.

于 2015-01-06T18:18:08.393 回答
9

所以,我也会添加我的答案。:)(我发现这很简单)

获取列表(我使用过“magento”公司):

curl -si https://api.github.com/users/magento/repos | grep ssh_url | cut -d '"' -f4

clone_url改为使用ssh_urlHTTP 访问。

所以,让我们全部克隆它们!:)

curl -si https://api.github.com/users/magento/repos | \
    grep ssh_url | cut -d '"' -f4 | xargs -i git clone {}

如果您要获取私人回购 - 只需添加 GET 参数?access_token=YOURTOKEN

于 2016-11-03T23:36:46.633 回答
8

转到 Account Settings -> Application 并创建 API key
然后在下面的脚本中插入 API key、github 实例 url 和组织名称

#!/bin/bash

# Substitute variables here
ORG_NAME="<ORG NAME>"
ACCESS_TOKEN="<API KEY>"
GITHUB_INSTANCE="<GITHUB INSTANCE>

URL="https://${GITHUB_INSTANCE}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}"

curl ${URL} | ruby -rjson -e 'JSON.load(STDIN.read).each {|repo| %x[git clone #{repo["ssh_url"]} ]}'

将其保存在一个文件中,chmod u+x该文件,然后运行它。

感谢Arnaud的 ruby​​ 代码。

于 2014-06-26T17:37:25.873 回答
8

使用带有一些脚本的Github CLI来克隆命名空间下的所有(公共或私有)存储库

gh repo list OWNER --limit 1000 | awk '{print $1; }' | xargs -L1 gh repo clone

哪里OWNER可以是您的用户名或组织名称。

于 2021-11-04T13:13:49.517 回答
7

我发现@seancdavis 提供的要点中的一条评论非常有帮助,尤其是因为就像原始海报一样,我想同步所有存储库以便快速访问,但其中绝大多数是私有的。

curl -u [[USERNAME]] -s https://api.github.com/orgs/[[ORGANIZATION]]/repos?per_page=200 |
  ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

将 [[USERNAME]] 替换为您的 github 用户名,将 [[ORGANIZATION]] 替换为您的 Github 组织。输出(JSON 存储库元数据)将传递给一个简单的 ruby​​ 脚本:

# bring in the Ruby json library
require "json"

# read from STDIN, parse into ruby Hash and iterate over each repo
JSON.load(STDIN.read).each do |repo|
  # run a system command (re: "%x") of the style "git clone <ssh_url>"
  %x[git clone #{repo["ssh_url"]} ]
end
于 2015-02-26T22:50:57.243 回答
7

这是一个 Python 解决方案:

curl -s https://api.github.com/users/org_name/repos?per_page=200 | python -c $'import json, sys, os\nfor repo in json.load(sys.stdin): os.system("git clone " + repo["clone_url"])'

将 org_name 替换为您希望下载其存储库的组织或用户的名称。在 Windows 中,您可以在 Git Bash 中运行它。如果它找不到 python(不在您的 PATH 等中),我找到的最简单的解决方案是将 python 替换为实际 Python 可执行文件的路径,例如: /c/ProgramData/Anaconda3/python 用于 Anaconda 安装视窗 10。

于 2020-10-31T15:59:29.057 回答
7

这个 python one-liner 将满足您的需求。它:

  • 检查 github 是否有可用的存储库
  • 对于每个,进行系统调用git clone

    python -c "import json, urllib, os; [os.system('git clone ' + r['ssh_url']) for r in json.load(urllib.urlopen('https://api.github.com/orgs/<<ORG_NAME>>/repos?per_page=200'))]"
    
于 2015-08-11T09:10:49.523 回答
5

我用 Python3 和 Github APIv3 做了一个脚本

https://github.com/muhasturk/gitim

赶紧跑

./gitim
于 2015-10-04T11:19:32.033 回答
5
curl -s https://api.github.com/orgs/[GITHUBORG_NAME]/repos | grep clone_url | awk -F '":' '{ print $2 }' | sed 's/\"//g' | sed 's/,//' | while read line; do git clone "$line"; done
于 2018-04-23T11:07:47.763 回答
4

我尝试了上面的一些命令和工具,但认为它们太麻烦了,所以我编写了另一个命令行工具来执行此操作,名为github-dl.

使用它(假设你已经安装了 nodejs)

npx github-dl -d /tmp/test wires

这将使用您在 CLI 上提供的授权详细信息(用户/密码)获取所有 repo 的列表wires并将信息写入目录。test

详细地说,它

  1. 要求身份验证(支持 2FA)
  2. 通过 Github API 获取用户/组织的 repos 列表
  3. 是否为此进行分页,因此支持 100 多个 repo

它实际上并没有克隆存储库,而是编写一个.txt您可以传递进去的文件xargs来进行克隆,例如:

cd /tmp/test
cat wires-repo-urls.txt | xargs -n2 git clone

# or to pull
cat /tmp/test/wires-repo-urls.txt | xargs -n2 git pull

也许这对你有用;它只是几行 JS,所以应该很容易适应您的需求

于 2019-06-20T12:04:54.017 回答
3

简单的解决方案:

NUM_REPOS=1000
DW_FOLDER="Github_${NUM_REPOS}_repos"
mkdir ${DW_FOLDER}
cd ${DW_FOLDER}
for REPO in $(curl https://api.github.com/users/${GITHUB_USER}/repos?per_page=${NUM_REPOS} | awk '/ssh_url/{print $2}' | sed 's/^"//g' | sed 's/",$//g') ; do git clone ${REPO} ; done
于 2019-02-16T15:11:09.937 回答
3

克隆所有非分叉的公共和私人仓库:

首先创建一个用于身份验证的个人令牌,确保它具有所有repo权限

curl -u username:token https://api.github.com/user/repos\?page\=1\&per_page\=100 |
  jq -r 'map(select(.fork == false)) | .[] | .ssh_url' |
  xargs -L1 git clone

克隆你的要点:

curl https://api.github.com/users/{username}/gists\?page\=1\&per_page\=100 |
   jq -r ".[] | .git_pull_url +\" '\" + (.files|keys|join(\"__\") + \"'\")" |
   xargs -L1 git clone

jq命令很复杂,因为 gists 的 repo 名称是哈希,因此该命令将所有文件名连接为 repo 的名称


您可以使用任意过滤 JSONjq

安装:sudo apt-get install jq

在上面的示例中,我使用以下方法过滤掉了分叉curl ... | jq -r 'map(select(.fork == false))' ...-对于不克隆您发出随意拉取请求的存储库很有用

jq支持一些非常高级的功能。man jq是你的朋友


Github 的 API 网址

  • 您的存储库(需要身份验证): https://api.github.com/user/repos\?page\=1\&per_page\=100
  • 任何用户: https://api.github.com/users/{other_username}/repos\?page\=1\&per_page\=100
  • 组织: https://api.github.com/orgs/orgname/repos\?page\=1\&per_page\=100

用于存储库的 Github API 文档

于 2019-12-30T04:46:23.317 回答
2

所以,在实践中,如果你想从组织FOO中克隆所有匹配的 repos BAR,你可以使用下面的单行,这需要jq和常见的 cli 实用程序

curl 'https://api.github.com/orgs/FOO/repos?access_token=SECRET' |
  jq '.[] |
  .ssh_url' |
  awk '/BAR/ {print "git clone " $0 " & "}' |
  sh
于 2014-04-15T16:13:35.367 回答
2

另一个带有注释的 shell 脚本从用户那里克隆所有存储库(公共和私有):

#!/bin/bash

USERNAME=INSERT_USERNAME_HERE
PASSWORD=INSERT_PASSWORD_HERE

# Generate auth header
AUTH=$(echo -n $USERNAME:$PASSWORD | base64)

# Get repository URLs
curl -iH "Authorization: Basic "$AUTH https://api.github.com/user/repos | grep -w clone_url > repos.txt

# Clean URLs (remove " and ,) and print only the second column
cat repos.txt | tr -d \"\, | awk '{print $2}'  > repos_clean.txt

# Insert username:password after protocol:// to generate clone URLs
cat repos_clean.txt |  sed "s/:\/\/git/:\/\/$USERNAME\:$PASSWORD\@git/g" > repos_clone.txt

while read FILE; do
    git clone $FILE
done <repos_clone.txt

rm repos.txt & rm repos_clone.txt
于 2019-09-01T17:04:44.293 回答
2

在您的~/.bashrc file

我通过在我的~/.bashrc file

脚步

打开终端或 linux shell 并打开您的~/.bashrc file

sudo nano ~/.bashrc

添加此功能:

CloneAll() {
    # Make the url to the input github organization's repository page.
    ORG_URL="https://api.github.com/orgs/${1}/repos?per_page=200";

    # List of all repositories of that organization (seperated by newline-eol).
    ALL_REPOS=$(curl -s ${ORG_URL} | grep html_url | awk 'NR%2 == 0' \
                | cut -d ':' -f 2-3 | tr -d '",');

    # Clone all the repositories.
    for ORG_REPO in ${ALL_REPOS}; do
        git clone ${ORG_REPO}.git;
    done
}

保存并关闭你的 ~/.bashrc 文件,然后关闭终端——你需要这样做,否则新的函数不会初始化:

打开新终端并尝试一下:

CloneAll <your_github_org_name>

示例:如果您的个人 github 存储库 URL 称为https://github.com/awesome-async,则命令为

CloneAll awesome-async

重要的

per_page=200一个变量末尾的ORG_URL设置将被克隆的 repos 数量,因此要特别注意:

ORG_URL="https://api.github.com/orgs/${1}/repos?per_page=200";  <---- make sure this is what you want

希望这可以帮助!:)

于 2020-02-22T02:52:12.600 回答
2

还有一个非常有用的npm 模块可以做到这一点。它不仅可以克隆,还可以拉取(更新您已有的数据)。

您只需像这样创建配置:

[{
   "username": "BoyCook",
   "dir": "/Users/boycook/code/boycook",
   "protocol": "ssh"
}]

并做gitall clone例如。或者gitall pull

于 2015-11-06T14:27:07.560 回答
2

如果有人在寻找 Windows 解决方案,这里有一个 PowerShell 中的小功能来解决这个问题(如果不是我需要它在使用和不使用代理的情况下工作的事实,可能是 oneliner/alias)。

function Unj-GitCloneAllBy($User, $Proxy = $null) {
    (curl -Proxy $Proxy "https://api.github.com/users/$User/repos?page=1&per_page=100").Content 
      | ConvertFrom-Json 
      | %{ $_.clone_url } 
      # workaround git printing to stderr by @wekempf aka William Kempf
      # https://github.com/dahlbyk/posh-git/issues/109#issuecomment-21638678
      | %{ & git clone $_ 2>&1 } 
      | % { $_.ToString() }
}
于 2016-10-06T11:34:49.390 回答
1

要克隆您自己的所有私有和公共 repos,只需生成一个具有 repos 访问权限的新访问令牌并使用它:

(替换为您自己的访问令牌和用户名)

for line in $(curl https://api.github.com/user/repos?access_token=ACCESS_TOKEN_HERE  | grep -o "git@github.com:YOUR_USER_NAME/[^ ,\"]\+");do git clone $line;done

这将克隆当前文件夹中的所有存储库

这是一个小 bash 程序,您可以将其粘贴到终端并按 Enter

于 2020-07-25T19:16:18.650 回答
1

一个 Python3 解决方案,包括通过LinkHeader 进行详尽的分页。

先决条件:


import json
import requests
from requests.auth import HTTPBasicAuth
import links_from_header

respget = lambda url: requests.get(url, auth=HTTPBasicAuth('githubusername', 'githubtoken'))

myorgname = 'abc'
nexturl = f"https://api.github.com/orgs/{myorgname}/repos?per_page=100"

while nexturl:
    print(nexturl)
    resp = respget(nexturl)

    linkheads = resp.headers.get('Link', None)
    if linkheads:
        linkheads_parsed = links_from_header.extract(linkheads)
        nexturl = linkheads_parsed.get('next', None)
    else:
        nexturl = None

    respcon = json.loads(resp.content)
    with open('repolist', 'a') as fh:
        fh.writelines([f'{respconi["full_name"]}\n' for respconi in respcon])

然后,您可以使用xargsor并行和:cat repolist | parallel -I% hub clone %

于 2018-06-08T16:00:28.037 回答
1

尽管您可以在per_page. 如果您要克隆一个拥有 100 多个存储库的 Github 组织,则必须按照 API 响应中的分页链接。

我为此编写了一个CLI 工具

clone-github-org -o myorg

这会将组织中的所有存储库克隆myorg到当前工作目录。

于 2019-08-29T14:22:56.267 回答
1

您可以使用GitHub Archive 之类的工具,它允许您通过一个简单的工具克隆/拉取公共和私人个人存储库、组织存储库和要点。

至于自动化,您可以将 GitHub Archive 设置为每天运行一次或每周运行一次,它会跳过那些被克隆的文件,并引入自上次运行以来所有其他文件的新更改。

来源:https ://github.com/Justintime50/github-archive

于 2020-10-12T03:26:11.753 回答
1

对于您可以通过私有存储库访问的组织:

curl -u <YOUR_GITHUB_USERNAME> -s https://api.github.com/orgs/<ORG_NAME>/repos?per_page=200 | ruby -rubygems -e ’require “json”; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo[“html_url”]} ]}'

它使用html_url,所以你不需要access_token在提示时输入你的 github 密码。

于 2019-12-03T20:50:48.250 回答
1

这是一种获取所有用户要点的方法,该方法考虑了 github 的新 api 和分页规则......

用法:

python3 gist.py bgoonz

另外...每个克隆都将是它自己的存储库,这可能会在您的驱动器上占用大量内存...您可以使用以下方法递归删除 git 存储库:


find . \( -name ".git" -o -name ".gitignore" -o -name ".gitmodules" -o -name ".gitattributes" \) -exec rm -rf -- {} +

如果您想将它们全部克隆到您现有的存储库中...请确保在运行此命令时您不在存储库的最外层文件夹中,否则它将像删除一样不加选择地删除您的 .git 文件夹那些属于要点的。

语言:Python

#!/usr/bin/env python3

import os
import sys
import json
import hashlib
import requests

from subprocess import call
from concurrent.futures import ThreadPoolExecutor as PoolExecutor

def download_all_from_user(user: str):
    
    next_page = True
    page = 1
    
    while next_page:
        
        url = f"https://api.github.com/users/{user}/gists?page={page}"
        
        response = requests.get(url)

        if not len(response.json()):
            next_page = False
        else:
            page += 1

        download_all(response.json())

def download_all(gists: list):
    with PoolExecutor(max_workers=10) as executor:
        for _ in executor.map(download, gists):
            pass

def download(gist):
    
    target = gist["id"] + hashlib.md5(gist["updated_at"].encode('utf-8')).hexdigest()
    
    call(["git", "clone", gist["git_pull_url"], target])

    description_file = os.path.join(target, "description.txt")
    
    with open(description_file, "w") as f:
        f.write(f"{gist['description']}\n")

# Run

user = sys.argv[1]

download_all_from_user(user)
于 2021-06-23T23:55:18.590 回答
1

如果您在这样的列表中有存储库列表,那么这个 shell 脚本可以工作:

user="https://github.com/user/"

declare -a arr=("repo1", "repo2")

for i in "${arr[@]}"

do

   echo $user"$i"

   git clone $user"$i"

done 
于 2018-07-16T13:44:19.870 回答
1

我创建了一个示例批处理脚本。您可以从 github.com 下载所有私有/公共存储库。下载存储库后,它会自动转换为 zip 文件。

@echo off
setlocal EnableDelayedExpansion
SET "username=olyanren"
SET "password=G....."
set "mypath=%cd%\"
SET "url=https://%username%:%password%@github.com/%username%/"
FOR /F "tokens=* delims=" %%i in (files.txt) do (
SET repo=%%i
rmdir /s /q !repo!
git clone "!url!!repo!.git"
cd !repo!
echo !mypath!
git archive --format=zip -o "!mypath!!repo!.zip" HEAD
cd ..
)

注意:files.txt文件应仅包含存储库名称,例如:

repository1
repository2
于 2019-01-25T12:44:35.077 回答
1

我想建议另一种选择,它可能比这里发布的一些脚本更容易。mergestat是一个命令行工具,可用于从 GitHub 克隆所有组织存储库,如本页所述。

mergestat "SELECT clone('https://github.com/mergestat/'|| name) AS path FROM github_org_repos('mergestat')" -v --clone-dir my-dir

这不是该工具的主要目的,而是它所做的有用的副作用(它是一种使用 SQL 查询 git 存储库的方法)。完全公开,我是维护者/创建者,但想在这里分享,因为这是我们从用户那里得到的一个相当频繁的用例/问题,我希望mergestat可以提供一个简单的解决方案。

于 2022-01-22T23:32:15.237 回答
1

您可以通过使用获取存储库列表,curl然后使用 bash 循环遍历所述列表:

GIT_REPOS=`curl -s curl https://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN} | grep ssh_url | awk -F': ' '{print $2}' | sed -e 's/",//g' | sed -e 's/"//g'`
for REPO in $GIT_REPOS; do
  git clone $REPO
done
于 2016-09-20T14:30:26.693 回答
1

当我想快速克隆我所有的存储库时,我会:

for i in `echo https://github.com/user/{repox,repoy,repoz,repob}`; do git clone $i; done
于 2021-03-09T13:17:06.177 回答
1

您可以使用开源工具克隆一堆 github 存储库:https ://github.com/artiomn/git_cloner

例子:

git_cloner --type github --owner octocat --login user --password user https://my_bitbucket

使用来自api.github.com. 可以在 github 文档中查看代码示例: https ://developer.github.com/v3/

或者那里:

https://github.com/artiomn/git_cloner/blob/master/src/git_cloner/github.py

于 2017-08-20T11:49:42.880 回答
1
"""
Clone all public Github Repos

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

import urllib.request, base64
import json
import os


def get_urls(username):
    url = f"https://api.github.com/users/{username}/repos?per_page=200"
    request = urllib.request.Request(url)
    result = urllib.request.urlopen(request)
    return json.load(result)


if __name__ == "__main__":
    for r in get_urls("MartinThoma"):
        if not os.path.isdir(r["name"]):
            print(f"Clone {r['name']}...")
            os.system("git clone " + r["ssh_url"])
        else:
            print(f"SKIP {r['name']}...")
于 2020-05-15T10:45:14.107 回答
1

要仅克隆私有存储库,给定访问密钥,并安装 python 3 和请求模块:

ORG=company; ACCESS_KEY=0000000000000000000000000000000000000000; for i in $(python -c "import requests; print(' '.join([x['ssh_url'] for x in list(filter(lambda x: x['private'] ,requests.get('https://api.github.com/orgs/$ORG/repos?per_page=1000&access_token=$ACCESS_KEY').json()))]))"); do git clone $i; done;
于 2018-03-21T15:52:59.533 回答
0

5月19日更新

将此 bash 命令用于组织(包括私人仓库)

curl -u "{username}" "https://api.github.com/orgs/{org}/repos?page=1&per_page=100" | grep -o 'git@[^"]*' | xargs -L1 git clone
于 2019-05-04T09:03:34.247 回答
0

获取存储库名称列表的一种简单方法是在 Web 浏览器中浏览到列出该组织的存储库的页面并通过 JavaScript 提取它:

Array.from(document.querySelectorAll('[itemprop="name codeRepository"]')).map(function(item){ return item.text.replace(/\s/g,'') })

如果您愿意,可以轻松调整此代码以生成实际git clone命令。

这样做的好处是您无需担心 API 密钥或命令行提取。

一个可能的缺点是,如果 Github 更改其网站设计或代码,您可能需要更改此代码。

于 2021-11-19T19:52:25.323 回答
0

这是使用 PowerShell 的 Windows 版本

$name="facebook" #either username or org_name

$api_url="https://api.github.com/users/$($name)/repos?per_page=200"

$repos=Invoke-WebRequest -UseBasicParsing -Uri $api_url |ConvertFrom-Json

foreach ($repo in $repos)
{
  Write-Host  "Cloning via SSH URL  $($repo.ssh_url)"
  git clone $repo.ssh_url
}
于 2020-12-22T20:49:34.677 回答