1. Qiita
  2. 投稿
  3. Git

Wordpressをgitで管理するときの.gitattributesの使いドコロ

  • 24
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

WordPressのGit管理と.gitignore

Wordpressをgitで管理しようとして「どのファイルをignoreすればいいんだっけ...?」となっても、今はgitignore.iogiboで簡単にWordpress用のgitignoreファイルを生成できます。

これらが作る.gitignoreに、wp-config.php.htaccessが含まれています
前者はDBの設定などを記録するもの、後者はルーティングを設定するファイルです。
なぜignoreリストに追加されているかというと、テスト環境と本番の環境間で値が異なるからです。
もしdevelopmentブランチにあるこれらのファイルをマージすると、masterブランチにある本番環境の情報が誤って上書きされてしまいます。

なので、手動でFTPアップロードを行うのであれば、上記の2ファイルを単に.gitignoreに記述したうえで環境ごとに別々のファイルを作っておき、それ以外のファイルをバージョン管理すれば問題ないわけです。
これは割とよくあるパターンだと思います。

heroku等での問題点

ところがherokuを始めとしたGitの使用を前提としたPaasではそうはいきません
アップする必要があるファイルは全てgitで管理する必要が有るためです
よって上記ファイルもgit経由でサーバー(heroku)へアップロードしなければいけないのです。
つまるところ

  1. wp-config.php.htaccessは本番にデプロイしたい(=gitで管理したい)一方で
  2. 開発環境に対応するブランチを本番ブランチへマージする時はそれらの差分を無視したい(=ブランチ間で異なる状態を維持したい)

という要求を満たさねばならず、.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ですね。

参考