デスクトップアプリ、スマホアプリ、Webサイトにかかわらず、
ほぼ全ての開発にはgit等のバージョンコントロールを導入することが多くなりました。
git + Vagrant等のローカルサーバーを使って開発している時は
「testブランチで書いたコードをmasterブランチにマージして...」
というようなブランチを切り替えて作業するケースが多々有ります。
フレームワークのバージョンアップデートの検証にも
ブランチを分けてテストするケースは少なくないと思います。
masterブランチにマージをしたのはいいですが、
「ブランチをtestに戻し忘れて直接masterレポジトリで作業を進めてしまっていた。。。
今度はmasterからtestにマージしないと、、、」
っという経験はありませんか?
筆者はこれを”ブランチ ショック”と呼んでいます。
IDEやATOMエディタ等は 現在のgitブランチが表示されるようになっていますが、
Web画面やアプリケーション側では確認のしようがありません。
そのような間違えを無くす為に、
今回はPHPで現在のgitブランチを表示させる方法を紹介します。
gitのブランチはプロジェクトルートの ".git/HEAD" ファイル内に記述されています。
# branchの切り替えコマンド
git checkout master # masterに切り替え
# .git/HEAD
# 現在のブランチが"master"の場合
ref: refs/heads/master
ブランチをmasterからtestに切り替えると、HEAD内のファイルが
" ref: refs/head/test " に切り替わります。
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;
}
...
上記のようなgitブランチを取得する関数を1つ作っておいて
ブランチ毎にヘッダー画像やロゴを変えたりすれば、
現在どのブランチで動いているか一目でわかるようになりますね!
またテストサーバーを使って
共同で作業をしている時にも確認の手間が省けたりするのでゼヒ×2参考にしてください!