PHPで現在のgitブランチを取得する



デスクトップアプリ、スマホアプリ、Webサイトにかかわらず、
ほぼ全ての開発にはgit等のバージョンコントロールを導入することが多くなりました。

git + Vagrant等のローカルサーバーを使って開発している時は
testブランチで書いたコードをmasterブランチにマージして...
というようなブランチを切り替えて作業するケースが多々有ります。

フレームワークのバージョンアップデートの検証にも
ブランチを分けてテストするケースは少なくないと思います。

masterブランチにマージをしたのはいいですが、
ブランチをtestに戻し忘れて直接masterレポジトリで作業を進めてしまっていた。。。
 今度はmasterからtestにマージしないと、、、

っという経験はありませんか?

筆者はこれを”ブランチ ショック”と呼んでいます。

IDEやATOMエディタ等は 現在のgitブランチが表示されるようになっていますが、
Web画面やアプリケーション側では確認のしようがありません。

そのような間違えを無くす為に、
今回はPHPで現在のgitブランチを表示させる方法を紹介します。


git側でのブランチ

gitのブランチはプロジェクトルートの ".git/HEAD" ファイル内に記述されています。

# branchの切り替えコマンド
git checkout master  # masterに切り替え

# .git/HEAD
# 現在のブランチが"master"の場合
ref: refs/heads/master

ブランチをmasterからtestに切り替えると、HEAD内のファイルが
" ref: refs/head/test " に切り替わります。


PHPでgitブランチの取得コード

gitブランチの取得はさほど難しいわけでもなく、
".git/HEAD"ファイル内の文字列を取得して分解すれば出来上がりです。
( rubyやpythonのプロジェクトでも簡単に取得出来ます )

exec()関数を使ってサーバーから情報を取得する様な手間も必要ありません。
( 参考にしたサイト: StackOverflow )

function gitBranch()
{  
  $gitPath = "../" . ".git/HEAD";
  
  return trim(implode('/',
      array_slice(explode('/', file_get_contents($gitPath)),
      2)
    ), "\n");
}

// 使い方
echo gitBranch(); // master, test ...
// サンプル2

define('GIT_PRODUCTION', 'master');
define('GIT_DEV1', 'develop1');
define('GIT_TEST', 'test');

// php7ではdefineにarrayも使えます
// define('GIT_BRANCH', [
//   'production' => 'master',
//   'dev1' => 'develop1',
//   'test' => 'test'
// ]);

// gitのカレントブランチを判定
switch (gitBranch()) {
  
  case GIT_PRODUCTION:
    echo '本番環境';
    break;
    
  case GIT_DEV1:
    echo 'devブランチ';
    break;
    
  case GIT_TEST:
    echo 'テストブランチ';
    break;
}

...


Summary

上記のようなgitブランチを取得する関数を1つ作っておいて
ブランチ毎にヘッダー画像やロゴを変えたりすれば、
現在どのブランチで動いているか一目でわかるようになりますね!

またテストサーバーを使って
共同で作業をしている時にも確認の手間が省けたりするのでゼヒ×2参考にしてください!

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ