Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.
メモレベルです。きちんと学習されたいという方は下部の参考サイト様の閲覧をお勧めします。
参考にしていただければ幸いですが、参考にして不具合等が起きた場合、保障はできませんのであしからず。
間違い等あればご教授いただけると助かります。

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へ移動し解凍」
 とかでもできることはできるか。

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

参考サイト様

iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away