我正在寻找备份所有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