# プログラムによってリポジトリをインポートする

GitHubにリポジトリをプログラムでインポートできます。

## リポジトリのプログラムによるインポートについて

次のガイドでは、Git リポジトリの "ソースと履歴" の移行を GitHubにプログラムで実行する方法について説明します。 リポジトリの格納場所に応じて、さまざまなオプションを使用できます。

"ソースと履歴"、その他の種類の移行の詳細については、「[GitHub への移行の計画](/ja/migrations/overview/planning-your-migration-to-github)」を参照してください。

「ソース リポジトリ」という用語はインポートするリポジトリを指し、「インポートされたリポジトリ」は作成する新しいリポジトリを指します。

## フォークの使用

ソース リポジトリが GitHubされている場合は、リポジトリをインポートする代わりにフォークを使用できる場合があります。 フォークを使うと、オリジナルのリポジトリ ("上流の" リポジトリとも呼ばれます) に影響を与えることなくプロジェクトを変更できます。

リポジトリをフォークすると、次のことができます。

* フォークを最新の状態に保つためにアップストリーム リポジトリから更新を取得する方法
* フォークから pull request を作成して元のプロジェクトにコントリビュートして戻す 詳しくは、「[フォーク](/ja/pull-requests/reference/forks)」をご覧ください。

REST API を使用して、リポジトリをプログラムでフォークできます。 詳しくは、「[フォーク用の REST API エンドポイント](/ja/rest/repos/forks)」をご覧ください。

ユース ケースが次のいずれかの条件を満たしている場合、リポジトリを直接インポートする代わりにフォークを使用することはできません。

* インポートされたリポジトリを、ソース リポジトリと同じユーザーまたは組織が所有する必要があります。
* 1 人のユーザーまたは組織が同じソース リポジトリを複数回インポートできるようにする必要があります。

## リポジトリテンプレートの使用

ソース リポジトリが GitHubされている場合は、リポジトリ テンプレートを使用できる場合があります。
既存のリポジトリからテンプレートを作成できます。 テンプレート リポジトリにアクセスできるユーザーは、同じディレクトリ構造、ブランチ、ファイルを持つテンプレートに基づいて新しいリポジトリを作成できます。 詳細については、 [AUTOTITLE を](/ja/repositories/creating-and-managing-repositories/creating-a-template-repository)参照してください。

リポジトリ テンプレートを使用するには、テンプレートである既存のリポジトリへの読み取りアクセス権を持っているか、テンプレートを作成するためのアクセス権が必要です。

REST API を使用して、リポジトリ テンプレートからリポジトリをプログラムで作成できます。 詳しくは、「[リポジトリの REST API エンドポイント](/ja/rest/repos/repos)」をご覧ください。

## GitHub Enterprise Importer の使用

ソース リポジトリが GitHub、GitHub Enterprise Server、Azure DevOps Services、Bitbucket Server、または Bitbucket データ センターでホストされている場合は、GitHub Enterprise Importerを使用してリポジトリをインポートできます。 詳しくは、「[GitHub Enterprise Importer について](/ja/migrations/using-github-enterprise-importer/understanding-github-enterprise-importer/about-github-enterprise-importer)」をご覧ください。

ソースとバージョン管理の履歴に加えて、 GitHub Enterprise Importer は問題、プル要求、設定などを移行します。

GitHub Enterprise Importerを使用するには、ソース リポジトリへの管理者アクセス権が必要です。

GraphQL API を使用して、 GitHub Enterprise Importer を使用してリポジトリをプログラムでインポートできます。

## Git CLI の使用

ソース リポジトリが Git リポジトリの場合は、コードから Git CLI をプログラムで呼び出すことができます。
GitHubの REST API を使用してリポジトリをプログラムで作成し、`git clone`や`git push`などのコマンドを使用してリポジトリをGitHubにインポートできます。

Git CLI の呼び出し方法は、コードの言語によって異なります。 たとえば、Node.js では `child_process` モジュールを使用でき、Ruby では `open3` モジュールを 使用できます。 詳細については、Node.js ドキュメントの[子プロセス](https://nodejs.org/api/child_process.html)、またはGitHubの [ruby/open3 リポジトリ](https://github.com/ruby/open3)を参照してください。

Git CLI を使用するには、アプリケーションをホストするシステムに Git をインストールするためのアクセス権が必要です。 詳細については、Git のドキュメントの「[使用開始 - Git のインストール](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)」に関するページを参照してください。

## GitHub CLI の使用

ソース リポジトリが Git リポジトリの場合は、コードからプログラムで GitHub CLI を呼び出すことができます。 リポジトリの作成に `gh repo create` を使用できます。 詳しくは、「[GitHub CLI について](/ja/github-cli/github-cli/about-github-cli)」をご覧ください。

## 参考資料

* [リポジトリの REST API エンドポイント](/ja/rest/repos/repos)