Visual Source Safeを使用するのは狂気の沙汰

きっかけ
元ネタ。

俺はVSSを使用しようというプログラマを信用しない。(と宣言しておく)
割と適当訳なのでご了承ください。

時々現れる、どのバージョン管理ツールをつかうのかという宗教的議論の中で、
私はマイクロソフトのVisualSourceSafeが一貫して叩かれている事に気付きました。

私はこれほどまでに憎悪を集めるような別のソフトウェアプロダクトを考えることができません。

私のプログラミングキャリアの日々では幸運なことに、svnを使う場所で働いていおり、さらに最近ではgitだったので、私はVSSを一度も経験したことがないということです。

VSSは本当に皆が主張するくらいに悪いものですか?

はい、そのとおりです!!
私はgit、svncvs、tfs、及びvssを使いましたが、VSSは最も悪かったです。
それには、みんなで作業を分離するという概念が全くありません。
ファイルを操作するとき、あなたはそれをロックします。
マージの概念は持っていません。
そして、それはただただ共有ドライブにおいてあり、ネットワーク操作ですべてを行います。そして、ぶっ壊れます。

> そして、ぶっ壊れます。
本当に! そして、それはしばしば起こる!

早期、かつ頻繁に壊れる!

それが、VSSがVisual Source Shredder(ソースシュレッダー)と呼ばれる理由です。

私の会社では、1つのファイルを戻そうとしたために、仕事のコード全体を破壊しました。
恐ろしい、恐ろしい。
我々は常にバックアップをとるのが良い考えです。

右でも左でも競合がおきた。共有の問題もおきた。
離れた場所(例えば自宅)から簡単な修正を行うこともできない。
私はCVSのようなものが好きです。

完全に同意。
あなたは何ヶ月、何年もの仕事を絶対に失うでしょう。
数ヶ月、それを使用した誰でもそれを知っています。

VSSがロック方式でしか動かないという訳ではないよ。
ロックレスモードであなたのVSSを構築することもできます。
ただ、VSSは理解しがたいUIを持っており、それをすることはさらに悪化する場合があります。

VSSはマージできないというのは戯言です。
それは、悪いですが、まぁ、そんなに悪くはありません。
マージをすることができます。

Hateすぎる。
VSSで困っているのは世界共通なんだね!
で、こういう人もいるのだが、

七年以上、私たちは、6人の小さいチームで独立したVSSと共に働いています。
私たちにはどんな破損もありませんでした。
私たちはsvnに切り替わる必要はなくて、小さいチームにVSSは十分です。

私たちの開発者の大部分は、他の何かを一度も使用したことがないので、
私たちがVSSを使用していたとき、どう使いにくかったかがわかりませんでした。
SVNに切り替わって、私たちのいずれもVSSに戻って構わないとは思わないでしょう。
SVSを使用し始めるなら、あなたはVSSを使っていたときに比べ作業フローと生産性の向上に楽しくなり、驚くかもしれません。
あなたの経験は私と同じかも。

私に教えてください。
VSSからSVNに切り替えたら何を得られますか?

利点の説明が始まる。

多くの利益があるのですが、大きいものとしては、
・分岐
SVNは分岐を迅速に簡単にできますし、ディスクスペースを効率的に使ってくれます。
経験ではVSSで分岐をするとき、ブランチの必要性が考えられるケースに非常に慎重になり、殆どそれをしませんでした。
それをするのに時間がかかって、うんざりするプロセスであったので。
SVNの下では、必要なとき分岐すればいいのです。
バグや新機能はそれら自身のブランチで固定していて、容易に主コードに戻すことができます。

・速度
SVNはファイルやディレクトリ、また全体のプロジェクトの履歴を得るのに、VSSでできた速度より遙かに高速に動作します。

・バックアップ
SVNリポジトリは簡単にバックアップすることができます。
SVNリポジトリはあなたのサーバのファイルシステムのフラットなファイルです。
アクティブな利用されているリポジトリをバックアップできますし、バックアップ中もソース管理システムを使うことができます。

・メンテナンス
SVNはオフラインでのメンテナンスや解析を必要としません。
メンテナンスを行う場合にシステムを長時間利用できないなんてことはありません。
*1

・リモートアクセス
HTTP(通常Apacheを使います)で容易にSVNにアクセスできます。
VSSではこれができないので、Source Offsiteのような別の製品を必要とします。

コマンドラインツール
SVNには、包括的なコマンドラインツールがあります。
そもそも、SVNコマンドラインツールですが。
テストのようなケースで、自動ビルドしたりすることが簡単になります。
これは、多分、それが利用可能になるまで(私の経験に基づいています)それがどんな活用性を持っているか想像できない領域の1つです。

・エクスプローラの統合
フリーで利用できるTortoiseSVNは、VSSの全ての機能をGUIで提供します。
Windowsのエクスプローラ上で、どのファイルが最新であるかを可視化できるようになります。

・ツール統合
多くのIDEやテキストエディタSVNと統合できます。
あなたのツールにそれが存在していないなら、SVNフックはそのような統合環境を書くために利用可能です。
これは、ことによるとあなたがそれを試みるまで役に立つことが分からない領域です。

おまけ。
VSSの糞仕様について憤慨している人。

・それは、バカで効率の悪い方法でファイルを保持します。例えば、あなたがファイルの1つのキャラクタを書き換えるならば、小さい差分を保持するのではなく、ファイルの真新しいバージョンを保存します。あなたが別のものにある分岐を作ろうとするなら、深いファイルコピーをします。バカみたいに大容量のデータベースサイズになります。

・それは非常に遅いです。(特に、大容量になったデータベース)

・同時に複数のファイルをチェックインすることができないので、チェックイン操作において、複数のファイルへの変更を分類できません。(従って、貴方が個別にファイルを預けるとき、ソースの変化が激しい際に、同時にヒストリをブラウズして、どんなファイルがチェックインされたか見ることができません)

・システムに対する操作は何時間もかかるかもしれません。(トップレベルディレクトリを改名すると、あらゆるファイルを遡って再帰的に行わなければならないので、一個のフォルダを改名するのに何時間もかかりました)

・ツールサポートが最悪

・ファイルを編集するのに、そのファイルのチェックアウト(「チェックアウト」はSVNのロックと同等です)に依存しています。これはより遅い仕事となり、同じファイルを同じ時間に触ろうとしている人々をブロッキングします。(マージがそれを解決するとしても)

・データベースは崩壊します。私たちは、それを修理しようとしましたが失敗しました。私たちはバックアップから回復して、皆に最後の一日分の仕事を再びチェックさせるよう強制されました。

それは、ものすごく不快な製品です。
よりよい無料の代替手段があります。
あなたはそれを使用するというのなら、狂気の沙汰です。

結論、VSSを使用するのは狂気の沙汰。

*1:VSSは修復の際にオフラインにしなければならない