質問
私は使ってきました 転覆 数年間と使用後 ソースセーフ, 私はSubversionが大好きです。と組み合わせ TortoiseSVN, 、どうしたらこれ以上良くなるのか全く想像できません。
しかし、Subversion には問題があるため、次のような新しい種類の分散バージョン管理システムに移行する必要があると主張する開発者が増えています。 ギット.
Git は Subversion をどのように改善しますか?
解決
Git が Subversion より優れているわけではありません。しかし、それも悪くありません。違います。
主な違いは、分散化されていることです。あなたが出張中の開発者で、ラップトップで開発しており、3 時間前に戻ることができるようにソース管理をしたいと想像してください。
Subversion には次の問題があります。SVN リポジトリは、アクセスできない場所 (会社内で、現時点ではインターネットに接続されていない場合) にある可能性があり、コミットできません。コードのコピーを作成したい場合は、文字通りコピー/ペーストする必要があります。
Git を使用すると、この問題は発生しません。ローカル コピーはリポジトリであり、それにコミットしてソース管理のすべての利点を得ることができます。メイン リポジトリへの接続を回復したら、それに対してコミットできるようになります。
これは一見良いように見えますが、このアプローチには複雑さが増すことに注意してください。
Git は「新しくて、ピカピカで、クール」なもののようです。それは決して悪いことではありません (結局のところ、Linus が Linux カーネル開発のためにこれを書いたのには理由があります) が、実際には何もせずに、新しいもので Linus Torvalds によって書かれたというだけの理由で「分散ソース管理」に飛びつく人が多いように感じます。その理由/それがより良いかどうかを知る。
Subversion には問題がありますが、Git、Mercurial、CVS、TFS などにも問題があります。
編集: したがって、この回答は 1 年前のものですが、依然として多くの賛成票を生成しているため、さらに説明を追加しようと思いました。この記事を書いてから 1 年で、特に GitHub のようなサイトが本格的に普及して以来、Git は多くの勢いとサポートを獲得しました。私は最近 Git と Subversion の両方を使用しているので、個人的な洞察を共有したいと思います。
まず、Git は分散化して作業する場合、最初は非常に混乱する可能性があります。リモコンとは何ですか?初期リポジトリを適切に設定するにはどうすればよいですか?これは最初に出てくる 2 つの質問で、特に SVN の単純な「svnadmin create」と比較すると、Git の「git init」はパラメータ --bare と --shared を受け取ることができ、これが集中型のセットアップをセットアップする「適切な」方法であると思われます。リポジトリ。これには理由がありますが、複雑さが増します。「checkout」コマンドのドキュメントは、切り替えを行う人にとって非常にわかりにくいです。「適切な」方法は「git clone」のようですが、「git checkout」はブランチを切り替えるようです。
Git は分散化されたときにこそ真価を発揮します。私は自宅にサーバーを持ち、外出先ではラップトップを持っていますが、SVN はここではうまく機能しません。SVN では、リポジトリに接続していないとローカル ソース管理を行うことができません (はい、SVK やリポジトリをコピーする方法については知っています)。Git では、とにかくそれがデフォルトのモードです。ただし、これは追加のコマンドです (git commit はローカルでコミットしますが、git Push Origin master はマスター ブランチを「origin」という名前のリモートにプッシュします)。
上で述べたように:Git を使用すると複雑さが増します。リポジトリを作成する 2 つのモード (チェックアウトとチェックアウト)クローン、コミット vs.押す...どのコマンドがローカルで機能し、どのコマンドが「サーバー」で機能するかを知る必要があります (ほとんどの人は依然として中央の「マスター リポジトリ」を好むと思います)。
また、少なくとも Windows ではツールがまだ不十分です。はい、Visual Studio アドインはありますが、私は依然として git bash と msysgit を使用しています。
SVN には、学習がはるかに簡単であるという利点があります。リポジトリがあり、そこに向けたすべての変更があり、作成、コミット、チェックアウトの方法を知っていれば、準備は完了し、分岐や更新などの作業を行うことができます。後で。
Git には、一部の開発者が常にマスター リポジトリに接続しているわけではない場合に非常に適しているという利点があります。また、SVN よりもはるかに高速です。そして、私が聞いたところによると、分岐とマージのサポートははるかに優れています (これが作成された主な理由であるため、これは当然のことです)。
これは、Git がオープンソース プロジェクトに最適であるため、インターネット上でこれほど話題になっている理由も説明しています。それをフォークし、変更を自分のフォークにコミットし、元のプロジェクトのメンテナに変更をプルするように依頼するだけです。Git を使用すると、これでうまくいきます。本当に、Github で試してみてください。これは魔法です。
Git-SVN ブリッジも表示されます。中央リポジトリは Subversion リポジトリですが、開発者はローカルで Git を使用して作業し、ブリッジがその変更を SVN にプッシュします。
しかし、この長い追加にもかかわらず、私は依然として私の核心的なメッセージを支持しています。Git が優れているとか劣っているというわけではなく、ただ違うだけです。「オフライン ソース管理」が必要で、それを学習するために余分な時間を費やす意欲があるのであれば、それは素晴らしいことです。しかし、厳密に一元管理されたソース コントロールを使用している場合、または同僚が興味を示さないため、そもそもソース コントロールの導入に苦労している場合には、SVN のシンプルさと優れたツール (少なくとも Windows では) が役に立ちます。
他のヒント
Git を使用すると、誰もが独自のリポジトリを持っているため、実質的に何でもオフラインで行うことができます。
ブランチの作成とブランチ間のマージは非常に簡単です。
プロジェクトに対するコミット権限を持っていない場合でも、オンラインに独自のリポジトリを持ち、パッチの「プッシュ リクエスト」を公開することができます。あなたのパッチを気に入った人は誰でも、公式メンテナを含め、自分のプロジェクトにパッチを組み込むことができます。
プロジェクトをフォークして変更し、HEAD ブランチからのバグ修正をマージし続けることは簡単です。
Git は Linux カーネル開発者のために機能します。これは、非常に高速であり (そうである必要があります)、数千人の寄稿者に対応できることを意味します。Git は使用するスペースも少なくなります (Mozilla リポジトリのスペースは最大 30 分の 1)。
Git は非常に柔軟で、TIMTOWTDI に優れています (方法は複数あります)。任意のワークフローを使用でき、Git はそれをサポートします。
最後に、 GitHub, Git リポジトリをホストするのに最適なサイトです。
Git の欠点:
- Git にはより多くの概念とコマンドがあるため、学習するのははるかに困難です。
- Subversion のようなリビジョンにはバージョン番号がありません
- 多くの Git コマンドは難解で、エラー メッセージは非常にユーザーフレンドリーではありません
- 優れた GUI (素晴らしいものなど) が欠けています。 TortoiseSVN)
他の回答では、Git の中核的な機能 (これは素晴らしいものです) をうまく説明しています。でも、それもたくさんあるよ 少し Git の動作を改善し、私の生活をより健全に保つ方法を教えてください。以下に小さなことをいくつか示します。
- Git には「clean」コマンドがあります。ディスク上に余分なファイルをダンプする頻度を考慮すると、SVN にはこのコマンドがどうしても必要です。
- Git には「bisect」コマンドがあります。いいね。
- SVN は、すべての単一フォルダーに .svn ディレクトリを作成します (Git は、.svn ディレクトリのみを作成します) 1つ .git ディレクトリ)。作成するすべてのスクリプトと実行するすべての grep は、これらの .svn ディレクトリを無視するように作成する必要があります。ファイルの正常なコピーを取得するためだけに、コマンド全体 (「svn export」) も必要です。
- SVN では、各ファイルとフォルダーは異なるリビジョンまたはブランチから取得できます。最初は、この自由があるのがいいように思えます。しかし、これが実際に意味するのは、ローカル チェックアウトが完全に台無しになる方法は 100 万通りあるということです。(たとえば、「svn switch」が途中で失敗した場合、またはコマンドを間違って入力した場合)。そして最悪の部分は次のとおりです。ファイルの一部が 1 つの場所から送信され、一部のファイルが別の場所から送信されるという状況に陥った場合、「svn status」によってすべてが正常であることがわかります。何がどのように奇妙なのかを発見するには、各ファイル/ディレクトリに対して「svn info」を実行する必要があります。「git status」が正常であることを示している場合は、本当に正常であると信頼できます。
- 何かを移動または削除するたびに、SVN に通知する必要があります。Git だけで解決してくれます。
- Git ではセマンティクスを無視する方が簡単です。パターン (*.pyc など) を無視すると、次の期間は無視されます。 全て サブディレクトリ。(ただし、本当に 1 つのディレクトリだけを無視したい場合は、無視することができます)。SVN では、すべてのサブディレクトリにわたってパターンを無視する簡単な方法はないようです。
- 無視ファイルに関する別の項目。Git では、(ファイル .git/info/exclude を使用して) 「プライベート」無視設定を行うことができ、他の人には影響を与えません。
"Git が X よりも優れている理由「」では、Git と他の SCM のさまざまな長所と短所を概説しています。
簡単に言うと:
- Git トラック ファイルではなくコンテンツ
- 枝が軽い そして合併するのは 簡単, つまり、 本当に簡単.
- それは分散されており、基本的にすべてのリポジトリがブランチです。私の意見では、Subversion を使用するよりも、同時かつ共同で開発する方がはるかに簡単です。また、 オフライン 開発可能。
- それ ワークフローを強制しません, で見られるように、 上記リンク先のウェブサイト, Git で実現できるワークフローは数多くあります。Subversion スタイルのワークフローは簡単に模倣できます。
- Git リポジトリはたくさんあります ファイルサイズが小さくなる Subversion リポジトリよりも。数十の「.svn」リポジトリとは対照的に、「.git」ディレクトリは 1 つだけです (Subversion 1.7 以降に注意してください) 現在は単一のディレクトリを使用しています Git のように。)
- の 演出 このエリアは素晴らしいもので、コミットする変更を確認したり、部分的な変更をコミットしたり、その他さまざまな作業を行うことができます。
- 隠しておく これは、「混沌とした」開発を行う場合、または別の作業 (別のブランチで) を行っている間に単にバグを修正したい場合に非常に役立ちます。
- あなたはできる 歴史を書き換える, 、パッチ セットを準備し、間違いを修正するのに最適です (前に あなたがコミットを公開します)
- …そして 多く もっと。
いくつかの欠点があります。
- これに対応する優れた GUI はまだ多くありません。これは新しく、Subversion はかなり前から存在しているため、開発中のインターフェイスがいくつかあるため、これは当然のことです。良いものとしては、次のものがあります。 トータスGit そして Mac 用 GitHub.
リポジトリの部分的なチェックアウト/クローンは現時点では不可能です (開発中であると読みました)。ただし、サブモジュールのサポートはあります。Git 1.7 以降はスパース チェックアウトをサポートします.- (約1年前)私はそうではありませんでしたが、学ぶのはさらに難しいかもしれません。Git は最近インターフェースが改良され、非常に使いやすくなりました。
最も単純な使用法では、Subversion と Git はほぼ同じです。以下の間には大きな違いはありません。
svn checkout svn://foo.com/bar bar
cd bar
# edit
svn commit -m "foo"
そして
git clone git@github.com:foo/bar.git
cd bar
# edit
git commit -a -m "foo"
git push
Git が本当に威力を発揮するのは、ブランチを作成し、他のユーザーと連携することです。
さて、配布されています。ベンチマークによると、かなり高速であり (分散という性質を考慮すると、差分やログなどの操作はすべてローカルなので、もちろんこの場合は驚くほど高速です)、作業フォルダーが小さくなります (これにはまだ驚かされます)。
Subversion やその他のクライアント/サーバー リビジョン管理システムで作業しているときは、基本的に次の方法でマシン上に作業コピーを作成します。 チェックアウト 改訂。これは、リポジトリがどのようになるかを示すスナップショットを表します。更新によって作業コピーを更新し、コミットによってリポジトリを更新します。
分散バージョン管理では、スナップショットではなく、コードベース全体が必要になります。3 か月前のバージョンとの差分を作成したいですか?問題ありません。3 か月前のバージョンがまだコンピュータ上にあります。これは、処理が大幅に高速になることを意味するだけでなく、中央サーバーから切断されていても、使い慣れた操作の多くを引き続き実行できることを意味します。言い換えれば、特定のリビジョンのスナップショットだけではなく、コードベース全体が得られます。
Git はハードドライブ上で多くのスペースを占有すると思われるかもしれませんが、私が見たいくつかのベンチマークによると、実際にはそれほどスペースを必要としません。どうやってかは聞かないでください。つまり、これは Linus によって構築されたもので、彼はファイルシステムについてある程度の知識があると思います。
DVCS について私が気に入っている主な点は次のとおりです。
- 壊れたことを犯すこともできます。公開するまで他の人は見ないので問題ありません。公開時間はコミット時間とは異なります。
- このため、より頻繁にコミットできるようになります。
- 完全な機能を統合できます。この機能には独自のブランチがあります。このブランチのすべてのコミットはこの機能に関連します。CVCS を使用してこれを行うこともできますが、DVCS がデフォルトです。
- 履歴を検索できます(いつ機能が変更されたかを確認できます)
- 誰かがメイン リポジトリを台無しにした場合は、プルを元に戻すことができます。エラーを修正する必要はありません。マージをクリアするだけです。
- 任意のディレクトリにソース管理が必要な場合は、次のようにします。git init 。コミットしたり、変更を元に戻したりすることもできます...
- 速いです (Windows 上でも)
比較的大きなプロジェクトの主な理由は、ポイント 3 によって生み出されるコミュニケーションの改善です。他にも素晴らしいボーナスがあります。
面白いのは次のとおりです。私はプロジェクトを Subversion リポジトリでホストしていますが、Git Clone コマンドを介してアクセスします。
読んでください Google Code プロジェクトで Git を使用して開発する
GoogleコードはネイティブにSubversionを話しますが、開発中にGitを簡単に使用できます。「git svn」を検索すると、このプラクティスは広く普及していることが示唆されており、私たちもあなたがそれを試すことをお勧めします。
Svn リポジトリで Git を使用すると、次のような利点があります。
- 働けます 配布された いくつかのマシンで、コミットしてそれらを引き離します
- 私は持っています 中央
backup/public
他の人がチェックアウトできる svn リポジトリ - そして、彼らは自分自身のために Git を自由に使用できます
ここでの答えはすべてプログラマ中心の予想どおりのものですが、会社がソース コードの外部でリビジョン管理を使用している場合はどうなるでしょうか?バージョン管理の恩恵を受けるソースコードではないドキュメントはたくさんありますが、別の CMS ではなくコードの近くに置く必要があります。ほとんどのプログラマーは孤立して仕事をしているわけではありません。私たちはチームの一員として企業で働いています。
これを念頭に置いて、クライアント ツールとトレーニングの両方において、Subversion と git の使いやすさを比較してください。というシナリオが見えない どれでも 分散リビジョン管理システムは、プログラマ以外の人にとっても使いやすく、説明しやすくなります。私は間違いであることが証明されれば嬉しいです。そうすれば git を評価できるようになり、実際にプログラマーではないバージョン管理を必要とする人々に git が受け入れられるという希望が持てるからです。
それでも、なぜ集中型リビジョン管理システムから分散型リビジョン管理システムに移行する必要があるのかと経営陣に尋ねられたら、正直に答えるのは難しいでしょう。なぜなら、それは必要ないからです。
免責事項:私は早い段階 (v0.29 あたり) に Subversion に興味を持ったので、明らかに偏見がありますが、それ以来私が働いている企業は、私が Subversion の使用を奨励しサポートしてきたため、私の熱意から恩恵を受けています。これはほとんどのソフトウェア会社で起こっていることだと思います。非常に多くのプログラマーが git の流行に便乗している中、ソース コードの外でバージョン管理を使用するメリットを逃す企業がどれだけあるでしょうか?異なるチームに個別のシステムを使用している場合でも、メンテナンス、ハードウェア、トレーニングの要件が増加する一方で、(統合された) 問題追跡の統合などの利点の一部を逃すことになります。
SubVersion に関して私がイライラする点の 1 つは、SubVersion はプロジェクトの各ディレクトリに独自のフォルダーを置くのに対し、git はルート ディレクトリに 1 つしか置かないことです。そうではありません それ それは大きなことですが、そのような小さなことが積み重なっていきます。
もちろん、SubVersion には Tortoise があり、[通常は] 非常に優れています。
David Richards の Subversion / GIT に関する WANdisco ブログ
GIT の出現により、GIT 以外のものはくだらないものだと考える DVCS 原理主義者の一種である「Gitterons」が導入されました。ギッテロン家は、ソフトウェア エンジニアリングが自分たちの島で行われていると考えているようで、ほとんどの組織が上級ソフトウェア エンジニアを独占的に雇用しているわけではないことを忘れがちです。それは問題ありませんが、市場の残りの部分はそう考えていません。私は喜んでそれを証明します。GIT は、ざっと見たところ市場の 3% 未満しかありませんでしたが、Subversion はユーザー数 500 万人程度で、市場全体の約半分を占めています。
私たちが見た問題は、ギッテロンが Subversion に対して (安っぽい) 射撃を行っていたことでした。「Subversion はとても [遅い / 安っぽい / 制限的 / いい匂いがしない / 私を面白い目で見る] けど、今は GIT を持っていて、[生活のすべてがうまくいっている / 妻が妊娠した / 後にガールフレンドができた] のようなツイート30 年間の努力/ブラックジャック テーブルで 6 回連続で勝利しました。イメージが分かりますね。
Git を使用すると、分岐とマージも非常に簡単になります。Subversion 1.5 ではマージ トラッキングが追加されたばかりですが、Git の方がまだ優れています。Git を使用すると、ブランチングが非常に高速かつ安価になります。これにより、新しい機能ごとにブランチを作成することがより現実的になります。ああ、Git リポジトリは、Subversion と比較してストレージ スペースを非常に効率的に使用できます。
重要なのは使いやすさ/何かをするために必要な手順です。
PC/ラップトップで単一のプロジェクトを開発する場合は、設定と使用がはるかに簡単な git の方が適しています。サーバーは必要ありません。また、マージ時にリポジトリ URL を入力し続ける必要もありません。
2 人だけの場合は、お互いに押したり引いたりするだけで済むので、git のほうが簡単だと思います。
ただし、それを超えたら、Subversion を選択します。その時点では、「専用」サーバーまたは場所をセットアップする必要があるからです。
これは、SVN と同様に git でも実行できますが、中央サーバーと同期するために追加の手順を実行する必要があるため、git の利点が上回ります。SVN ではコミットするだけです。git では、git commit してから git Push を行う必要があります。追加の手順は面倒になります。なぜなら、あまりにも多くの作業を行うことになるからです。
SVN には、より優れた GUI ツールという利点もありますが、Git エコシステムが急速に追いついているようなので、長期的にはこれについて心配する必要はないと思います。
一般に、Git と DVCS は、誰もが独自のブランチを持っているため、互いに独立して多くのコーディングを行う開発者にとっては最適です。ただし、他の人からの変更が必要な場合は、その人がローカル リポジトリにコミットし、その変更セットをあなたにプッシュするか、あなたが彼女からプルする必要があります。
私自身の推論では、集中リリースなどを行う場合、DVCS によって QA やリリース管理が困難になると考えています。誰かが他の全員のリポジトリからプッシュ/プルを実行し、以前の最初のコミット時に解決されていた競合を解決し、ビルドを実行して、他のすべての開発者にリポジトリを再同期させる責任を負わなければなりません。
もちろん、これらすべては人間のプロセスで対処できます。DVCS は、新たな利便性を提供するために、集中バージョン管理によって修正されていたものを壊しただけです。
私が Git を気に入っているのは、中規模から大規模なチームの開発者間のコミュニケーションに実際に役立つからです。分散バージョン管理システムとして、プッシュ/プル システムを通じて、開発者が単一のプロジェクトに取り組む大規模な開発者プールを管理するのに役立つソース コード エコシステムを作成するのに役立ちます。
たとえば、5 人の開発者を信頼し、そのリポジトリからのみコードをプルするとします。これらの開発者はそれぞれ、コードをプルする独自の信頼ネットワークを持っています。したがって、開発は開発者の信頼構造に基づいており、コードの責任は開発コミュニティ間で共有されます。
もちろん、ここの他の回答で言及されている他の利点もあります。
いくつかの回答でこれらについてほのめかされていますが、2 つの点を明確にしたいと思います。
1) 選択的コミットを実行する機能 (たとえば、 git add --patch
)。作業ディレクトリに同じ論理変更の一部ではない複数の変更が含まれている場合、Git を使用すると、変更の一部のみを含むコミットを非常に簡単に作成できます。Subversion ではそれが困難です。
2) 変更を公開せずにコミットする機能。Subversion では、コミットはすぐに公開されるため、取り消しできません。これにより、開発者の「早期にコミット、頻繁にコミット」する能力が大幅に制限されます。
Git は単なる VCS ではありません。パッチを開発するためのツールでもあります。Subversion は単なる VCS です。
Subversionは大丈夫だと思います...統合を開始するまで。何か複雑なことをしたり…または、Subversion が複雑だと考えることを実行します (クエリを実行して、どのブランチが特定のファイルを混乱させたか、どこに変更があったかを確認するなど) 実は 由来、コピー&ペーストの検出など)...
私は勝利の答えに同意しません。 主な利点 GIT はオフラインで作業できます。確かに便利ですが、私のユースケースにとってはおまけのようなものです。SVK はオフラインでも動作しますが、どちらに学習時間を投資するかは私にとって疑問の余地はありません)。
それは信じられないほど強力で高速であり、概念に慣れた後でも非常に便利です (はい、その意味では:使いやすい)。
マージのストーリーの詳細については、これを参照してください。git-svn (または類似のもの) を「ただ」使用して SVN マージを支援しますか?
中央サーバーと絶えず通信する必要がないという事実のおかげで、ほとんどすべてのコマンドは 1 秒未満で実行されます (明らかに git プッシュ/プル/フェッチは SSH 接続を初期化する必要があるため、単純に遅くなります)。分岐ははるかに簡単です (分岐するのは 1 つの単純なコマンド、マージするのは 1 つの単純なコマンドです)。
中央リポジトリを汚すことなく、Git でソース コードのローカル ブランチを管理できるのがとても気に入っています。多くの場合、これを行うために、Subversion サーバーからコードをチェックアウトし、ローカル Git リポジトリを実行します。また、Git リポジトリを初期化しても、煩わしい .svn フォルダーが大量に存在してファイル システムが汚染されないことも優れています。
Windows ツールのサポートに関しては、TortoiseGit は基本を非常にうまく処理しますが、ログを表示したくない場合は、やはりコマンド ラインを好みます。Tortoise{Git|SVN} がコミット ログを読み取るときに役立つ方法がとても気に入っています。
これは間違った質問です。git の欠点に焦点を当てて、少なくとも一部のユースケースではなぜ Subversion の方が表面上優れているのかについて議論を組み立てるのは非常に簡単です。git がもともと低レベルのバージョン管理構築セットとして設計され、バロック的な Linux 開発者指向のインターフェイスを備えているという事実により、聖戦が勢いを増し、正当性が認識されることが容易になります。Git の支持者は何百万ものワークフローの利点を主張していますが、SVN 担当者はそれらは不要だと主張しています。間もなく、議論全体が集中型か分散型かという枠組みになり、これがエンタープライズ SVN ツール コミュニティの利益につながります。これらの企業は通常、エンタープライズにおける Subversion の優位性について最も説得力のある記事を発表しますが、自社製品の長期的な成功は git の安全性の認識と svn のエンタープライズ対応に依存しています。
しかし、ここに問題があります。 Subversion はアーキテクチャ上の行き止まりです.
git を利用して一元化された Subversion の代替物を非常に簡単に構築できるのに対し、svn は 2 倍以上長く存在しているにもかかわらず、基本的なマージ追跡さえも git と同じように動作させることができませんでした。この基本的な理由の 1 つは、ブランチをディレクトリと同じにするという設計上の決定です。最初になぜこのようになったのかはわかりませんが、確かに部分的なチェックアウトが非常に簡単になります。残念ながら、履歴を適切に追跡することもできなくなります。通常のディレクトリからブランチを分離するには、明らかに Subversion リポジトリのレイアウト規則を使用する必要があり、svn はいくつかのヒューリスティックを使用して日常のユースケースで機能するようにします。しかし、これはすべて、非常に貧弱で制限的な低レベルの設計上の決定を紙に貼り付けているだけです。(ディレクトリごとの差分ではなく) リポジトリごとの差分を実行できることは、バージョン管理システムにとって基本的かつ重要な機能であり、内部が大幅に簡素化され、その上にスマートで便利な機能を構築できるようになります。Subversion の拡張に費やされた努力の量を見れば、マージ解決などの基本的な操作の点で、現在の最新の VCS からどれだけ遅れているかがわかります。
ここで、当面は Subversion で十分だとまだ信じている人に向けて、私の心からの不可知論的なアドバイスをお伝えします。
Subversion は、RCS や CVS の失敗から学んだ新しい種類の VCS に決して追いつくことはありません。リポジトリ モデルを根本から再構築しない限り、技術的には不可能ですが、そうなると実際には svn ではなくなりますよね。最新の VCS の機能を自分が理解していないとどれほど考えていても、無知だからといって Subversion の落とし穴から身を守ることはできません。その多くは、他のシステムでは不可能または簡単に解決できる状況です。
svn の場合のように、ソリューションの技術的な劣位がこれほど明確になることは非常にまれです。もちろん、私は win-vs-linux や emacs-vs-vi についてそのような意見を述べることは決してありませんが、この場合はそうです。明確であり、ソース管理は開発者の武器庫における非常に基本的なツールであるため、それを明確に述べておく必要があると思います。組織上の理由で svn を使用する必要があるかどうかに関係なく、すべての svn ユーザーに、最新の VCS は大規模なオープンソース プロジェクトでのみ役立つという誤った信念を論理的に構築しないようにお願いします。開発作業の性質に関係なく、プログラマーであれば、Git、Mercurial、Darcs など、より適切に設計された VCS の使用方法を学べば、より有能なプログラマーになれます。
Subversion は非常に使いやすいです。ここ数年、問題が発生したり、何かが期待どおりに機能しないということは一度もありませんでした。また、優れた GUI ツールが数多くあり、SVN 統合のサポートも充実しています。
Git を使用すると、より柔軟な VCS が得られます。すべての変更をコミットするリモート リポジトリを使用する SVN と同じように使用できます。ただし、ほとんどオフラインで使用し、変更をリモート リポジトリに時々プッシュするだけということもできます。しかし、Git はより複雑で、学習曲線が急になります。初めて間違ったブランチにコミットしたり、間接的にブランチを作成したり、間違いに関する情報があまりないエラー メッセージが表示されたり、より良い情報を得るには Google で検索しなければならないことに気づきました。マーカー ($Id$) の置換などのいくつかの簡単なことは機能しませんが、GIT には独自のスクリプトをマージするための非常に柔軟なフィルタリングとフック メカニズムがあるため、必要なものすべてを取得できますが、より多くの時間とドキュメントを読む必要があります。 ;)
ローカル リポジトリを使用してほとんどオフラインで作業している場合、ローカル マシンで何かが失われた場合にバックアップがありません。SVN を使用すると、主にリモート リポジトリで作業することになりますが、同時に別のサーバー上のバックアップでもあります。Git も同様に動作しますが、SVN2 のようなものを導入するという Linus の主な目標はありませんでした。これは、Linux カーネル開発者と分散バージョン管理システムのニーズ向けに設計されました。
Git は SVN よりも優れていますか?一部のバージョン履歴とバックアップ メカニズムだけを必要とする開発者は、SVN を使用して快適に過ごすことができます。ブランチを頻繁に使用したり、より多くのバージョンを同時にテストしたり、ほとんどオフラインで作業したりする開発者は、Git の機能の恩恵を受けることができます。SVN にはない隠し機能など、作業を容易にする非常に便利な機能がいくつかあります。しかしその一方で、すべての人がすべての機能を必要とするわけではありません。だからSVNの死を見ることはできない。
Git には、より適切なドキュメントが必要であり、エラーレポートはもっと役立つ必要があります。また、既存の便利な GUI はほとんどありません。今回は、ほとんどの Git 機能をサポートする Linux 用 GUI (git-cola) が 1 つだけ見つかりました。Eclipse の統合は機能していますが、正式にはリリースされておらず、公式の更新サイトはありません (トランクから定期的にビルドされる外部更新サイトのみがあります) http://www.jgit.org/updates)したがって、最近GITを使用する最も好ましい方法はコマンドラインです。
エリック・シンク SourceGear の、分散バージョン管理システムと非分散バージョン管理システムの違いに関する一連の記事を執筆しました。彼は、最も一般的なバージョン管理システムの長所と短所を比較しています。とても興味深い読み物です。
記事は彼のブログで見つけることができます、 www.ericsink.com:
優れた Git GUI を探している人にとっては、 Syntevo SmartGit 良い解決策かもしれません。これはプロプライエタリですが非営利使用は無料で、Windows/Mac/Linux 上で動作し、ある種の git-svn ブリッジを使用した SVN もサポートしていると思います。
http://subversion.wandisco.com/component/content/article/1/40.html
開発者の間では、SVN とGit に関する議論はここしばらく激しくなっており、どちらが優れているかについては誰もが独自の見解を持っています。このことは、2010 年以降の Subversion に関するウェビナーでも質問の中で取り上げられました。
当社のオープンソース担当ディレクターであり、Subversion Corporation の社長である Hyrum Wright が、Subversion と Git、および他の分散バージョン管理システム (DVCS) の違いについて語ります。
彼はまた、Working Copy Next Generation (WC-NG) などの今後の Subversion の変更についても話しており、これにより多くの Git ユーザーが Subversion に戻ることになると考えています。
彼のビデオを見て、このブログにコメントするか、フォーラムに投稿してご意見をお聞かせください。登録は簡単でほんの少しで完了します。
Windows の Git は現在十分にサポートされています。
GitExtensions をチェックしてください = http://code.google.com/p/gitextensions/
および Windows Git エクスペリエンスを向上させるためのマニュアル。
私は最近 Git ランドに住んでおり、個人プロジェクトには Git ランドが気に入っていますが、差し迫った利点がない限り、スタッフに求められる考え方の変化を考慮すると、仕事のプロジェクトを Subversion から Git ランドに切り替えることはまだできません。さらに、社内で実行している最大のプロジェクトは、次のようなものに大きく依存しています。 SVN:外部 これまで見てきたことから、これは Git ではそれほどうまくシームレスに機能しません。
まず、同時バージョン管理は簡単に解決できる問題のように思えます。全然そんなことないよ。ともかく...
SVN は非常に直感的ではありません。Git はさらに悪いです。[皮肉な推測] これは、同時バージョン管理のような難しい問題を好む開発者が、優れた UI を作成することにあまり興味がないことが原因である可能性があります。[/皮肉な推測]
SVN 支持者は、分散バージョン管理システムは必要ないと考えています。 私もそう思いました。 しかし、今ではもっぱら Git を使用しているので、私はそう信じています。バージョン管理は、プロジェクトだけでなく、私とチーム/プロジェクトでも機能するようになりました。分岐が必要なときは分岐します。サーバー上に対応するブランチがあるブランチである場合もあれば、存在しないブランチである場合もあります。他のすべての利点については言うまでもありませんが、それについては勉強する必要があります (最新のバージョン管理システムである UI が難解で不条理に欠如していることも一因です)。
私が Subversion が Git よりも優れていると思う理由 (少なくとも私が取り組んでいるプロジェクトに関して) は、主にその使いやすさと、よりシンプルなワークフローによるものです。
http://www.databasesandlife.com/why-subversion-is-better-than-git/