私たちはSubversion Geeksであり、Mercurialの利点を知りたい[非公開]


22

私はSubversionオタクだということを読んだので、なぜMercurialやGitまたはその他のDVCSを検討すべきか、検討すべきではないのか

関連するフォローアップの質問があります。私はその質問を読み、推奨されるリンクとビデオを読んで、その利点を見ましたが、人々が話している全体的なマインドシフトは見ていません。

私たちのチームは、60のプロジェクトで構成される1つの大きなコードベースで作業する8〜10人の開発者です。Subversionを使用し、メイントランクを持っています。開発者が新しいFogbugzケースを開始すると、svnブランチが作成され、ブランチ上で作業が行われ、完了したらトランクにマージされます。場合によっては、ブランチに長時間滞在し、トランクにブランチをマージして変更を反映することがあります。

Linusがブランチを作成し、二度とブランチを作成しないことについて話すのを見たとき、それはまったく私たちではありません。おそらく週に50〜100のブランチを問題なく作成します。最大の課題はマージですが、私たちもそれをうまく得ています。ブランチのルート全体ではなく、fogbugz case&checkinでマージする傾向があります。

リモートで作業することも、ブランチからブランチを作成することもありません。コードベースのそのセクションで作業しているのがあなただけなら、トランクへのマージはスムーズに進みます。他の誰かがコードの同じセクションを変更した場合、マージが面倒になり、手術が必要になる場合があります。競合は競合です。コードを理解できるほど賢くなければ、ほとんどの場合、どのシステムでもそれを正しく実現できるとは思いません。

ブランチを作成した後、以下の60k +ファイルのチェックアウトには時間がかかりますが、これは使用するソース管理システムの問題です。

DVCSには、私たちにとって大きな助けになるとは思えない利点がありますか?


すでにSVNをDVCSとして使用しているようです(とにかく分岐に関して)。MercurialがSVNで実行できるほぼすべての操作(およびその逆)を実行できると確信しています。問題は、特定の開発シナリオで使いやすく便利なものはどれですか?Mercurialを試してみる価値があるかどうか、少しだけMercurialを試してみる必要があると思います
キャメロン

私はMercurialのファンであり、SVNの機能のスーパーセットを明確に提供していますが、これらの追加機能はごく少数のプロジェクトでしか役に立たないと言われています。あなたはおそらくそれを必要としないだろう、それはあなたの人生を変えないだろうが、あなたはより多くの機能を手に入れ、何も失うことはないだろう。
ジギー

Hg Initをチェックアウトしましたか?Joel Spolskyによって書かれたMercurialチュートリアルです。Subversionユーザー向けの章から始まりますが、それ以外はDVCSについて何も知らないことを期待しています。
バリーブラウン

回答:


11

「DVCSを集中的に使用することのみを計画している場合、どのようなメリットがありますか」という質問を言い換えます。あなたがそのように尋ねるとき、それはしません。VCSでは、タスクごとに1つのブランチが非常に一般的です。考えてみると、開発者のマシン上で1日にトランクから独立して変更されるソースコードのローカル作業コピーを作成することは、誰も呼び出していない場合でもブランチです。それとあなたのワークフローの唯一の違いは、中央サーバーでもそれらのブランチに永続的な名前を付けることです。それは、Linusや他の人が話している種類の分岐ではありません。

DVCSを理解するには、考え方を根本的に変える必要があります。あなたは、あなたが望む誰とでも共有される、あなたが望むだけ多くのブランチで何をするかを自分自身に問う必要があります。これには、自分だけが見るブランチが含まれます。

可能性は無限大。ほんの一例として、インターフェイスの反対側で作業している2人はどうでしょうか。彼らは定期的にお互いにコードを共有する必要がありますが、まだ誰とでも共有できるほど安定していません。ブランチを作成して共有し、準備ができたらブランチを中央リポジトリにマージします。

中間のローカルコミットを行う機能は、それだけで価値があります。それはあなたが自分で経験しなければならないことです。

リポジトリをローカルにすることで得られる速度も、それだけで価値があります。はい、60kファイルレポジトリの場合、VCSでは最初のクローンはやむを得ず遅くなりますが、それができたら、DVCSを使用すると新しいブランチのチェックアウトが桁違いに速くなります。


2
+1!また、mercurialに公正かつ徹底的なトライを行った場合、私はあなたが戻りたくないと確信しています。
ピート

1
「あなたが望む誰とでも共有される、あなたが望むだけ多くのブランチで何をするのかを自問する必要があります、そして彼らだけです」... "インターフェースの反対側で作業している二人?他の人は定期的に、しかしそれはまだ全員と共有するのに十分安定していない。彼らは彼ら自身の間で共有するブランチを作成し、準備ができたらそれを中央リポジトリにマージして戻すことができる。これですべてがSubversionになりました。
マット

@Matt、あなたのビジネスはルールよりも例外であるため、ラッキーです。ほとんどの企業は、中央サーバーの限られたリソース上にブランチを作成することに関して非常に厳しいルールを持っているため、一時的な理由でブランチを作成することさえ考えません。
カールビーレフェルト

3
この答えには、元のポスターがSVNのほとんどのユーザーが実行可能であると考えるよりもDVCSワークフローにより近い方法で動作するようにSVNを既に強制しているという事実が欠けていると思います。本質的に彼らはすでにDVCSの考え方を持っているので、思考根本的な変化は必要ありません。
マークブース

良い点は@マーク。このような小さなチームでは、大規模なチームの通常の慣習の多くが窓の外に出ます。私はまだ速度上の理由から価値があると思います。
カールビーレフェルト

1

特定のケースでは、DVCSに切り替えるメリットはありません。既存のシステムに満足しているので、必要なすべてが実行されるので、切り替えてください。SVNはまだアクティブなオープンソースプロジェクトであり、すべての主要なIDEおよび開発ツールとhgまたはgitよりも優れた、より成熟した統合を持っています。チームの規模とプロジェクトの数を考えると、既存のツールが正常に機能しているときに、新しいツールに変換するのに時間をかけたいですか?

DVCSなしでは機能できない開発者がいる場合は、hgまたはgitのsvnゲートウェイを指定します。svnリポジトリへのチェックインは、他のチームが使用するすべての手順とプロセスに準拠する必要があることを彼らに明確に伝えてください。このアプローチのもう1つの利点は、クローゼットから抜け出すことができるとは言わずにゲートウェイを既に使用している真のDVCS熱狂者がいることです:-)。


時間をかけて変更したいですか?いいえ、特に過去2年間でsvnに切り替えたときはそうではありません。コメントしてくれてありがとう。
マット

1

DVCSを使い始めてから多くの人が採用するワークフローに非常によく似たワークフローを既に使用しているように思えます。

あなたの観点からすると、DVCSにはSVNに比べて次の重要な利点があります。

  • リポジトリのクローンを作成したら、多くの操作をローカルで実行できます。
    • リポジトリログを見るのは、svnサーバーに触れる必要がないので、信じられないほど高速です。
    • 同様に、ブランチの切り替えにはサーバーへのアクセスもローカルクローンも必要ありません。
  • ブランチは履歴の単なる分岐パスであるため、リポジトリは誰もが作成したすべてのブランチで散らかっていません(SVNにはリリースブランチのみがありますが、branchesディレクトリにはまだ関係のない多くのサブディレクトリがあります)。
    • gitでは、ブランチが再びマージされ、refが削除されると、ブランチがそこにあることさえ知らないかもしれません。
    • Mercurialのでは、の選択肢を持っているのいずれか(その場合、それは永久に各チェンジセットにエンコードされます)ブランチに名前を付けるか、単に静かになります。名前(位相幾何学)支店、作成マージそれがあるとき、歴史の中にmergeにDバックをdefaulttrunk
  • SVNでは、ブランチのブランチはあまりにもわかりにくいため、有用ではありません。でgithg彼らはコースのちょうどパーです。
  • DVCSは、ソフトウェア開発がDAGであると理解しています。つまり、マージすると、複数の親を持つ変更セットになります。SVN(少なくとも私が使用したバージョン)はこれを本当に理解していません。

その最後の点で、あなたは言う

競合は競合です。コードを理解するのに十分なほどスマートでない限り、ほとんどの場合、どのシステムでもそれを正しく実現できるとは思いません。

hg排他的に使用することからsvn単独で使用するように切り替えるgitsvnことで、マージがはるかに単純でトラブルフリーでhgありgitsvn、それよりもトラブルが少ないことが私の経験svnでした。svn(少なくとも使用しているバージョンと)マージすると、手動で解決する必要があるかなり多くの競合が発生します。

SVNでマージが難しい理由の1つは、異なる行ごとに2つのオプションしか提供しないことです。

  • マージするブランチのテキスト
  • マージするブランチのテキスト

DVCSからのマージでは、通常3番目のオプションが提供されます。

  • マージする両方のブランチの共通の祖先からのテキスト

これがどれだけ有益な過小評価しないでください、それはをご提供して多くの可能性シンプルな2ウェイデフよりも変化のためのより良い状況。

全体として、試してみることをお勧めします。gitsvnやなどのツールを使用hgsubversionすると、現在のSVNリポジトリで試してみることができます

そもそもクローンを作成するのは王室のPItAですが、一度それを行うと、既存のCVCSでDVCSのパワーを最大限に活用できます。


1
SVNは、あなたが言及した場合でも競合を引き起こしません。両方が同じ行を変更したときにのみポップアップします。一般に、マージはディレクトリの変更のマージをうまく処理できないため、svnでのファイルの名前変更/移動または追加/削除ではより問題になります。SVNマージはそれら2よりも多くのオプションを提供します。通常は、両方を削除するのではなく、両方の変更セットを保持したいため、「use theirs then mine」を使用します。
gbjbaanb

@gbjbaanb-それは私が見つけたものではないので、SVNの経験をで修飾した理由at least the version I've usedです。私の理解では、svnの最新バージョンは共通の祖先について理解してますが、私はその経験がなく、同じ問題を抱えているsvnの古いバージョンを実行しているサーバーがたくさんあると思います。
マークブース

ちなみに、hg(ほぼ間違いなくgit、試したことはありませんが)3つのクラスを持つファイルを取得し、クラスごとに3つのファイルに分割し、後でブランチ間の変更をマージできるという事実が大好きです個々のクラスへの変更が正しいファイルに適用されるように、「結合された」ファイルと個別のファイルを持つブランチ。純粋な魔法。* 8 ')
マークブース

1
gbjbaanbは正しいです。SVNは、あなたが説明するシナリオに矛盾はありません。これを自分自身に示すのはとても簡単です。
ジェレミー

@Jeremy @gbjaanb-編集されたセクションはあなたにとってよりうまく機能しますか?svnマージがどのように機能するかについては議論しませんsvn。EclipseでコマンドラインとSVNKit を使用した経験があります。そこでは、更新を単にプルすると「競合」が発生します。 (「この両方の変更がこの順序で必要だ」と簡単に言うことはできません)。
マークブース

0

このような移行後に気付いた重要な変更が1つあります。ブランチを頻繁に切り替えることと、Subversionで余裕がなかったより頻繁にコミットすることです。たとえば、いくつかの小さな機能ブランチが順番に整理されており、それぞれにビットを追加して、変化するトランクにすべてを順番に簡単にリベースすることができます。機能ブランチをマージする順序を再調整するのは簡単です。

しかし、実際には、私は実際にはSubversionから離れていません。ローカルsvnクライアントとしてgitを使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.