web-dev-qa-db-ja.com

SVNはGitより優れていますか?

個人的な選択(ユーザーによる)または設計の重点のいずれかに蒸留器プログラマツールに関する議論の大部分が蒸留されることは間違いないつまり、特定のユースケースに応じて設計を最適化します(ツールビルダーによる)。テキストエディターはおそらく最も有名な例です-職場のWindowsで動作し、自宅のMacでは Haskell でコーディングするコーダーであり、クロスプラットフォームとコンパイラーの統合を重視しているため、 Emacs 以上 TextMate など.

新しく導入されたテクノロジーが、既存のオプションよりも明らかに優れていることはあまり一般的ではありません。

これは、実際にはバージョン管理システム(VCS)、特にcentralizedVCS( [〜#〜] cvs [ 〜#〜] および [〜#〜] svn [〜#〜] )とdistributedVCS(- Git および Mercurial )?

私は約5年間SVNを使用していましたが、現在は勤務先でSVNを使用しています。 3年弱前、私はすべての個人プロジェクトをGit(およびGitHub)に切り替えました。

私はSubversionよりもGitの多くの利点を考えることができます(集中型VCSを介して分散の利点の大部分は抽象的です)が、1つの反対の例を考えることはできません-いくつかのタスク(これは関連しており、通常のプログラマーで発生します)ワークフロー)SubversionはGitよりも優れています。

これから得たonly結論は、データがないということです-Gitが優れているなどではありません。

私の推測では、そのような反例があるため、この質問です。

294
doug

Subversionは中央リポジトリです

多くの人々は、速度と複数のコピーの明らかな利点のために分散リポジトリを望んでいますが、中央リポジトリがより望ましい状況があります。たとえば、だれにもアクセスさせたくない重要なコードがある場合、おそらくそれをGitの下に置きたくないでしょう。多くの企業はコードを一元管理したいと考えており、(おそらく)すべての(深刻な)政府プロジェクトは中央リポジトリの下にあります。

Subversionは常識です

これは、多くの人々(特にマネージャと上司)がバージョンに番号を付ける通常の方法を使用しており、開発をハードコーディングされた「単一の行」として彼らの脳に見ているということです。違反はありませんが、Gitの自由は飲み込むのが容易ではありません。 Gitの本の最初の章では、従来の理想をすべて頭から消し、新たに始めるように指示しています。

Subversionは一方向にのみ実行し、それ以外には何も行いません

SVNはバージョン管理システムです。 oneの方法で仕事をすることができ、誰もが同じ方法でそれを行います。限目。これにより、他の集中型VCSとの間でSVNとの間で簡単に移行できます。 Gitは純粋なVCSでさえありません-それはファイルシステムであり、さまざまな状況でリポジトリをセットアップする方法について多くのトポロジーを持っています-標準はありません。そのため、どれを選択するかが難しくなります。

その他の利点は次のとおりです:

  • SVNは空のディレクトリをサポートします
  • SVNのWindowsサポートが改善されました
  • SVNはサブツリーをチェックアウト/クローンできます
  • SVNは排他的アクセス制御をサポートしますsvn lockマージが難しいファイルに便利です
  • SVNは、バイナリファイルと大きなファイルをより簡単にサポートします(どこにでも古いバージョンをコピーする必要はありません)。
  • コミットの追加では、プル/プッシュがなく、ローカルの変更は常に暗黙的にsvn update
206
treecoder

GitよりもSubversionの利点の1つcanは、Subversionではサブツリーのみをチェックアウトできることです。 Gitを使用すると、リポジトリ全体が1つのユニットになり、すべてまたはまったく取得できなくなります。モジュール式コードを使用すると、Gitサブモジュールと比較して、これは非常に便利です。 (もちろん、Gitサブモジュールにもその位置があります。)

そして小さな小さな利点:Subversionは空のディレクトリを追跡できます。 Gitはファイルの内容を追跡するため、ファイルのないディレクトリは表示されません。

131
johannes

3つ考えられます。まず、特に開発者以外の人にとっては、簡単に理解することができます。概念的には [〜#〜] dcvs [〜#〜] オプションよりもはるかに単純です。 2つ目は成熟度、特にWindowsでは TortoiseSVN です。 TortoiseHg はすぐに追いついています。第3に、ビーストの性質(ツリーの任意のレベルから物事をチェックアウトできるファイルシステムのイメージ)は、数十に及ぶさまざまな構成ファイルのバージョン管理など、いくつかのシナリオで非常に役立ちます。数十のリポジトリを持たないサーバーの数。

これは、すべての開発をMercurialに移行するわけではないということではありません。

51
Wyatt Barnett
  • SVNリポジトリは、管理者および管理者の観点からより管理しやすくなっています( [〜#〜] acl [〜#〜] +認証方法+ホットコピー+ミラー+ダンプ)
  • SVN *-フックは実装とサポートが簡単です
  • svn:externalはサブモジュールよりも強力で柔軟性があります
  • ファイルシステムベースのリポジトリツリーは、論理のみの分離を備えたモノリシックリポジトリよりも使いやすい
  • SVNには異なるクライアントツールがあります
  • SVNにはGitのものよりもはるかに優れたサードパーティの使用可能なWebフロントエンドがあります
  • SVNはあなたの脳を壊しません
32
Lazy Badger

私はこれを他の誰かの答えに対するコメントとして書きましたが、それ自体が答えになるに値すると思います。

私の会社が慎重に選択したSVNの構成では、コンテンツを編集するためにファイルレベルのロックが必要であり、マージを使用することはありません。その結果、複数の開発者がロックをめぐって争い、それが大きなボトルネックになる可能性があり、マージの競合が発生する可能性は決してありません。

SVNは間違いなくGitよりもトップダウンの管理制御を行います。 Gitへのskunkworksの移行(許可ではなく許しを求める)で、ソフトウェアがないという概念で何度もマネージャーを怖がらせました-私たち全員がスレーブである強制された中央マスター制御サーバー。

24
Dan Ray

あなたが良い情報を探していることを感謝しますが、この種の質問は単に「Gitはとても勝っていると思います、そしてsvn teh suxorzです!」と誘います。答えます。

私はGitを試してみましたが、個人的には私の小さなチームには少なすぎます。それは、地理的に分散している大規模な分散チームまたはチームのグループに最適であるように思われました。私はGitの利点を大いに理解していますが、私の考えでは、ソース管理は私を夜更かしするものではありません。

私は鹿狩りをしているので、私と友達が外に出ると、彼らは歯に武装していて、弾薬とハイテク機器で武装しています。私は1つのライフル、7つの弾丸、およびバックナイフを装備しています。 7ラウンド以上が必要な場合、私は何か間違ったことをしています。私も他の人と同じようにしています。

私が指摘しようとしている点は、中小規模のプロジェクトに取り組んでいる小さなチームで、すでにSVNに精通している場合は、それを使用することです。それは確かにCVSまたは(震動) SourceSafe よりも優れており、リポジトリを設定するのに5分もかかりません。 Gitは過剰な場合があります。

23
maple_shaft

私の理由:

  • 成熟度-サーバーとツール(TortoiseSVNなど)の両方
  • シンプルさ-含まれるステップが少なく、コミットはコミットです。 GitやMercurialなどのDVCSにはコミットが含まれ、次にプッシュが含まれます。
  • バイナリー処理-SVNはGit/Hgよりもバイナリー実行可能ファイルとイメージをよりよく処理します。ビルド関連ツールをソース管理にチェックインしたいので、.NETプロジェクトで特に役立ちます。
  • 番号付け-SVNには、数字のみを使用した読み取り可能なコミット番号付けスキームがあり、リビジョン番号の追跡が容易です。 GitとHgはこれをまったく異なる方法で実行します。
22
Grant Palin

これはすべて相対的であり、maple_shaftが言ったように、もしあなたのために働くなら、変更しないでください!

しかし、本当に何かが必要な場合は、デザイナー、Webプログラマなどに適していると思います画像とバイナリを処理します)ファイル少し良い。

20
Rook

使いやすさ。これは実際にはSubversionのメリットではなく、むしろ TortoiseSVN 's .. TortoiseGit が存在しますが、TortoiseSVNに一致するまでにはまだ長い道のりがあります。

SVNよりもGitの方が優れていると尋ねた場合、私は GitHub と返信します。サードパーティのツールがこのように大きな違いをもたらす方法はおかしいです。

18
Thomas Bonini

分岐してマージする必要がない場合、SVN(Windowsでは TortoiseSVN を使用)は非常に理解しやすく、使いやすいです。 Gitは分岐/マージを簡単にしようとするため、単純なケースでは過度に複雑です。

(適切に管理されていれば、多くの小さなプロジェクトが分岐する必要はありません。Gitは複雑なケースを対象としているため、ほとんどのGitドキュメントでは、分岐やマージなどの複雑な操作を行う必要があると想定しています。)

16
Ian

さて、私の祖父は彼のWindows XPコンピュータでSVNを使用できましたが、彼はGitの使用に問題があったでしょう。たぶん、これは TortoiseSVN よりも TortoiseGit よりも優れていると思いますが、Gitは本質的により強力であり、したがってより複雑であり、それを同じレベルにまで下げることは無意味です。

祖父は最近プログラミングをまったく行っていないので、今はそれは本当に問題ではありません。ただし、私はかつてチームに所属しており、グラフィックアーティストもソース管理を使用していました。

そして、それらは単にツールが機能することを期待していて(そうですが、失敗した場合にツールを機能させる現実的なチャンスがあります)、直感的です。彼らが [〜#〜] dvcs [〜#〜] とうまくやっていくのはかなりの努力であったという事実は別として、得られるものはほとんどありませんでした。また、チームに2人のプログラマしかいないので、SVNだけを使用するのも理にかなっています。

14
back2dos

職場では、2つの理由により、開発者をSVNから任意の [〜#〜] dvcs [〜#〜] に切り替えることができませんでした。

  • 部分的なチェックアウト(プロジェクトツリーの深さが異なる3つのフォルダーのみのように)
  • ファイルのロック(バイナリ形式のレポート)
11
alexandrul
  • 「svn commit」を実行する際の安心感。コミットはサーバーに送られるので、コミット後に変更を消去してしまう可能性のある失敗はありません。 gitでは、コミットはローカルなので、Pushするまでは、「rm -rf」が発生します。
  • コミットは認証されます。デフォルトではgitで、私はだれでもコミットしていると言えます。
  • 日常的な使用のために学ぶコマンドが少なくなります。 'svn checkout'、 'svn up'、および 'svn commit'を使用すると、かなり遠くまで行けます。
  • 共有されたチェックアウトはもっとうまく機能します。コミットすると、ユーザー名/パスワードの入力を求められます。特定のコマンドライン引数を渡すことを覚えておく必要はありません。時々、私たちはいくつかのプロジェクトの共有svnチェックアウトを備えた共有マシンを持っています。誰かが「ボブはこのマシンでこれを見ることができますか」と言うかもしれませんが、彼はそうすることができ、彼はねじ込みなしでユーザーとして彼の変更をコミットできます。
  • リポジトリのレイアウト。アンブレラプロジェクトとサブプロジェクトを作成し、いつ何をチェックアウトするかを選択できます。
  • リビジョン番号は、増加する整数です。
  • 中央リポジトリワークフロー用に設計されています。
8
Tim

他の人がかなり良い答えを投稿していますが、許可はどうですか? SSH経由のSubversionを使用すると、サーバーにSVN用の別のアカウントを作成できます。異なる開発者は、リポジトリの異なる部分への異なるアクセス権を与えることができます。 GITはそれを行うことができますか?私はgitoliteがあると思いますが、それは私にとって柔軟性や堅牢性のようには見えません。

6
GlenPeterson

速度。大きなgitリポジトリのクローンを作成するのに10分または15分かかることがありますが、同様のサイズのSubversionリポジトリは、チェックアウトするのに数分かかります。

5
calum_b

SubversionとGitはどちらも、開発とコラボレーションに対する特定の(そして非常に異なる)アプローチを奨励しています。組織や文化によっては、Gitをより多く活用する組織もあれば、Subversionをより活用する組織もあります。

GitとMercurialはどちらも、非常に有能なプロのプログラマーの分散した、緩やかに編成されたチームに最適です。これらの人気のあるDVCSツールはどちらも小規模なリポジトリを奨励し、開発者間の再利用は(比較的)安定したインターフェースを持つ公開ライブラリを介して行われます。

一方、Subversionは、開発者間のコミュニケーションを増やし、日々の開発活動に対する組織的な制御を強化することで、より集中的で緊密に結合された管理構造を促進します。これらのよりコンパクトに編成されたチーム内では、開発者間の再利用は、(比較的)不安定なインターフェースを持つ非公開ライブラリを介して行われる傾向があります。 TortoiseSVNはまた、Subversionが、プロのプログラマーではないメンバー(システムエンジニア、アルゴリズムエンジニア、その他の専門分野の専門家など)を含む学際的なチームをサポートすることを許可します。

チームが分散していて、メンバーが自宅または多くのさまざまな国際サイトから作業している場合、または単独で黙って作業し、顔を見ながらのコミュニケーションがほとんどない場合は、GitやMercurialなどのDVCSが適しています。文化的な適合。

一方、チームが1つのサイトにあり、開発へのアクティブな「チーム」アプローチと、多くの対面コミュニケーションがあり、「話題」が空中にある場合、SVNは特に、学際的なチームがたくさんある場合は、文化的な適合性が向上します。

もちろん、GitとHgを設定することは可能です(強力で柔軟性があるため)たいていのことを行うことができますが、それは間違いなく作業が多く、特にチームのメンバーにとっては使いにくいです。自然にany形式のバージョン管理を使用する傾向はまったくありません。

最後に、SVNで「ホット」なライブラリ開発を使用して機能を共有すると(CIとテスト駆動型アプローチを使用)、より分散した疎結合のチームでは達成が難しい協調開発のペースが可能になることもわかりました。

4
William Payne

私はこれをコメントではなく応答として投稿します。

今はDVCSがかなりの傾向にあることは認めていますが、その理由を説明しようと思います。

多くの人が「これが私たちが最初から取り組んでいたはずの方法である」と言っているのと同じように、DVCSはより優れています。確かに、DVCSではSVNで使用していたことを実行できるため、SVNは廃止されます。

ただし、すべてのソフトウェアプロジェクトが得られるほど優れているわけではありません。

  • 長期的なプロジェクトはDVCSから多くの恩恵を受けています。オーバーヘッドが少なく、管理(ブランチなど)がはるかに優れており、googleコードやgithubなどのホストによって大幅にサポートされているためです。

  • それらのプロジェクトだけがプロジェクトではありません。外部の世界やインターネットからの支援なしに企業で開発されている他の種類のプロジェクトがあります。すべてが内部で、多くの場合短期的に行われます。良い例:ビデオゲーム。コードは急速に進化します。

後者の場合、開発者はDVCSが提供できる分岐機能や高度な機能を実際に必要とせず、ソースコードとアセットを共有するだけです。彼らが作成したコードは、期限があるため、再利用される可能性はほとんどありません。いくつかの理由により、DVCSではなくSVNに依存しています。

  • 開発者は会社に所属するマシンを所有しており、これは急速に変化する可能性があります。リポジトリの設定は時間のロスです。
  • 彼らが自分のマシンを持っていない場合、彼らは同じソースコード/プロジェクトの一部で作業する可能性が低くなります。加えて、一元化されたデータ用に1つ。
  • ネットワーク速度と多額の資金により、すべてのSVNを処理する集中型サーバーの使用が可能になります。これは悪い習慣ですが、バックアップが作成されます。
  • SVNはsimplerですが、間違った方法であっても使用できます。冗長性のないピアでファイルを同期することは簡単な問題ではありません。完璧になりたい。

ゲーム業界のマシンと、SVNが時間を節約する方法について考えてみてください。ゲームは反復的なプログラミングとアダプティブコードに関するものであるため、人々はこれらのプロジェクトについてより多くのコミュニケーションを行います。コーディングするのは難しいことではありませんが、できるだけ早く行う必要があります。プログラマーが雇われ、彼らは自分たちの部分をコーディングし、それをコンパイルし、少しテストし、コミットし、完了します。ゲームテスターが残りを処理します。

DVCSはインターネットと非常に複雑なプロジェクトのために作られています。 SVNは、小規模で短期間の厳しいチームプロジェクト用です。 SVNから多くのことを学ぶ必要はありません。ほとんどの場合、それはダムの差分を持つFTPです。

4
jokoon

以下は、私がまだSVNにとどまっている2つの理由です。

  1. 学習曲線。 SVNは、セットアップ(サーバーまたはクライアントも)、使いやすさ、およびコマンドでさえ、Gitよりも簡単です。
  2. Subversion EdgeVisualSVNberSVN などのより良いサーバーパッケージ.
2
Cheung

現在、バージョン管理には2つの主要な傾向があります。 配布と統合

Gitは分散化に優れています。

SVNには、SVNと統合する多くのツールが組み込まれています。修正をチェックインするときに、チェックインコメントにバグ番号を記載するようにSVNサーバーを設定するのが一般的です。バグ番号は自動的に設定されますが、「テスト中」の状態になり、割り当てられたテスターに​​、それを見ろ。次に、リリースにタグを付けて、このリリースで修正されたすべてのバグのリストを取得できます。

SVNでこれを行うツールは成熟しており、毎日使用されています。

1
Sean McMillan