有没有一种简单的方法可以从GitHub克隆所有Starred转发



我正在寻找备份所有Starred存储库的简单方法。

这样就可以了。注意,您需要jq

curl https://api.github.com/users/<user>/starred |
  jq -r '.[].html_url' |
  xargs -l git clone

如果你不想使用jq,你可以用这个丑陋的awk线代替

awk '/^ {4}"html_url"/&&$0=$4' FS='"' |

是的,这里有一个简单的单行(将foo更改为您的用户名):

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

xargs添加-P参数,以通过设置并行进程的数量(例如-P4=4个进程)来提高速度

要提高GitHub的限制,您可以通过指定API密钥进行身份验证

如果您对ruby没有任何问题,并且可以安装一些gem,那么您可以尝试一下。

gem install octokit git parallel

这样就可以了。

ruby -e "require 'octokit'; require 'git'; require 'parallel'; Parallel.each(Octokit.starred('__username__'), :in_processes=>4){|s| Git.clone(s[:html_url], s[:name])}"

可读性:

require 'octokit'
require 'git'
require 'parallel'
Parallel.each(Octokit.starred('__username__'), :in_processes=>4){|s| Git.clone(s[:html_url], s[:name])}

不过,这似乎有些过头了。

您也可以按照建议获取列表,并为您真正感兴趣的备份项目创建一个新的Repo。此方法将帮助您轻松更新备份。

创建一个新的存储库,包括子模块和克隆/拉取所有子模块。你应该看到这样的东西。

git clone https://github.com/<user>/<repo>
cd <repo>
git submodule add https://github.com/<someone>/<repo1>
git submodule add https://github.com/<someother>/<repo2>
git submodule update --init --recursive
git commit -m "submodules added"
git push

然后进行

git clone --recurse-submodules https://github.com/<user>/<repo>
# OR
git pull --recurse-submodules

最新更新