そこは checkout でなくて export でないの、と発言する修行

開発の現場において、昔よりもだいぶバージョン管理システムcvs やら subversion やら)が使われるようになってきたような気がする。が、デプロイ時に export したものではなく、checkout したものを利用することが少なくないようだ。つまり、一度 checkout しておいたワークスペースを公開ディレクトリの下に置いたり、ワークスペースのブツを rsync で公開ディレクトリの下にコピーしたりする、ということだ。

なぜそうしているのか、私にはよくわからないが「その方が差分しか転送されないし便利だべさ」ということなのかも知れない。私の考えでは、そこは export すべきところであって、checkout するのは明らかな間違いである。

  • そもそも*1、checkout は「いじくって、あとでコミットしてやるぜ」という意思でリポジトリから取り出すものである。
    • それに対し、export は「このバージョンのをいじらずに使います」という意思で取り出す。
    • checkout した場所は、そういう意味で単なるワークスペースであり、いわば舞台裏である。
  • ワークスペースなので、.cvs とか .svn とか、作業のためのいろんなあれこれが散らばっている。
    • それらを除けばいい、といえばいいが、なぜそれらが存在するのか考えたことはあるのか?
  • ワークスペースなので、タグをもとに引っ張ってきたときにはスティッキーになる。
    • スティッキーになっていると、手違いでその場所のファイルをいじってしまった場合に update しても更新ず、それに気づかないこともありえる。

あと、関係ないと言えば関係ないが rsync で差分だけデプロイ、というのもいささかどうだろう、と思う。ダウンタイムを小さくすること、切り戻しを早くすること、を考えたら、差分更新ではなく、旧環境と新環境を別々にまるごと作り、ディレクトリ名の mv もしくはシンボリックリンクの張替えのほうがいいのではないだろうか。

私自身は shell script でさくっと作ってしまう派で、特にデプロイツールなるものの必要性を感じない。が、最近 Archer という perl のデプロイツールの話をちらほら耳にするようになった。実際のところ、どうなんだろう。

*1:出ました、そもそも。