0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubリポジトリをバックアップする方法|別リポジトリへ丸ごとコピーする手順

0
Posted at

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の運用設定のバックアップ」は別物であることを理解しておくと安心です。

この方法を活用すれば、万が一のトラブル時にも迅速にリポジトリを復元でき、安心して開発を続けられます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?