如何使用GitHub API复制存储库?

时间:2014-10-20 11:58:51

标签: github github-api

我正在考虑使用GitHub API创建新存储库的最佳方法,该存储库是GitHub上另一个存储库的精确副本。下载和上传每个文件似乎效率低下。

3 个答案:

答案 0 :(得分:1)

您可以create a fork原始回购:这会直接在您帐户的GitHub上创建新的回购。

POST /repos/:owner/:repo/forks

假设原始回购品尚未在您的帐户中声明。

答案 1 :(得分:1)

使用Ruby和Octokit library你可以试着像这样:

# Set Up

class GithubCopy

  def self.copy_repo(args)
    from = args.fetch(:from)
    to   = args.fetch(:to)

    client = Octokit::Client.new(:access_token => 'your access token')

    base_items = client.contents from
    self.copy_items(base_items, from, to, client)
  end

  private

  def self.copy_items(base_items, from, to, client)
    base_items.each do |item|
      content = client.content from, :path => item.path
      if content.is_a?(Array)
        self.copy_items(content, from, to, client)
      else
        client.create_contents to, content.path, "Creating #{content.name}", Base64.decode64(content.content)
      end
    end
  end

end

# Usage
GithubCopy.copy_repo(from: 'repo1', to: 'repo2')

这假设 repo1 repo2 都存在且您的访问令牌对两个repos都具有适当的权限。如果您需要创建一个repo,请首先使用:

client = Octokit::Client.new(:access_token => settings.github_access_token)
client.create_repository 'some-repo', {organization: 'some-org'}

如果两个回购都属于同一个帐户,则他们将需要单独的名称,如@tmarwen所述。一个缺点是这种方法可能需要一些时间,具体取决于原始的回购规模。

答案 2 :(得分:0)

Github上不允许重复,无论您是使用Github接口创建新的repo还是使用Github RESTful API。

在用户帐户或组织帐户下允许使用一个唯一名称的一个存储库。