LoginSignup
1
0

More than 5 years have passed since last update.

git hooks ~独自シェルを動かす~

Last updated at Posted at 2015-01-29
メモレベルです。きちんと学習されたいという方は下部の参考サイト様の閲覧をお勧めします。
参考にしていただければ幸いですが、参考にして不具合等が起きた場合、保障はできませんのであしからず。
間違い等あればご教授いただけると助かります。

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.

  • 処理を記述

ror_sample/.git/hooks/post-commit(開発用)
#!/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へ移動し解凍」
 とかでもできることはできるか。

 使い方は無限大ですね。(失敗しましたが…

参考サイト様

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0