Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2009-01-06 (Tue)

checkoutしたファイルのmtimeを、そのファイルがcommitされた時刻に合わせたい ― svnとgitの場合

唯一の中央レポジトリと複数の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を変更しまくります。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |