GitHubで開発しているリポジトリは、誤操作や障害、将来的な移行に備えて別リポジトリへバックアップしておくと安心です。
この記事では、既存リポジトリ
phonenumbersplitter
を、バックアップ用リポジトリ
phonenumbersplitter-bk
へ丸ごとコピーする方法を紹介します。
この方法では、ソースコードだけでなく、コミット履歴・ブランチ・タグもそのままバックアップできます。
今回の例
バックアップ元
git@github.com:zhao-xinyou/phonenumbersplitter.git
バックアップ先
git@github.com:zhao-xinyou/phonenumbersplitter-bk.git
事前準備
まずGitHubでバックアップ用の空リポジトリを作成します。
今回の例では
phonenumbersplitter-bk
という名前で作成します。
ポイント
- READMEを追加しない
-
.gitignoreを追加しない - Licenseも追加しない
つまり、完全に空のリポジトリとして作成するのがおすすめです。
方法1:既存のローカルリポジトリからバックアップする
すでにローカルPCにリポジトリがある場合は、この方法が最も簡単です。
リポジトリへ移動します。
cd /path/to/phonenumbersplitter
現在のリモート設定を確認します。
git remote -v
バックアップ用リモートを追加します。
git remote add backup git@github.com:zhao-xinyou/phonenumbersplitter-bk.git
リポジトリ全体をバックアップします。
git push --mirror backup
これだけで、
- 全ブランチ
- 全タグ
- コミット履歴
- Git管理情報
がバックアップ先へコピーされます。
方法2:mirror cloneで完全バックアップする
ローカル環境を汚さずに、リポジトリ全体を丸ごとコピーしたい場合はこちらがおすすめです。
git clone --mirror git@github.com:zhao-xinyou/phonenumbersplitter.git
作成されたディレクトリへ移動します。
cd phonenumbersplitter.git
バックアップ先へコピーします。
git push --mirror git@github.com:zhao-xinyou/phonenumbersplitter-bk.git
こちらはGitリポジトリを完全に複製する方法です。
バックアップ後の確認
GitHubでバックアップ先リポジトリを開き、
- ファイル
- ブランチ
- タグ
などがコピーされていることを確認します。
https://github.com/zhao-xinyou/phonenumbersplitter-bk
コミット履歴(git log)は引き継がれる?
「リポジトリをコピーするとコミット履歴が消えてしまうのでは?」
と心配する方もいますが、その心配はありません。
git push --mirror
または
git clone --mirror
では、Gitの履歴もそのままコピーされます。
例えばバックアップ先で
git log --oneline
を実行すると、元リポジトリと同じ履歴が表示されます。
コピーされる内容は以下のとおりです。
- ソースコード
- コミット履歴(git log)
- ブランチ
- タグ
- コミット日時
- コミット作成者(Author)
- コミットメッセージ
- Git管理情報
つまり、Gitリポジトリそのものが丸ごとコピーされると考えて問題ありません。
GitHub固有の情報はコピーされない
一方で、コピーされるのはGitリポジトリだけです。
GitHubが管理している情報はコピーされません。
例えば以下は引き継がれません。
- Issues
- Pull Requests
- GitHub Actions の実行履歴
- Wiki
- Releases の説明・添付ファイル
- Secrets
- Branch Protection Rules
- リポジトリ設定
- Deploy Keys
- Webhooks
- GitHub Apps
- Stars
- Watchers
- Fork数
つまり、
GitHubの管理機能は新しいリポジトリで再設定する必要があります。
backupリモートを削除する
一時的に追加した
backup
リモートは不要になったら削除できます。
git remote remove backup
確認します。
git remote -v
以下のように
origin
だけが表示されれば完了です。
注意点
git push --mirror は非常に便利ですが、注意点があります。
このコマンドは
バックアップ先リポジトリを元リポジトリと完全に同じ状態へ同期します。
そのため、
- バックアップ先に独自コミットがある
- バックアップ先で作業している
場合は、その履歴が上書きされる可能性があります。
そのため、
バックアップ専用の空リポジトリ
に対して実行することをおすすめします。
また、GitHubの
- Issues
- Pull Requests
- Wiki
- Actions
- Repository Settings
などはGitとは別管理であるため、git push --mirrorだけでは移行されません。
まとめ
GitHubリポジトリをバックアップする場合は、
git push --mirror
を利用するのが最も簡単で確実です。
今回の例では、
phonenumbersplitter
↓
phonenumbersplitter-bk
へバックアップすることで、
- ソースコード
- コミット履歴
- ブランチ
- タグ
- Git管理情報
をそのままコピーできます。
一方で、
- Issues
- Pull Requests
- GitHub Actions
- Repository Settings
- Secrets
などのGitHub固有の管理情報はコピーされません。
そのため、「Gitリポジトリのバックアップ」と「GitHubの運用設定のバックアップ」は別物であることを理解しておくと安心です。
この方法を活用すれば、万が一のトラブル時にも迅速にリポジトリを復元でき、安心して開発を続けられます。