考察
見せたくないファイル
「GitHubやBitbucketを利用してチーム開発したいけど、
本番環境に適用する設定ファイル等はほかのメンバーに見せたくない」
これって、 git ではそこそこややこしい問題だと思う。
今後、ファイル単位でのアクセス制御が出来るようになってくれるようなこともあるかもしれないが、
現状ではそれが望めないので ignore するかってことになるかと思うのだが、
.gitignore に対象ファイルの path を記述することすらしたくない。
もう少しスマートにやる為には、 exclude を使うといいんじゃないか。
開発者の環境毎に設定内容が変わってしまうファイル
開発者の環境によって設定内容が変わってしまうようなファイルがいくつか存在する。
そういったファイルは、とりあえず
switch (gethostname())
{
case 'www.production.ne.jp':// 本番環境
define('FUEL_PATH', '/www/lib/FuelPHP/');
define('LOG_DIR', realpath(__DIR__.'/../app/').DIRECTORY_SEPARATOR.'logs'.DIRECTORY_SEPARATOR);
break;
default :// ローカル環境
error_reporting(-1);
ini_set('display_errors', 1);
/* >>>> 各自の環境に合わせて書き換える */
define('FUEL_PATH', 'Write the directory that contains the FuelPHP.');
define('LOG_DIR', 'Write the directory that contains the log.');
/* <<<< 各自の環境に合わせて書き換える */
break;
}
みたいな感じにしてcommit
しておいて、開発者各自が適宜自分の環境に合わせて設定内容を記述し、skip-worktree
するみたいな感じかなと。
実践
exclude
.git ディレクトリ配下に info というディレクトリがあって、
その中に exclude ファイルが格納されている。(~/.git/info/exclude)
ここに管理対象から外したいディレクトリやファイルの path を記述しておけば
.gitignore ファイルに記述する必要がなく、
対象となるディレクトリやファイルの path が公開されることがないので安心。
記法は .gitignore と同じ。
skip-worktree
考察に掲載したようなファイルがあると仮定して、
そのファイルの path が「root/public/index.php」とかだったりするとする。
で、ファイルの記述を自分の環境に合わせて変更したりすると
git-status
に出てきてしまうことになるわけだが、
git update-index --skip-worktree root/public/index.php
↑を実行するとgit-status
に表示されなくなるので、commit
→merge
しても反映されなくなる。