[解決済み] なぜGitはSubversionよりも優れているのですか?
質問
今まで使っていた サブバージョン を使用してから、数年間 ソースセーフ 私は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において)が輝きを放ちます。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 時折 svn: E170013: URL 'https://svn......' のリポジトリに接続できません svn: E730054: コンテキストの実行エラー
-
[解決済み] TortoiseSVNでレポに接続できない
-
[解決済み] ブランチをトランクにマージする場合、「svn merge --reintegrate」と「svn merge without reintegrate」はどう違うのですか?
-
[解決済み] Subversionで既にコミットされたログメッセージを編集するには?
-
[解決済み】gitはどのようにファイルを保存するのですか?
-
[解決済み] Subversionが管理するファイル名の@文字をエスケープするには?
-
[解決済み] SVN の pre-revprop-change フックとは何ですか、また、どのように作成するのですか?
-
[解決済み] svnログに特定のユーザのコミットを表示するには?
-
[解決済み] 作業コピーのバージョン管理されていないファイルやフォルダーをすべて削除するにはどうすればよいですか?
-
[解決済み] ファイルを削除せずにバージョン管理から削除するには?