唯一の中央レポジトリと複数のcheckoutするノードというトポロジの場合、checkoutしたファイルのmtimeがノード間で同じ時刻(当該ファイルがcommitされた時刻)になっているとなにかと都合がいいです。
例えば、Webアプリのデプロイを中央レポジトリからのcheckout(やupdate)で行う場合を考えます。もし、内容が同じなのに複数あるアプリサーバの間でmtimeが異なってしまっていると、
- サーバごとにETagヘッダの値が異なってしまう
- ※Apacheの場合、FileEtagディレクティブを調整(mtimeを見ないように)することによって統一可能ではあります
- サーバ間でrsyncをかけると無駄なファイルコピーが発生する
- 内容が同じににもかかわらずmtimeが異なるせいでコピーが発生する
- ※--size-onlyオプションでmtimeを見ないようにして回避可能ではあります
ということが起こってしまいます。
そこで、checkoutしたファイルのmtimeをそのファイルがcommitされた時刻に合わせる方法を調べてみました。
svn
~/.subversion/configの[miscellany]セクションに
[miscellany] use-commit-times = yes
と書けばOKです。
…というのをtypesterさんに教えてもらいました┌(。Д。)┐
git
あらかじめ、
にある git-set-file-times をローカルにコピペって実行できるようにしておきます。
で、git-cloneした後にそのディレクトリにcdして、さっきのgit-set-file-timesを実行します。
git-set-file-timesはgit-logの出力を元にモリっとmtimeを変更しまくります。