行動記録

行動記録です。

ウェブアプリケーションのGitリポジトリの先端を追いかける

ウェブアプリケーションのGitリポジトリの先端を追いかけるとき、インターネットに公開したウェブサーバー上で閲覧できるようにすると「.git」ディレクトリも公開されてしまう。これを公開するとまずい場合もあるので、もちろん何らかの対策を実施することが普通。たとえば、ウェブサーバーの機能などでアクセス制限をかけたりするのだが、Git側で対策することもできる

git clone時に「--separate-git-dir=」オプションを使って、gitdirのパスを指定してやればよいだけ。以下、WordPressで例示する。

$ git clone --separate-git-dir=dot.git git://github.com/WordPress/WordPress.git
$ ls -a
./  ../  WordPress/  dot.git/
$ ls WordPress/ | head -3
index.php
license.txt
readme.html
$ ls dot.git/ | head -3
HEAD
branches/
config
$ cat WordPress/.git
gitdir: /path/to/dot.git
$ 

ただ、この方法だと「.git」ファイルが生成され、gitdirへの絶対パスが書かれてしまう点は注意。これは相対パスも解釈してくれるので相対パスに書き換えておくとよい。上に例示したパスを使うならこんな感じ。

$ cat WordPress/.git
gitdir: ../dot.git
$ 

今回はウェブアプリケーションの事例だけど、普段もこうやって別けていたら「全てのファイルに対して文字列置換」などを実施する場合、うっかりローカルにあるリポジトリを破壊してしまうことも回避できそうですね。

「--separate-git-dir」オプションがない古いGit使っている人は新しいGitに入れ替えるか、「git clone --work-tree git://...」みたいに「--work-tree」オプション付きでclone、「git pull --git-dir=foo/bar」みたいに「--git-dir」オプション付きでpullなどをやるといいですね。面倒ですけど。(環境変数GIT_DIRもあるけど、やっぱり面倒)