メモレベルです。きちんと学習されたいという方は下部の参考サイト様の閲覧をお勧めします。
参考にしていただければ幸いですが、参考にして不具合等が起きた場合、保障はできませんのであしからず。
間違い等あればご教授いただけると助かります。
git hooks
・gitの処理中に独自のシェルスクリプトを動かすことが出来る。
・処理のタイミングは複数用意されており、ほぼほぼ .git/hooks
の中にサンプルが用意されている。
処理タイミングについて詳しく説明されている mima_ita様の記事
やってみたこと
Vagrantで作成した仮想環境内(Ubuntu)で、Gitプロジェクトを2か所に置き、開発用PRJとする片方でコミットorプッシュが行われたタイミングで
もう片方の非開発用PRJで自動デプロイする。
処理
ファイルを作成
vi ror_sample/.git/hooks/post-commit
もともと.git/hooks
内にサンプルファイルがpost-commit.sample
といった名前で保存されている場合もあるので
そちらをリネームして使いまわしてもOK.処理を記述
#!/bin/sh
logger "********************************************"
# ディレクトリへの移動(非開発用)
cd /home/hoge/ror_sample | logger "cd"
# 申し訳程度のフェッチ
git --git-dir=.git fetch| logger "fetch"
# プル
git --git-dir=.git pull origin master:master| logger "pull"
# 現在ローカル側での最新コミット情報
logger `git --git-dir=.git log --oneline -n 1 `
実行権限がなければ付与
chmod +x post-receive
ログ監視
tail -f /var/log/syslog
結果、エラーは出ませんが非開発用のプロジェクトでプルされていませんでした。
細かく pwd
をログに吐き出すと、移動していない!!そういうものなの?
LinuxもGitも初心者なので原因特定には至っていませんが、
開発用PRJの位置でシェル内のコマンドは実行されていたようでした。
同じようなコードを非開発用のプロジェクトのpost-receiveに書いたりもしてみましたが、そもそも動かず。
業務で困ったわけではないので構わないのですが、ひとまずシェルを動かすことは成功したというところで(妥協)
まぁ、非開発用PRJをgitで管理せずに、post-commitを使用して開発用PRJでコミットする度に
「git archiveとgit diffを使って差分ファイルを圧縮。非開発用PRJへ移動し解凍」
とかでもできることはできるか。
使い方は無限大ですね。(失敗しましたが…