2015/01/24

VCS(gitやsvn)で管理してれば過去のファイルを取り出せるって言うけど

git や svn のようなバージョンコントロールシステムの管理下にあれば、過去のファイルを 簡単に 取り出せるー!って言う人たまにいるけど、そんな簡単じゃないよね?

道具はある

例えば git なら

$ git checkout 947bdf9 FILE

とかすると、FILE を指定したコミットハッシュ(上だと 947bdf9)の状態に戻せる(FILEじゃなくてディレクトリでもOK)。

svn なら

$ svn cat -r 17 FILE

という風にリビジョンで指定する。まあこの手のコマンドはそこそこ揃ってる。

ほうほう、これなら日付で絞ってログを漁ればなんとかできそうじゃん、って思えると思うんですが、現実はおうおうにしてそんな単純ではありません。

履歴は黒い

コミットの履歴が浅いとか綺麗とかならまあいいんですけど、現実はだいたい以下のようになっています。

  • あるとき、機能単位でブランチがマージされる(これは普通)
  • 上でマージされたファイルの一部が別機能のために更新される(まあ普通)
  • あるファイルは変名されたり移動させられている(ま、まあ普通)
  • あるファイルは削除される(そりゃそういうこともある)
  • 削除されていたファイルが、あるとき、変名でしかもちょっと差分入りで追加されている(突然の死)
  • 上記の操作が短期間に繰り返し行われている
  • 目的のファイルはバイナリ

白目剥いて倒れる。

まあ、サルページとか滅多にやるもんじゃないんだけど、青年の主張的に思うより面倒くさいこともあるよというメモ。

サイト内検索