そろそろバージョン管理の必要性を感じ、Git学習中なのですが、git pull
でデプロイする環境を作るにあたって、理解不足でハマったため、今後のためにメモしておきます^^;
実際の作業はリンク先参照。
#git pull
でデプロイとは?
すでに多くの記事がありますが、ローカル環境から、リモート環境へpush
した際、Web環境等へコンテンツやスクリプトを自動的にpush
し配置するための仕組みを言っています。
一般的には以下の手順で行うようです。
- コンテンツやスクリプトの配置領域を
git init
で working tree 化する(今回コンテンツ用リポジトリと呼びます) - 非公開領域に
git clone --bare --shared
でベアリポジトリを作成(今回管理用リポジトリと呼びます) - 管理用リポジトリのフック(hooks)に post-receive を作成し、実行権限を付与
- ローカル環境から
push
し、コンテンツ用リポジトリに意図通り反映されていれば完成
最終的に参考にしたのはこちらのサイトでした。ありがとう^^
ベアリポジトリとノンベアリポジトリ:理論編〜GitでWordpressのテーマを管理
ベアリポジトリとノンベアリポジトリ:実践編〜GitでWordPressのテーマを管理
#ハマったトコロ
いろんな情報に左右されながら、作業したため、かなり時間がかかってしまいました。Gitの挙動と問題解決方法を理解していなかったのが致命的でした。
- コンテンツ用リポジトリに更新が反映されない(post-receive 編)
原因は2点。post-receive に実行権限がなかったのと、post-receive 内の挙動でコンテンツ用リポジトリのディレクトリに移動後、git コマンドがうまく動作しなかったことが原因でした。
前者は実行権限を与えることで解消。post-receive の挙動の切り分け方法が分からず、原始的な方法(実行コマンドを echo 'aaa' > ~/test.txt
に差し替え)で切り分けしました。ログとかってどこに出るんだろ。。。
後者は git コマンド実行前にunset GIT_DIR
を入れることで解消。コマンドラインからの入力の場合、正常に動作していたため、unset GIT_DIR
の情報にたどり着くまで、結構悩みました。
- コンテンツ用リポジトリに更新が反映されない(ケアレスミス編)
切り分けの途中で、コンテンツ用リポジトリ側のファイルを更新してしまっていたため、pull
がうまく動作していませんでした。ケアレスミスですね^^;全然気が付かず、かなり時間をかけてしまいました。。。
課題
Gitの根底の理解が出来ていないので、ちゃんと時間を取って、学習する必要がありそうです。
特に挙動を追うための手段があるのかないのかもわかっていないので、そこからかなぁ。
最近物覚えが悪く、同じことでつまずくので、ハマったシリーズでも作ろうかと思ってます。