我想定期备份我的Github仓库。有没有一种快速的方法可以在不知道整个列表的情况下获取所有仓库?
沃尔特
沃尔特
既然被接受的答案中使用的v2 API不再可用,现在是更新为使用Github API v3的时候了。
您可以通过以下方式以JSON格式获取存储库列表
curl -i https://api.github.com/users/username/repos
注意分页!默认情况下,结果分页为30个项目。如果您的存储库超过单个页面的容量,您将收到一个带有链接到其他页面的rel=next/last/first/prev的 HTTP响应头。您还可以请求更大的页面大小(最多100个):
curl -i https://api.github.com/users/username/repos?per_page=100
#!/usr/bin/python
import os
import json
import urllib
import subprocess
username = 'username' # specify your github username
os.chdir(os.expanduser('~/github')) # location for your backups, must exist
url = 'https://api.github.com/users/%s/repos?per_page=100' % username
for repo in json.load(urllib.urlopen(url)):
print "+", repo['full_name']
if os.path.exists(repo['name']):
subprocess.call(['git', 'pull'], cwd=repo['name'])
else:
subprocess.call(['git', 'clone', repo['git_url']])
您可以通过GitHub的API获取整个列表:
curl http://github.com/api/v2/yaml/repos/show/walterjwhite
ruby -ryaml -ropen-uri -e "puts YAML.load(open('http://github.com/api/v2/yaml/repos/show/walterjwhite'))['repositories'].map {|r| %Q[* **#{r[:name]}** (#{r[:description]}) is at <#{r[:url]}/>] }"
打印(假设您已安装了Ruby):
我等待已久的答案。
我决定尝试一下Ruby,感觉还可以。我喜欢它的紧凑性,但外观不太美观 :(。
以下是可行的:
#!/usr/bin/env ruby
require "yaml"
require "open-uri"
time = Time.new
backupDirectory = "/storage/backups/github.com/#{time.year}.#{time.month}.#{time.day}"
username = "walterjwhite"
#repositories =
# .map{|r| %Q[#{r[:name]}] }
#FileUtils.mkdir_p #{backupDirectory}
YAML.load(open("http://github.com/api/v2/yaml/repos/show/#{username}"))['repositories'].map{|repository|
puts "found repository: #{repository[:name]} ... downloading ..."
#exec
system "git clone git@github.com:#{username}/#{repository[:name]}.git #{backupDirectory}/#{repository[:name]}"
}
Walter