WordPressのGit管理と.gitignore
Wordpressをgitで管理しようとして「どのファイルをignoreすればいいんだっけ...?」となっても、今はgitignore.ioやgiboで簡単にWordpress用のgitignoreファイルを生成できます。
これらが作る.gitignore
に、wp-config.php
と.htaccess
が含まれています。
前者はDBの設定などを記録するもの、後者はルーティングを設定するファイルです。
なぜignoreリストに追加されているかというと、テスト環境と本番の環境間で値が異なるからです。
もしdevelopmentブランチにあるこれらのファイルをマージすると、masterブランチにある本番環境の情報が誤って上書きされてしまいます。
なので、手動でFTPアップロードを行うのであれば、上記の2ファイルを単に.gitignore
に記述したうえで環境ごとに別々のファイルを作っておき、それ以外のファイルをバージョン管理すれば問題ないわけです。
これは割とよくあるパターンだと思います。
heroku等での問題点
ところがherokuを始めとしたGitの使用を前提としたPaasではそうはいきません。
アップする必要があるファイルは全てgitで管理する必要が有るためです。
よって上記ファイルもgit経由でサーバー(heroku)へアップロードしなければいけないのです。
つまるところ
-
wp-config.php
と.htaccess
は本番にデプロイしたい(=gitで管理したい)一方で - 開発環境に対応するブランチを本番ブランチへマージする時はそれらの差分を無視したい(=ブランチ間で異なる状態を維持したい)
という要求を満たさねばならず、.gitignore
で無視することができません。
.gitattribesの機能
「こんなわがままなことできるわけ無いじゃん...」
..と思っていたら、なんと.gitattributes
を使ってできることが分かりました!!
.gitattributes
ファイルは、ファイルや特定の拡張子ごとに属性を定義することができるファイルです。
この属性についての詳細な説明は、あまり自分でも理解できていないので省略しますが、属性の一つにブランチ間の差分を無視するという属性があるのです。
まずプロジェクト(リポジトリ)のルートディレクトリに.gitattributes
ファイルを作成し、以下を書き込みます。
.htaccess merge=ours
wp-config.php merge=ours
ブランチ間で差分を無視したいファイル名と、後ろにmerge=ours
というオプションをつけます。
そして.git/config
を開いて
[merge "ours"]
name = "Keep ours merge"
driver = true
を追記します。
この謎のおまじないによって、なんとgitでファイルを管理しつつ、mergeしても差分は取り込まれないという設定ができるのです!!
Wordpressでの環境設定ファイルの管理に役立ちそうなTIPSですね。