トリコロールな猫

猫とつくばと茨城をこよなく愛するnekotricolorのブログです

ベアリポジトリとノンベアリポジトリ:理論編〜GitでWordpressのテーマを管理

[2016/12/19追記]「「MBAでスクリプトを書き、リモートサーバ上で実行する」をGitで実現する - Qiita」を公開しました。ここと同じ仕組みでWordpressでなくRubyスクリプトを管理する方法です。

早く公開したかったのに思いのほかハマってちょー頑張った@nekotricolorです。

バージョン管理システムとは何か〜GitとSubversionの違い」からの「VirtualBox上にインストールしたUbuntuにSSHで接続する」の続きです。 この記事には理屈しか書いていませんので、実際の設定は「ベアリポジトリとノンベアリポジトリ:実践編〜GitでWordpressのテーマを管理」を参照ください。

お題:「Gitを使って、本番環境のWordpressのテーマを、複数のPC上にあるローカルのテスト環境で確認してから更新できるようにする」

ノンベア(non-bare)リポジトリとベア(bare)リポジトリ

違いがよくわからなかったこの2つですが、理解してみれば単純で、

  • ノンベアリポジトリはワーキングディレクトリを持つ
  • ベアリポジトリはワーキングディレクトリを持たない。更新情報だけを持っている

ワーキングディレクトリとは、ファイルそのものがあるディレクトリのこと。 つまりリポジトリが作業用(non-bare)と更新管理用(bare)に分かれてるわけですね。

次に、リモートサーバ上のファイルのバージョン管理について考えてみます。

(非推奨)ノンベアリポジトリのみで管理

作業用のPCが1つなら、単にローカルとリモートにノンベアリポジトリを作ってプッシュ/プルすればいいわけです。

図にするとこんな感じ。

Manage Your Git With Only Non-bare Repogitry

ただこれ、実際やろうとすると「ノンベアリポジトリに直でプッシュしてんじゃねーよ」と怒られます。Gitにはファイルロック機能がないそうなので、複数人で実ファイルのあるノンベアリポジトリにがしがしコミットすると不整合が起こります。

個人でやる分には、receive.denyCurrentBranchとかいうのを設定して無理やりチェックアウトして・・・って出来ないこともないんですが、Gitではベアリポジトリを作ることが推奨されているので素直に後述のベアリポジトリを使うやり方でいきます。

ベアリポジトリで集中管理

Git的にベアリポジトリを作るべし、というのもありますが、今回は作業する人が複数になることは無さそうでもWindowsマシンでも更新する可能性は大いにあるので、ベアリポジトリを使って複数のPCで更新する場合を考えてみます。

図にすると以下のとおり。ローカルからのプッシュは全てリモート上のベアリポジトリに対して行います。本番環境の実ファイルを持つノンベアリポジトリは、ベアリポジトリから更新されたファイルをプルすることで最新の情報に更新されます。

Manage Your Git With Bare Repogitry

リモートサーバ上のベアリポジトリとノンベアリポジトリのやり取りにはフックを使う

リモートサーバ上のノンベアリポジトリ、つまり本番環境のリポジトリは、「ベアリポジトリが更新されたらプルする」ということしかやりません。本番環境のテーマファイルを直接いじることはないという前提です。ですので自動化できます。

「○○されたら☓☓する」というのは、Gitでは「フック」という仕組みを使って実行できます。

実際に何をやるのか

以上を踏まえると、やることは以下のとおり。

  1. VirtualBox上のUbuntuに、Wordpressのテーマファイルが置かれているディレクトリをワーキングディレクトリとしたノンベアリポジトリを作る
  2. リモートサーバ上にベアリポジトリを作る
  3. リモートサーバ上に、Wordpressのテーマファイルが置かれているディレクトリをワーキングディレクトリとしたノンベアリポジトリを作る
  4. リモートサーバ上のベアリポジトリで、プッシュされたらノンベアリポジトリからプルするようフックを設定する

実際の設定は「ベアリポジトリとノンベアリポジトリ:実践編〜GitでWordpressのテーマを管理」を参照ください。

参考

NAVERまとめに参考にしたサイトをまとめてみました。

matome.naver.jp

Gitポケットリファレンス

Gitポケットリファレンス