Git が Subversion より優れているのはなぜですか? 質問する

Git が Subversion より優れているのはなぜですか? 質問する

私は使っています転覆数年間使用した後ソースセーフ私はSubversionが大好きです。トータスSVN、これ以上良くなる方法は本当に想像できません。

しかし、Subversionには問題があり、次のような新しいタイプの分散バージョン管理システムに移行すべきだと主張する開発者が増えています。ギット

Git は Subversion をどのように改善したのでしょうか?

ベストアンサー1

Git は Subversion より優れているわけではありません。しかし、劣っているわけでもありません。違うのです。

重要な違いは、分散化されていることです。あなたが外出中の開発者で、ラップトップで開発していて、3 時間前に戻れるようにソース管理をしたいと想像してください。

Subversion では、次の問題が発生します。SVN リポジトリがアクセスできない場所 (社内にあり、現時点ではインターネットに接続していない) にある場合、コミットできません。コードのコピーを作成する場合は、文字通りコピー/貼り付けを行う必要があります。

Git では、この問題は発生しません。ローカル コピーはリポジトリであり、これにコミットしてソース管理のすべての利点を享受できます。メイン リポジトリへの接続が回復したら、それに対してコミットできます。

これは一見良さそうですが、このアプローチには複雑さが加わることを覚えておいてください。

Git は「新しくて、輝かしく、クールな」もののようです。決して悪いものではありません (結局のところ、Linus が Linux カーネル開発のためにこれを書いたのには理由があります)。しかし、多くの人が、それが新しいことと Linus Torvalds によって書かれたという理由だけで、なぜそれが優れているのか、あるいは優れているのかどうか実際に知らずに、「分散ソース管理」の流れに乗ろうとしていると感じます。

Subversion には問題がありますが、Git、Mercurial、CVS、TFS などにも同様の問題があります。

編集:この回答は 1 年前のものですが、依然として多くの賛成票を獲得しているので、もう少し説明を追加しようと思いました。この記事を書いてから 1 年の間に、Git は大きな勢いと支持を獲得しました。特に GitHub などのサイトが本格的に普及して以来です。私は最近 Git と Subversion の両方を使っていますが、個人的な見解をお伝えしたいと思います。

まず第一に、分散して作業する場合、Git は最初は本当に混乱する可能性があります。リモートとは何か? および初期リポジトリを適切に設定するには? は、特に SVN の単純な「svnadmin create」と比較すると、最初に出てくる 2 つの質問です。Git の「git init」は、--bare および --shared パラメータを使用できますが、これは集中リポジトリを設定するための「適切な」方法のようです。これには理由がありますが、複雑さが増します。「checkout」コマンドのドキュメントは、切り替える人にとって非常にわかりにくいものです。「適切な」方法は「git clone」のようですが、「git checkout」はブランチを切り替えるようです。

Git は分散化されている場合に本当に効果を発揮します。私は自宅にサーバーがあり、外出先にラップトップを持っていますが、SVN はここではうまく機能しません。SVN では、リポジトリに接続していないとローカル ソース コントロールを使用できません (はい、SVK やリポジトリをコピーする方法については知っています)。Git では、それがデフォルト モードです。ただし、これは追加のコマンドです (git commit はローカルにコミットしますが、git push origin master はマスター ブランチを「origin」という名前のリモートにプッシュします)。

上で述べたように、Git は複雑さを増します。リポジトリを作成する 2 つのモード、チェックアウトとクローン、コミットとプッシュ... どのコマンドがローカルで機能し、どのコマンドが「サーバー」で機能するかを知っておく必要があります (ほとんどの人は依然として中央の「マスター リポジトリ」を好むと思います)。

また、少なくとも Windows では、ツールはまだ不十分です。確かに Visual Studio アドインはありますが、私はまだ msysgit で git bash を使用しています。

SVN には、習得がはるかに簡単であるという利点があります。リポジトリがあり、すべての変更はリポジトリに対して行われます。作成、コミット、チェックアウトの方法を知っていれば、準備は完了です。後でブランチや更新などの作業を開始できます。

Git の利点は、一部の開発者が常にマスター リポジトリに接続していない場合に非常に適していることです。また、SVN よりもはるかに高速です。また、聞いたところによると、ブランチとマージのサポートがはるかに優れているそうです (これが Git が作成された主な理由であるため、当然のことです)。

これは、Git がインターネット上でこれほど話題になっている理由も説明しています。Git はオープンソース プロジェクトに最適です。単にフォークして、自分のフォークに変更をコミットし、元のプロジェクト管理者に変更をプルするように依頼するだけです。Git では、これがうまく機能します。実際に、Github で試してみてください。魔法のようです。

また、Git-SVN ブリッジも確認されています。中央リポジトリは Subversion リポジトリですが、開発者はローカルで Git を使用して作業し、ブリッジによって変更が SVN にプッシュされます。

しかし、この長い追加にもかかわらず、私は依然として自分の核心的なメッセージに固執しています。Git は優れているわけでも劣っているわけでもなく、単に異なるだけです。「オフライン ソース管理」が必要で、それを学ぶために余分な時間を費やす覚悟があるなら、それは素晴らしいことです。しかし、厳密に集中化されたソース管理がある場合や、同僚が興味を示さないためにそもそもソース管理を導入するのに苦労している場合は、SVN のシンプルさと優れたツール (少なくとも Windows では) が光ります。

おすすめ記事