# VCS(gitやsvn)で管理してれば過去のファイルを取り出せるって言うけど git や svn のようなバージョンコントロールシステムの管理下にあれば、過去のファイルを *簡単に* 取り出せるー!って言う人たまにいるけど、そんな簡単じゃないよね? ## 道具はある 例えば git なら $ git checkout 947bdf9 FILE とかすると、FILE を指定したコミットハッシュ(上だと 947bdf9)の状態に戻せる(FILEじゃなくてディレクトリでもOK)。 svn なら $ svn cat -r 17 FILE という風にリビジョンで指定する。まあこの手のコマンドはそこそこ揃ってる。 ほうほう、これなら日付で絞ってログを漁ればなんとかできそうじゃん、って思えると思うんですが、現実はおうおうにしてそんな単純ではありません。 ## 履歴は黒い コミットの履歴が浅いとか綺麗とかならまあいいんですけど、現実はだいたい以下のようになっています。 * あるとき、機能単位でブランチがマージされる(これは普通) * 上でマージされたファイルの一部が別機能のために更新される(まあ普通) * あるファイルは変名されたり移動させられている(ま、まあ普通) * あるファイルは削除される(そりゃそういうこともある) * 削除されていたファイルが、あるとき、変名でしかもちょっと差分入りで追加されている(突然の死) * 上記の操作が短期間に繰り返し行われている * 目的のファイルはバイナリ 白目剥いて倒れる。 まあ、サルページとか滅多にやるもんじゃないんだけど、青年の主張的に思うより面倒くさいこともあるよというメモ。