Team Foundation ServerのShelveとUnShelve。

eclipseで使えるバージョン管理システムにもこれが、欲しい。

Version Control におけるパラドックス

開発プロセスの最終段階でパラドックスに出会うことがあります。たとえば、開発チームの共通目標は、最新のバージョンソフトウェアを毎日の作業の最後にソース管理リポジトリにチェックインさせることです。中央リポジトリは通常、開発者ワークステーションよりも頻繁にバックアップされ、他の開発者が最新コードへアクセスしなければならないことがあります。問題が発生するのは、ビルドが壊れたり、開発プロセスに支障をきたす可能性のあるコードをソース管理リポジトリに入れたくない場合です。複雑な変更を行うには 1 日以上かかるので、毎日コードをチェックインさせながら、開発チームの他のメンバに迷惑をかけないのは不可能です。

TFVC では、シェルビング (shelving) 機能を導入することにより、この状況を処理しています。シェルビング機能を使用すると、保留状態のままファイルの中間バージョンをソース管理リポジトリに保存できます。つまり、ファイルは Team Foundation Server にあり、他のユーザーがアクセス可能で、しかも標準のバックアッププロシージャによりバックアップされます。同時に、このシェルブセット (Shelve Set) はバージョン管理されたアプリケーションのソースコードではありません。したがって、不完全なコード、あるいは調整不良コードをチェックインしたためにビルドが壊れたと非難されることもありません。強調します、変更はサーバーにアップロードされ保存されますが、チェックインされません。

シェルビング機能はワークフローを中断する場合に便利です。たとえば、V2.0 から呼び出して V1.0 のバグを処理する場合や、休暇を取ると決めて現在のソース コードタスクをそのまま放置しておくが、同僚は利用可能でなければならない場合などです。事実、シェルビング機能は、チームメンバ間での一般的なデータ共有にも役立ちます。他のチーム メンバが中断したワークフローのコード シェルブばかりでなく、コードレビューおよびバディ テストなど計画されたアクティビティにもアクセスできます。

重要なポイントは、

  • 「Shelveセット」として、サーバに保存される事。
    • 「Shelveセット」を、複数のプログラマ間で共有出来る。
    • ブランチ切ったりすると、正直メンドイのですよ。サックリと、一部分だけでコード見たりしたいのですよ。
  • 「Shelveセット」とローカルの「変更セット」にコンフリクトがあると、UnShelve出来ない事。
    • 混ぜるな危険。つまり、そういう事。
  • バージョン管理対象にならないので、処理が爆速である事。
    • ちょっと作業しては、サーバ側に「Shelveセット」として、サクサク保存出来る。
    • 「Shelveセット」を、ローカルに持ってくる時にも、特に逡巡する必要が無い。

これは、スゲェ。とりあえず保存。これ、超重要。
メール投げたり、Skypeにメッセージ投げたり出来ると、もっとカッコいいんだけどな。
まぁ、それはやり過ぎか。


IDEAにはあるらしいけど、ちょと違う。

簡単に言うと「ローカルのチェンジセットをRevertする前に,パッチ作って寄せておいて,必要に応じて差し戻せる機能」だ。って,Subversionとか使ったことある人にしか通じない説明だな。もっと簡単に言うと「ローカルで変更した内容を,どっかに待避しておいて,好きなときに差し戻す機能」だ。当然,「どっか」ってのはリポジトリじゃないよ。