SVNはGitよりも優れていますか?[閉まっている]


293

プログラマーツールをめぐる議論の大半は、個人的な選択(ユーザーによる)またはデザイン重視つまり特定のユースケースに応じたデザインの最適化(ツールビルダーによる)に留まることは間違いありません。テキストエディターはおそらく最も有名な例です-職場ではWindowsで動作し、自宅ではMacでHaskellでコードを作成するコーダー、クロスプラットフォームおよびコンパイラー統合を重視するため、TextMateではなくEmacsを選択します。

新しく導入された技術が、現存するオプションよりも明らかに優れていることはあまりありません。

これは実際、バージョン管理システム(VCS)、特に集中型 VCS(CVSおよびSVN)対分散 VCS(GitおよびMercurial)の場合ですか?

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

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

だけではないGitが優れていること、など-私はこのことから描いた結論は、私がどのようなデータを持っていないということです

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


3
@jokoon:何に関して効率的ですか?高速なイーサネットでもローカル操作に比べて遅いため、確かに速度は低下します。
maaartinus

4
このStackOverflow Q:SVNを使用する理由を
確実に

4
Gitは非常に高く評価されているといつも思っていました。それは流行であり、プログラマーは流行に不浸透性ではありません-この考えに対する多くの反対にもかかわらず。この世界の他のみんなと同じように、誰もが輝く新しいおもちゃ(Git)を望んでいます。Gitは優れている場合もありますし、一部の人々にとっては優れている場合もあります、客観的に考えるとSVN より優れていることはありません。
買った777

3
SVNはまだ使いやすいと思っていましたが、学習曲線はGITより優れています。
チャン

5
この質問は最近、主に意見に基づいて保留されました。その分類は間違っています。質問は長い間開かれていました。DVCSの美徳について多くの質問があり、質問はそれが良いかどうか(意見)ではなく、が良いかを尋ねること。違いは意見ではなく、製品全体がそうであるかどうかです-それはトリッキーです(ただし、この質問のポイントではありません)。
イーモンネルボンヌ

回答:


207

Subversionは中央リポジトリです

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

Subversionは従来の知恵です

これは、多くの人々(特にマネージャーとボス)がバージョンに番号を付け、開発を彼らの脳にハードコードされた時間に沿った「単一行」として見る通常の方法を持っていると言うことです。攻撃はありませんが、Gitの自由は飲み込むのが簡単ではありません。Gitブックの最初の章では、従来の理想をすべて頭から消して、新たに始めることを説明しています。

Subversionは一方向でそれを行いますが、それ以外は何もしません

SVNはバージョン管理システムです。仕事をする方法が1つあり、誰もが同じ方法で行います。期間。これにより、他の集中型VCSからのSVNへ/からの移行が容易になります。Gitは純粋なVCSでさえありません-ファイルシステムであり、さまざまな状況でリポジトリを設定するための多くのトポロジーを備えています-そして標準はありません。そのため、いずれかを選択するのが難しくなります。

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

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

55
「Subversionは1つの方法でそれを行います」-私も、現在の仕事を始めるまでそう考えました。私の現在の仕事では、信頼の問題がないと主張する上司が、ロックを要求するようにサーバーを構成しました。システムではマージは行われません。ファイルはリポジトリ上でロックされており、他の誰もロックなしでそれらを書き込むことはできません。トップダウン制御は、憲法が要求している人にとっては、間違いなくsvnがgitより優れていることです。
ダン・レイ

14
中央リポジトリの利点の1つは、バックアップが簡単なことです。チェックインしたコードがすべて1か所にあり、その1か所にオフサイトバックアップがある場合、オフィスが焼けてもすべてを失うことはありません。DVCSでは、開発者のマシンのオフサイトバックアップを行わない限り、オフサイトでバックアップされたサーバーにプッシュされていないすべてのものが失われます。
ポールトムブリン

94
なぜGitを集中的に使用できないのですか?中央リポジトリが1つあるだけで、開発者はチェックアウト、更新、コミットのようにクローン、プル、プッシュできます。
デビッドソーンリー

29
@PaulTomblin-ワークフローに応じて、Gitはより良いバックアップを提供できます。たとえば、プライベートgithubリポジトリを使用し、コードを機能ブランチに頻繁にプッシュします。私の同僚がgit fetch origin持っている場合、Github自体が提供するバックアップとともに、それぞれが私のコードのバックアップを持っています。(ローカルとGithubの両方で、マージされたブランチを定期的に整理します。)
ネイサンロング

52
あなたは、大企業や政府の仕事のためにセントラルがより安全であることを暗示しているようです。これは単に真実ではありません。コンピューターにコードのコピーがある場合、コードのコピーがあります。DVCSリポジトリを保持する中央サーバーまたは中央ファイルシステムからのものであるかどうかは関係ありません。
ジョンフィッシャー

131

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

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


11
サブツリーの操作は、SVNがGITよりも優れている唯一の方法です。要するに、空のディレクトリはいいですが、必要ではありません(そして回避することができます)。gitサブモジュールとgitサブツリーの混乱が少なければ、多くの人々がGITへの移行を妨げることはありません。一部の人々が言及した他の利点は、(開発者の)メンタリティに要約されます。たとえば、上から下まで必要な場合、それで問題ありません。私はあなたのために何の仕事もありません。
ティル

3
これらがSVN(およびその他の集中型バージョン管理)を支持して議論できる唯一の種類であることが
面白い-dukeofgaming

1
なぜ面白いのですか?-新しいシステムは古いシステムから学習します。RCSにはgitよりも利点があります。履歴ファイルは手動で簡単に編集でき、ファイルごとのブランチを作成できます。しかし、進化は機能が失われることを伴います
...-ヨハネス

3
まさにこの理由でGITを介してSVNを使用しているゲーム会社のことを聞きました-数GBのサイズのリポジトリについて話すとき、それは突然重要になります!
ジェームズ

18
gitバージョン1.8.0の時点で、git subtreeコマンドを使用してこれを正確に実行できるようになりました。最後のSubversionの利点は、ほこりをかみます:)詳細はこちら:github.com/gitster/git/blob/…注:これはgithubプロジェクトへのリンクですが、git-subtreeは現在、コアgitディストリビューションの一部です。
カール

51

私は3つ考えることができます。第一に、特に開発者以外にとっては、理解するのがかなり簡単です。概念的には、DCVSオプションよりもはるかに簡単です。2つ目は成熟度、特にWindows上のTortoiseSVNです。しかし、TortoiseHgは急速に追いついています。第三に、獣の性質-ツリーの任意のレベルから物事をチェックできるファイルシステムのイメージ-は、いくつかのシナリオで非常に便利になることがあります-さまざまな構成ファイルのバージョン管理など数十のリポジトリのないサーバー。

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


25
簡単に理解できることは、使用される可能性が高くなるため、重要な利点です。SVNはバージョン管理なしよりも確かに優れており、誰かが古い方法に頑固であれば、SVNが最良の選択かもしれません。
11

12
@jhocking:SVNは好きではありませんが、誰かが「これらの新しいDVCSのことは気に入らないので、CVSにとどまる」と言ったら、絶対にお勧めします。それは少なくとも簡単な道です部分的に正常なVCS ;-)
ヨアヒムザウアー

4
@jhockingすべての状況で新しい方法が常に最適とは限りません。NASAが0gで書くことができるペンを開発するために何百万ドルも費やしたという昔の話を思い起こさせます。一方、宇宙飛行士は鉛筆で作られました。昔の方法の方が良い場合があります。今すぐ私の法律を下車してください!
maple_shaft

25
@maple_shaft、時にはそうではありません。snopes.com/business/genius/spacepen.asp
ピーターテイラー

3
簡単にグロッキングされるのは非常に主観的であり、主に新しい知識を既に知っているものに適合させる方法に基づいています。それはまた、あなたの学習源が何であるかという点でも大きな違いをもたらします。マニュアルページで行く場合は、幸運を祈ります。あなたがすでにそれをグロックしている良い先生によって教えられているなら、あなたはそれを作ったのです。YouTubeでいくつかの良いビデオを見た後、gitが非常に理にかなっていることがわかりました。すでにそれを単純なコアにまで蒸留している人から理解を得たなら、何でも理解しやすくなります。
-WarrenT

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

23
あなたの脳を壊しませんか?SVNの競合のあるブランチを簡単にマージする方法を教えてください。
WarrenT

4
「より良い」ツール/フロントエンド、それは動くターゲットです。両側のツールが改善されます。数年後にどのツールが利用可能になるかは誰も知りません。10か月前のその評価は、時間の経過とともに容易に変化する可能性があり、現在は古くなっている可能性があります。実質的な答えを見たいと思います。
WarrenT

6
ツリーの競合?小切手。すべてのオプションに「はい」または「いいえ」いいえ。Svnは激怒するように設計されています。作業コピーコマンドを消去しますか?いいえ。Revertはバージョン管理外のファイルを削除できません。
ウォーレンP

1
すべてを削除して再度チェックアウトすると、バージョン管理外のファイルが消去されます。
jgmjgm

あなたの最後のアイデアが大好きです、Gitは私の脳を壊しました: '(
ルーク

24

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

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

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


中心性は事実ではなく神話の問題です。誰も私が何かを変えるのを止めることはできません。CVCを使用すると、何かを集中的に変更するのを防ぐことができます。dvcsでも同じです。cvcsのcommitという単語は、コミットとプッシュをまとめたものです。
ウォーレンP

@JonathanHenson:TorvaldsがSVNを嫌う理由それだけではありません。SVNは一元化され、より良いCVSになるかもしれませんが、それはそれを良いソフトウェアにしません。トーバルズはCVS / SVNが嫌いです。それは、それらが集中化されているからではなく、彼がそれらが哀れなほど悪いソフトウェアだと考えるからです。彼が正しいかどうかはあなた次第ですが、Linux(およびAndroid)(数十億台のデバイスで実行)とGit(これはほとんど世界を席巻しています)の両方の大成功を確認しました。 d彼に反対する前によく考えてください。Torvaldsが数年前にGitでGoogleで行った講演は素晴らしいです。
セドリックマーティン

笑。適切なバックアップシステムが整っていないため、あなたのマネージャーは恐れるでしょう。「だれかがコピーを持っているのでそのDVCS」と言っても飛びません-最後の場所でgitが使われているのを見て、文字通りいくつかのレポのコピーがありませんでした。念のために、ロックは状況によっては良い場合があり、gitはこの点で失敗します-画像や他のバイナリファイル用の魔法のマージツールがない限り。gitはテキストファイルに対してのみ実際に機能します。
gbjbaanb

22

私の理由:

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

1
「コミット番号付けスキーム」は、標準トランクがある場合にのみ可能です。それ以外の場合、どちらがメジャー番号を取得しますか?

1
svnの数字を+1。この番号は一意です。app-versionnumber xx.yy.zz.12882の一部としてこの番号を使用するツールがあります。12882はsvnバージョン番号です。生産上の問題がある場合は、バージョン番号を確認してください。ソフトウェアがビルドされた正確なsvn-revisionがあります
-k3b

22

良い情報を探していることを感謝しますが、この種の質問は「Gitは非常に勝っていると思うし、sxor zeh suxorz!」答えます。

私が試したところ、個人的にはGitが私の小さなチームにとって少し多すぎることに気づきました。地理的に分散している大規模な分散チームまたはチームのグループに最適だと思われました。私はGitの利点を大いに理解していますが、私の意見ではソース管理は私を夜中に追いやるものではありません。

私はシカハンターで、私と私の友人たちは外に出ると歯に武装しており、弾薬とハイテクギアでいっぱいです。私は、単一のライフル、7つの弾丸、およびバックナイフで現れます。7ラウンド以上必要な場合は、何か間違ったことをしています。他の人と同じようにしています。

私がやろうとしているのは、あなたが中小規模のプロジェクトに取り組んでいる小さなチームで、すでにSVNに慣れているならそれを使うということです。確かにCVSや(震え)SourceSafeよりも優れており、リポジトリをセットアップするのに5分もかかりません。Gitは時々やり過ぎになることがあります。


3
本当に?それから、化石をご覧になることをお勧めします。
スペンサー

7
論争の可能性が少しでもアラームを鳴らさないようにします。多くの場合、重要なトピックは最も物議をかもし、強く保持されたビューを呼び出す可能性が最も高いトピックです。したがって、「この種の質問」は重要であり、範囲外の応答の可能性は、それを投稿しないというもっともらしいものではありません。このサイトのユーザーは成人であると想定しています。私のQの言い方は、ニュートラルではないにしても、それから転覆の人々に依存していました。私のQへの応答は、Gitに対する転覆の利点を暗示する必要があります。
ダグ

@SpencerRathbun、ありがとう!私はそれを見なければなりません。私はgitに嫌悪感を持っているので、私はsvnが大好きです。
maple_shaft

10
@Spencer -反対に、両方のユーザーとしてgithg、私は示唆している水銀思う人のためのgit多すぎます。TortoiseHgのはだろう、非常に使用誰にも馴染みTortoiseSVNは(それもWindows上で同じエクスプローラオーバーレイを共有します)。VSSよりも確かにはるかに簡単であり、hgリポジトリのセットアップ、初期状態のコミット、共有ドライブへのクローン作成に数秒以上かかった場合は驚くでしょう。
マークブース

@MarkBooth元の質問で述べたように、それは欲求とニーズの問題だと思います。私の現在の職場では、着くまでレポはありませんでした。必要なプロジェクトツールのすべて、またはほとんどがまとめられていて、使いやすく、デルタの代わりにすべてを保持し、1人または2人のチームに複数のマシンに分散して動作するものが必要でした。
スペンサーラスブン

20

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

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


2
SVNはそれらをどのようにうまく処理しますか?GitはすべてのファイルをBLOBと見なします。
-WarrenT

4
@WarrenTは、ワークフローのおかげで、gitでは多くのブランチを作成してマージするため(または、なぜそれを使用するのか)、バイナリを現実的にマージすることはできません。したがって、SVNのバイナリファイルに「needs lock」プロパティを設定することがよくあります。
gbjbaanb

1
ODTドキュメントなど、一部のバイナリは(理論的に)マージできます。
ドナルドフェローズ

18

使いやすさ。これは、実際にはSubversionのメリットではなく、TortoiseSVNのメリットです。TortoiseGitは存在しますが、TortoiseSVNに対応するにはまだ長い道のりがあります。

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


1
Assembla(のためにサポートされている任意の SCM -リスト内SVN)はgithubのよりも優れている、私は思う
レイジーアナグマ

現在、smartgit、GitXLなどもあり、gitの使い方をより簡単にするプログラムがあります
-wirrbel

@LazyBadger、聞いたことがない。
パセリエ

16

あなたはときに分岐し、マージする必要はありません(と、SVNをTortoiseSVNは Windows上で)理解し、非常に使いやすいです。Gitは分岐/マージを簡単にしようとするため、単純な場合には非常に複雑です。

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


8
git分岐とマージの使用は複雑な操作ではありません。複数バージョンの要件がない場合でも、1人のプロジェクトでブランチを使用します。ブランチで現時点では仕事を続けることができず、別のソリューションを試す方がはるかに良いことがわかったときに分岐します...しかし、それgitを学ぶのは少し難しいことに同意します。
-maaartinus

古いバージョンでバグ修正を行う必要があるときはいつでも、分岐とマージが必要です。

1
水銀はsvnやgitより簡単だという考えを人々が考慮しないのはなぜですか?
ウォーレンP

SVNは最近まで非常に高いコストなしで分岐とマージをサポートしていなかったため、誰かが取り組んでいるものを変え続けたいときにプログラマーがマネージャーに立ち向かえるようになったと思います。ツールは企業の組織内で機能する必要があり、企業の組織の形成にも役立ちます。
イアン

14

おじいちゃんはWindows XPコンピューターでSVNを使用できましたが、Gitの使用に問題がありました。たぶん、これはTortoiseGitよりもTortoiseSVNの成果かもしれませんが、Gitが本質的に強力で、したがってより複雑であるという事実に結びついていると思います。

おじいちゃんにとっては、最近はプログラミングをしていないので、今ではそれほど問題ではありません。しかし、私はかつてチームにいて、グラフィックアーティストもソース管理を使用していました。

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


gitは、バージョン管理に対するより「哲学的な」アプローチです。あなたは「バックアップ」および配布ツールとしてVCSを使いたい人には難しく時間を持っているのでなどコミットのセマンティクス、枝、について考え始めるが、Gitははるかに困難ではありません
wirrbel

11

職場では、次の2つの理由により、開発者をSVNからDVCSに切り替えることができませんでした。

  • 部分的なチェックアウト(プロジェクトツリーの異なる深さからの3つのフォルダーのみ)
  • ファイルのロック(バイナリ形式のレポート)

8
  • 「svn commit」を実行するときの安心感。コミットはサーバーに送信されるため、変更がコミットされた後に消去される可能性があることはありません。gitでは、コミットはローカルであるため、プッシュするまで、「rm -rf」が外れてしまいます。
  • コミットが認証されます。gitのデフォルトでは、私は誰としてもコミットしていると伝えることができます。
  • 日常使用のために学習するコマンドが少なくなります。「svn checkout」、「svn up」、および「svn commit」を使用すると、かなり遠くまで移動できます。
  • 共有チェックアウトの方がずっと便利です。コミットすると、ユーザー名/パスワードが要求されます。特定のコマンドライン引数を渡すことを覚えておく必要はありません。職場では、プロジェクトの共有svnチェックアウトを備えた共有マシンがある場合があります。誰かが「ボブはこのマシンでこれを見ることができますか」と言うかもしれませんし、彼はそうすることができます。
  • リポジトリのレイアウト。アンブレラプロジェクトとサブプロジェクトを作成し、いつチェックアウトするかを選択できます。
  • リビジョン番号は増加する整数です。
  • 中央リポジトリのワークフロー用に設計されています。

認証の問題に対して+1。Gitコミットには署名する必要があり、署名を確認する必要がありますが、これは困難です。
クリスチャン

6

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


2
他の人は、「トップダウンの経営管理」に言及してこれにぶつかりました。これは私の環境にとって重要な要素です。一部のユーザーグループでは、リポジトリの特定の領域を読み取り専用に、または読み取りなしにロックダウンする必要があります。また、指すことができる単一の場所が必要であり、「これは信頼できるマスターコピーです。コピーがここにあるものと一致しない場合、公式ではありません」と言う必要があります。
alroc

1
プロジェクトリーダーと副官の祝福されたリポジトリは、がコミットできるかを制御してます。http-auth対応サーバーで公開されているGitリポジトリ(svnが実行するのと同じApacheモジュールを使用)は認証を行い、誰が何を複製/チェックアウトできるかを伝えます。確かに、ディレクトリごとのsvnのアクセス許可ほど細かくはありませんが、私にとっては実際の必要性よりもミクロ管理のように見えます。
ヒューバートカリオ

@HubertKario-これは、「あなたの最高のプログラマーが他の人のコードをチェックインするのに時間を費やすべきでしょうか?」という疑問を提起します。実は、私はそれをここに掲載することを、この質問への答えでとても興味:programmers.stackexchange.com/questions/181817/...
GlenPeterson

5

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


6
ただし、チェックアウト/クローニングはまれな操作です。ほとんどのシナリオでは、gitはsubversionよりも高速です。
RDS

5
git clone --depth=1あなたは歴史を気にしないならあなたの友達です
ヒューバートカリオ

4

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

DVCSが現在流行していることは認めますが、その理由を説明します。

DVCSの方が優れているのは、多くの人が「これが最初から取り組むべき方法だ」と言っているからです。確かに、SVNで使用していたDVCSを使用して、SVNを廃止することができます。

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

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

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

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

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

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

DVCSは、インターネット用および非常に複雑なプロジェクト用に作成されています。SVNは、小規模で短期のタイトなチームプロジェクト向けです。SVNから多くを学ぶ必要はありません、それはほとんどdiffのないFTPです。


ゲーム業界の例を説明できますか?
ジョニー

3

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

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

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

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

一方、あなたのチームが単一のサイトに配置されており、開発への積極的な「チーム」アプローチと多くの対面コミュニケーションがあり、空中に「バズ」がある場合、SVNは学際的なチームが多い場合は特に、文化的適合性が向上します。

もちろん、GitとHg(パワフルで柔軟な)を構成して、お望みのことを何でも行うことができますが、それは間違いなくより多くの作業であり、特にチームのメンバーにとっては使いにくいです当然、いかなる形式のバージョン管理も使用しません。

最後に、Svnで「ホット」ライブラリ開発を使用した共有機能(CIおよびテスト駆動アプローチ)を使用すると、より分散された疎結合チームでは達成が困難な協調開発が可能になります。



1

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

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

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

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


-1

Subversionでは、コミットが完了してプッシュされた後、ログメッセージ(「コミットメッセージ」とも呼ばれます)を編集できます。最も実用的な用途では、これはgitを含む分散システムの設計では不可能です。もちろん、gitでは「git commit --amend」を実行できますが、コミットが他の場所にプッシュされた後は役に立ちません。SVNでは、ログメッセージを編集するときは、全員が共有する中央リポジトリで実行するため、全員が編集を取得でき、リビジョンの識別子は変更されません。

多くの場合、事後のログメッセージの編集は非常に便利です。ログメッセージの間違いや省略を修正するだけでなく、ログメッセージを更新して将来のコミット(バグを修正するリビジョンや現在のリビジョンで導入された作業を完了するリビジョンなど)を参照することなどができます。。

ちなみに、情報を失う危険はありません。pre-revprop-changeフックとpost-revprop-changeフックを使用すると、本当に心配な場合は古いメッセージの履歴を保存したり、ログメッセージの差分(これは実際に一般的です)監査証跡。


1
これもgitで行うのは簡単です。例:git --amend; これを行う別の方法は、git reset --soft HEAD ^を使用することです。これは、戻るだけでインデックスを変更しないため、コミットメッセージを編集/再作成できます。
ダグ

こんにちは、ダグ。はい、あなたはあなたのローカルリポジトリに対してそれを行うことができますが、私があなたが変更を他の場所にプッシュしたら話をしています-"git commit --amend"はそれではあまり役に立ちません。SVNでは、中央サーバーの概念があるため、中央サーバーでログメッセージを編集できます。それが、「分散システムの設計では不可能」という意味です。これを明確にするために回答を編集します。
カールフォーゲル

1
「歴史をいじることができる」という機能が大好きだと言われています。意図的でなければ、バグだと思います。
cHao
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.