1. ホーム
  2. svn

[解決済み] なぜGitはSubversionよりも優れているのですか?

2022-03-23 09:31:57

質問

今まで使っていた サブバージョン を使用してから、数年間 ソースセーフ 私はSubversionが大好きなんです。 との組み合わせは トータスSVN これ以上のものはないと思っています。

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

Git は Subversion をどのように改良したのですか?

どのように解決するのですか?

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

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

Subversionの場合、次のような問題があります。SVNリポジトリが届かない場所にある場合(社内で、しかも今はインターネットがない)、コミットすることができない。もし、コードのコピーを取りたいなら、文字通りコピー&ペーストする必要があります。

Gitでは、このような問題はありません。ローカルのコピーがリポジトリとなり、そこにコミットすることで、ソース・コントロールのあらゆる利点を得ることができるのです。メイン・リポジトリへの接続を回復したら、それに対してコミットすることができます。

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

Git は、「新しくて、ピカピカで、クールな」もののように見えます。決して悪いものではありませんが(結局のところ、LinusがLinuxカーネル開発のために書いたのには理由があるのです)、多くの人が、なぜそれが良いのかを実際に知ることなく、ただ新しいから、Linus Torvaldsが書いたからという理由だけでquot; Distributed Source Control" に飛び乗っていると私は感じています。

Subversionにも問題はありますが、Git、Mercurial、CVS、TFS、その他にもあります。

編集する この回答はもう1年前のものですが、いまだに多くのアップヴォートを生んでいるので、もう少し説明を加えようと思っています。この文章を書いてから一年間で、Gitは多くの勢いと支持を得ました。特に、GitHubのようなサイトが本当に普及したときからです。私は現在、GitとSubversionの両方を使用していますが、個人的な洞察をいくつか紹介したいと思います。

まず、分散型の作業をする場合、最初はGitが本当に分かりにくいです。特に、SVN のシンプルな "svnadmin create" に比べて、Git の "git init" は --bare と --shared というパラメータを取ることができ、これが集中リポジトリのセットアップに "proper" な方法のように思われるのですが、リモートとは何か、初期リポジトリを適切にセットアップする方法、という二つの質問が最初の段階で出てきます。これには理由があるのですが、複雑さが増してしまいます。checkout"コマンドのドキュメントは、乗り換えをする人にとって非常にわかりにくいものです - "正しい方法は "git clone" であり、一方 "git checkout" はブランチを切り替えるようです。

Git は、分散型であるときに本当に輝きます。私は自宅にサーバーを置き、外出先にはラップトップを置いていますが、SVNはここではうまく動きません。SVNでは、リポジトリに接続していない場合、ローカルのソースコントロールができません(はい、SVKやリポジトリをコピーする方法については知っています)。Gitでは、とにかくそれがデフォルトのモードです。git commit はローカルにコミットしますが、git push origin master は master ブランチをリモートの "origin" というディレクトリにプッシュします。

上記で述べたように Gitは複雑さを増します。リポジトリを作成する2つのモード、チェックアウトとクローン、コミットとプッシュ...。どのコマンドがローカルで動作し、どのコマンドがサーバーで動作するかを知っておく必要があります(多くの人はまだ中央の "master-repository" を好むと思われます)。

また、少なくともWindowsでは、ツールはまだ不十分です。Visual StudioのAddInもありますが、私はいまだにgit bashとmsysgitを使っています。

SVNには、習得が非常に簡単という利点があります。リポジトリがあり、それに対するすべての変更があり、作成、コミット、チェックアウトの方法を知っていれば、すぐに実行でき、後でブランチやアップデートなどのものをピックアップすることができます。

Gitには、開発者が常にマスター・リポジトリに接続されていない場合に、非常に適しているという利点があります。また、SVNよりもはるかに高速です。そして、私が聞いたところでは、ブランチとマージのサポートはずっと優れています(これがGitが書かれた理由の核心なので、期待されるところではあります)。

これは、Gitがオープン・ソース・プロジェクトに完璧に適合しているため、インターネット上でこれほどまでに話題を集めている理由でもあります。フォークして、自分のフォークに変更をコミットし、それから元のプロジェクトのメンテナに変更を取り込むよう依頼すればいいのです。Gitを使えば、これがうまくいくのです。本当に、Githubで試してみてください。魔法のようです。

また、Git-SVNブリッジもありますね。中央のリポジトリは Subversion ですが、開発者はローカルで Git を使って作業し、ブリッジがその変更を SVN にプッシュしています。

しかし、このように長くなっても、私は自分の核となるメッセージを持ち続けています。Gitが良いとか悪いとかではなく、ただ違うだけなのです。もしあなたが、quot;Offline Source Control"を必要とし、それを学ぶために余分な時間を費やす意志があるならば、それは素晴らしいものです。しかし、厳密に集中管理されたソース・コントロールを持っていたり、同僚が興味を示さないためにソース・コントロールを導入するのに苦労しているなら、SVNのシンプルさと優れたツール(少なくともWindowsにおいて)が輝きを放ちます。