息切れ・メマイ

WindowsLiveメッセンジャにはフォルダ共有機能があります。

MSNメッセンジャなどでは,ファイルの送受信しかできなかったわけです。

フォルダの共有ということで,これを使えば遠隔地間でフォルダの同期をおこなうことができるわけです。しかもどうやらNAT内でもOKのようです。

・・・

さて今,巨大ソースツリーの末端部(ヤシャ孫請け)のごくごく一部,つまりサブサブサブ・・・(中略)・・・サブサブツリーを担当しているとします。

全ツリーはざっと5GBくらいあります。ファイル数は20万くらいでしょうか。このルートフォルダを割と最新のマシン上でローカルにxcopyすると,100分くらいかかります。LAN経由だと300分くらいでしょうか@100BASE。

なのでLAN内のサーバから取ってくる時には小分けに圧縮したファイルです。それならコピーは数分で終わります。しかしながら,解凍するのに結局100分以上かかります。

さて問題は「キレイな」環境でリリース物をビルドしてテストするには,準備だけで2時間掛かるということです。この問題を放置すると,リリース締め切りに対する内部の締め切りが単純に2時間以上余分に早まってしまいます。

つまり内部作業者の余裕が失われるということです。フォルダのコピーに2時間かかるというだけの理由で。

解決

Windowsなら,robocopyを使え。非Windowsなら同期コマンドが山ほどあるでしょ。

準備:

  • ベースとなるソースツリーをc:\baseに置いておく。
  • 作業フォルダは,c:\work。

作業の開始(1回のみ):

  • c:\workにc:\baseを丸ごとコピーする。

作業:

  • c:\workでおこなう。

作業フォルダのリセット:

  • ベースと同期を取る。

c:> robocopy c:\base c:\work /MIR /NP /LOG:log.txt

/MIR 同期(c:\workの中をc:\baseとそっくり同じにする)
/NP ログにプログレスを吐かない
/LOG: ログファイル指定(リダイレクトを使うなとのこと)

これで,5Gあろうが,10万ファイルあろうが,ものの数分でリセットできます。5GBのフォルダを削除して,新たにXCOPYするなどした場合に比較すると,所要時間で10分の1程度に短縮できます。

ジャーナルファイルシステムが必要だとか,どっかの環境のフィルタファイルシステムがないから仕方が無いとかあきらめる前にできることがあるようです。

(10月6日補足)
同期によるリセットが有効なのは、ツリー全体に大して変更箇所が少ない時です。
つまりここに挙げた話は末端でこそ意味があります。