2010-11-30 14 views
3

私が開発しているJavaアプリケーションに埋め込むVCSを選択する必要があります。 JavaアプリケーションはAPIを介してVCSと対話しますが、ユーザーはEclipseプラグインを介して直接対話します。Mercurial v Git v Subversion

3つの候補VCSが識別されました:Mercurial、Git、Subversion私は、次の基準(順不同)に基づいていずれかを選択する必要があります。

  • のJava API。使用可能なJava APIがない場合、アプリケーションはコマンドラインからVCSコマンドを発行できるため、これは100%必要ではありません。しかし、APIは明らかに
  • Eclipseプラグイン
  • シンプルが好ましいであろう。 VCSを使用している人(間接的にはアプリケーション経由またはEclipse経由で直接)はソフトウェア開発者になりますが、おそらく最も洗練されたものではありません。
  • ライセンス。ライセンスは、商用アプリケーションでVCS(上記の方法で)の使用を許可する必要があります。

私が見落としたことがあるかもしれませんが、私はそれ以上の気にする必要がある場合、質問を更新します。

ありがとうございます!

+1

ライセンスの制約がありますか、またはアプリケーションをオープンソース化するように取り組んでいますか? – anirvan

+0

@anrivan - 良い点、私は更新します! –

+0

マイグレーションを検討事項として追加します。ソリューションから簡単に移行できる場合、それを選択するリスクが少なくなります。 –

答えて

0

まず、アプリケーションにワークフローがあり、特に集中管理されたVCSでうまく動作しない限り、私はSubversionを取り除きたいと思います。そして、それでもsvnがとても遅いので、Mercurialまたはgitを使用しようとします。

Mercurial(hg)vs Gitに関して、私は個人的にgitを選択します。一方で、hgはよりシンプルでより直感的ですが、gitは多くはであり、hgよりもはるかにマインドシェアがあります。

ただし、スクリプト性に問題がある可能性があります。 Gitは実際にはUnixシェルからスクリプト化できるように作られています(gnuソフトウェアがインストールされたウィンドウで実行されます)。 HgにはPythonインターフェイスがありますが、正しく呼び出すと、おそらくjythonで使用することが不可能なC拡張がいくつかあります。

についてライセンス、HGとGitは両方ともGPLのですが、あなたは彼らに支払う場合には問題ではありません。そこJava用のサードパーティ製のgitライブラリであるようにとはいえ、それが見えます。 SVNはApacheライセンスを使用しているので、このフロントで勝てるかもしれません(基本的に、あなたが望むことは何でもできます)。

+2

私は「スクラッチアウト・サブバージョン」の部分に同意します。 Subversionは、作業コピーが破損したり、マージの競合が発生するとすぐに* simplicity *の要件に失敗します(これらのイベントは**発生します)。 –

+1

指定されていない基準でSubversionをスクラッチします。よくやった!いずれにしても、svnは大規模なチェックアウトを除いて遅くなく、低速のネットワークリンクでコミットします。指定された実際の基準では、svnはそれらをすべて満たす3つの唯一のものです。 – JeremyP

+1

Btw *もっと速い部分に数字がありますか? (そして、mindshareの部分は、カーネル/ X/ruby​​/freedesktopのようないくつかのサークルでしか真実ではありません。例えば、Windowsベースのdevsなどではわかりません) – tonfa

3
  • のJava API:Subversionは、Java用のバインディングを持ち、そして起こってJavaでのMercurialの再実装のいくつかの種類は、(devメーリングリストを参照)があります。
  • Eclipseプラグイン:Eclipse用に3つすべてをサポートするプラグインがあります。
  • 簡体字:Subversionにはおそらく、より単純なモデルが集中化されていると考えられます。 Mercurialは、Gitよりも簡単に学習して使用する傾向がありますが、そうでなければ機能がかなり近いです。
  • ライセンス:GitとMercurialはGPLされていますが、ライセンスに関係なくコマンドラインから呼び出すことができます。SubversionはコピーライトではないApacheライセンスを使用します。

今、違いを抽象化するインターフェイスを作成して、3つすべてをサポートできるようにしましょう。 MercurialとGitは非常に似ているので、少なくともこれらの2つをサポートするのは比較的簡単です。

+0

Hg/GitとSVNの基本的な設計上の違いを考えれば、私は3つすべてをサポートするとHgとGit(* distributed *バージョンコントロール)の目的を破るでしょう。しかし、おそらく 'git-svn'はオプションです... –