备份/镜像Github存储库

时间:2010-08-27 02:57:47

标签: backup github

我想定期创建我的github存储库的备份。是否有一种快速的方法可以在不知道整个列表是什么的情况下拉出所有这些?

沃尔特

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分: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]}"
}

沃尔特

答案 2 :(得分:2)

现在,已接受答案中使用的v2 API不再有效,现在是时候进行使用Github API v3的更新了。

您可以使用

获取JSON格式的list of repositories
curl -i https://api.github.com/users/username/repos

注意分页!默认情况下,结果为paginated to 30 items。如果您有更多的存储库而不是单个页面,您将获得一个Link HTTP响应标头,其中包含指向其他页面的链接(rel = next / last / first / prev)。您还可以要求更大的页面尺寸(最多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']])

答案 3 :(得分:2)

GitHub Marketplace 上提供了一些第三方应用程序:

请参阅 Backup utility category 了解更多详情,或直接 search 了解市场上的一些选项。