备份/镜像 Github 仓库

6
我想定期备份我的Github仓库。有没有一种快速的方法可以在不知道整个列表的情况下获取所有仓库?
沃尔特
3个回答

3

既然被接受的答案中使用的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

一个完整的备份脚本(假设你有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']])

2
我打算在 https://gist.github.com/4319265 上维护这个脚本的工作版本。 - Marius Gedminas

2

您可以通过GitHub的API获取整个列表:

curl http://github.com/api/v2/yaml/repos/show/walterjwhite

例如,这个简单的DOS/Unix shell一行命令:
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):


嗯,好的,我需要做的是创建一个列表,遍历它,然后下载存储库。那是另一个脚本。 - Walter White

2

我等待已久的答案。

我决定尝试一下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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接