Git:リポジトリのバックアップ

 ここまでブランチの削除などを行い、リポジトリを整理したうえで、重要な作業内容を紛失しないためのバックアップ手順を説明します。各コマンドには詳しい解説を加えています。


なぜリポジトリのバックアップが必要なのか

 これまでGitを用いてプロジェクトを管理し、コミットやブランチ操作を行ってきました。しかし、作業内容や履歴が保存されているリポジトリがディスク故障や操作ミスで失われれば、これまで積み上げた変更履歴がすべて消えてしまいます。こうしたリスクに備えるため、リポジトリのバックアップを作成することはとても重要です。

 Gitは、複数のリポジトリ間で履歴を共有する機能があり、これを活用してバックアップ用リポジトリを作成し、そこへ定期的に履歴を送ることで、何かあっても復元が可能になります。

ブランチの削除(おさらい)

 バックアップ前に、不要なブランチが残っていれば削除しておきましょう。すでにfeature-nameブランチを削除していない場合は、以下のコマンドは不要です。

ブランチを削除する

【書式】
git branch -d <ブランチ名>

user01@ubuntu:~/git/logview$ git branch -d function-name
Deleted branch function-name (was 9d389a1).

-dオプションは、既にマージ済みの安全なブランチのみ削除を許可します。
これでリポジトリが整理できました。

バックアップ用リポジトリの作成

 Gitでは、作業用ファイル(ワークツリー)のない“純粋な”リポジトリ(ベアリポジトリ)を作成できます。これをバックアップ用として利用します。

バックアップ用リポジトリを作成する

【書式】
git --bare init

user01@ubuntu:~$ mkdir -p /home/user01/share/logview.git
user01@ubuntu:~$ cd /home/user01/share/logview.git
user01@ubuntu:~/share/logview.git$ git --bare init
Initialized empty Git repository in /home/user01/share/logview.git/

--bareオプション付きのgit initは、ベアリポジトリを作成します。
慣習として、ベアリポジトリは.gitで終わる名前にします。

履歴をバックアップ用リポジトリへ送る

 元のリポジトリ(ワークツリー付き)から、バックアップ用リポジトリに変更履歴を送ります。これにはgit pushコマンドを使用します。

git pushコマンド

【書式】変更の履歴を送る
git push <送信先リポジトリ> <送信元ブランチ>:<送信先ブランチ>

  • <送信先リポジトリ>:バックアップ先リポジトリのパス
  • <送信元ブランチ>:バックアップしたいローカルブランチ
  • <送信先ブランチ>:バックアップ先でのブランチ名(通常は同じ名前)
user01@ubuntu:~/git/logview$ git push /home/user01/share/logview.git master:master

 これでmasterブランチの内容がバックアップ用リポジトリへ送られます。もし元のリポジトリが壊れても、このバックアップから復元可能になります。

バックアップからの復元(複製)

 もし元のリポジトリが消失してしまっても、git cloneコマンドを使えばバックアップ用リポジトリから履歴を複製し、再度作業環境を構築できます。

git cloneコマンド

【書式】
git clone <複製元リポジトリ>

user01@ubuntu:~/git/logview$ mkdir -p /home/user01/work
user01@ubuntu:~/git/logview$ cd /home/user01/work
user01@ubuntu:~/work$ git clone /home/user01/share/logview.git
Cloning into 'logview'...
done.

複製先のlogviewディレクトリには、元の履歴がすべて含まれています。

git pushコマンドを短縮する

毎回長いパスやmaster:masterと入力するのは面倒です。
以下の方法で、より簡便に指定できます。

ブランチ名省略

送信元・送信先ブランチが同じ場合、master:mastermasterと省略可能。

user01@ubuntu:~/git/logview$ git push /home/user01/share/logview.git master
Everything up-to-date

リモート名(別名)の設定

git remote addコマンドで、バックアップ先のリポジトリパスにエイリアスを付けられます。

【書式】
git remote add <別名> <リポジトリパス>

user01@ubuntu:~/git/logview$ git remote add origin /home/user01/share/logview.git

originという名前は慣習的に用いられます。
git remote -vで確認可能。

user01@ubuntu:~/git/logview$ git remote -v
origin	/home/user01/share/logview.git (fetch)
origin	/home/user01/share/logview.git (push)

こうすると、次回からは以下のように簡略化できます。

user01@ubuntu:~/git/logview$ git push origin master
Everything up-to-date

 さらに省略可能ですが、挙動はやや複雑なため、基本的にはoriginmasterは明示した方が分かりやすいでしょう。


まとめ

  1. 不要なブランチは削除してリポジトリを整理
  2. バックアップ用リポジトリ(ベアリポジトリ)を作成
  3. git pushで元のリポジトリからバックアップ用リポジトリへ履歴を送る
  4. git cloneでバックアップ用リポジトリから復元可能
  5. git remote addで別名を割り当て、git push操作を簡略化

 これらの手順を踏むことで、万が一のトラブルにも備えられ、常に安全な状態で開発を進めることができます。定期的なバックアップと、必要に応じた復元手順の理解は、健全なソフトウェア開発環境を維持するうえで欠かせません。