注:現在の質問に対する回答については、「編集」を参照してください
まず、Joel SpolskyによるSubversion Re-educationをお読みください。あなたの質問のほとんどはそこで答えられると思います。
もう一つの推薦、Gitリポジトリ上のLinus Torvalds氏話:http://www.youtube.com/watch?v=4XpnKHJAok8。この他の質問もあなたの質問のほとんどに答えるかもしれませんが、それは非常に面白い質問です。
ところで、私が非常におもしろいと思うもの:転覆の元の作成者の2人であるBrian FitzpatrickとBen Collins-Sussmanでさえ、転覆が水銀(およびDVCS全般)に劣ることについて言及した1つのGoogleトークで「それについてごめん」と述べました。
現在、IMOおよび一般的に、チームダイナミクスはどのDVCSでもより自然に発達します。顕著な利点は、次のことを暗示しているため、オフラインでコミットできることです。
- サーバーと接続に依存しないため、時間が短縮されます。
- コミットするためだけにインターネットアクセス(またはVPN)を取得できる場所の奴隷ではありません。
- サーバーだけでなく、誰もがすべて(ファイル、履歴)のバックアップを持っています。誰でもサーバーになることができます。
- 他の人のコードを台無しにすることなく、必要に応じて強制的にコミットできます。コミットはローカルです。コミット中にお互いのつま先を踏むことはありません。コミットするだけで他の人のビルドや環境を壊すことはありません。
- 「コミットアクセス」のない人はコミットできます(DVCSでのコミットはコードのアップロードを意味しないので)、貢献の障壁を下げて、変更をインテグレーターとしてプルするかしないかを決定できます。
- DVCSがこれを本質的にするので、自然なコミュニケーションを強化できます... Subversionでは、代わりにコミットレースであり、コミュニケーションを強制しますが、作業を妨害します。
- コントリビューターはチームを組んで独自のマージを処理できるため、最終的にインテグレーターの作業が少なくなります。
- コントリビューターは、他のユーザーに影響を与えることなく、独自のブランチを持つことができます(ただし、必要に応じて共有できます)。
あなたのポイントについて:
- DVCSlandには地獄の融合は存在しません。処理する必要はありません。次のポイントを参照してください。
- DVCSでは、全員が「ブランチ」を表します。つまり、変更が行われるたびにマージが行われます。名前付きブランチは別のものです。
- 必要に応じて継続的インテグレーションを使用し続けることができます。私見は必要ありませんが、なぜ複雑さを増すのでしょうか?あなたの文化/ポリシーの一部としてテストを続けてください。
- Mercurialはいくつかの点で高速で、gitは他の点で高速です。一般的にはDVCSではなく、特定の実装に限ります。
- あなただけでなく、誰もが常に完全なプロジェクトを持ちます。分散されたものは、ローカルでコミット/更新できることと関係があり、コンピューターの外部からの共有/取得はプッシュ/プルと呼ばれます。
- 繰り返しますが、Subversion Re-educationをお読みください。DVCSはより簡単で自然ですが、異なるため、cvs / svn ===すべてのバージョン管理のベースと考えないでください。
DVCSへの移行の説教を支援するために、Joomlaプロジェクトにいくつかのドキュメントを提供していました。ここでは、集中型と分散型を示す図を作成しました。
一元化
一般診療で配布
最大限に配布
図にあるように、まだ「集中型リポジトリ」があり、これは集中型バージョン管理ファンのお気に入りの引数の1つです。「集中型」リポジトリは単なるリポジトリであるため、「まだ集中型」です。すべてが同意します(たとえば、公式のgithubリポジトリ)が、これはいつでも変更できます。
現在、これはDVCSを使用したオープンソースプロジェクト(大規模なコラボレーションを伴うプロジェクトなど)の一般的なワークフローです。
Bitbucket.orgは、mercurialのgithubに相当します。スペースが無制限のプライベートリポジトリが無制限であることに注意してください。チームが5未満の場合は無料で使用できます。
DVCSを使用して自分を納得させる最良の方法は、DVCSを試すことです。svn/ cvsを使用した経験のあるDVCS開発者は、それだけの価値があり、それなしではいつまで生き延びたかはわかりません。
編集:2番目の編集に答えるために、DVCSでは異なるワークフローを持っていることを繰り返しますが、ベストプラクティスのために試さない理由を探さないことをお勧めします、OOPはそうではないと主張しているように感じます常にパラダイムXYZで行うことで、複雑な設計パターンを回避できるためです。とにかく利益を得ることができます。
それを試してみると、「プライベートブランチ」での作業が実際にはより良いオプションであることがわかります。最後の理由がわかる理由の1つは、コミットすることへの恐怖を失い、いつでもコミットしてより自然な方法でコミットできるようにすることです。
「地獄の融合」については、「実験している場合を除き」と言い、「実験中+メンテナンス+ 改良v2.0で同時に作業している場合でも」と言います。先ほど言ったように、地獄のマージは存在しません。なぜなら:
- コミットするたびに名前のないブランチが生成され、変更が他の人の変更に合うたびに自然なマージが発生します。
- DVCSはコミットごとにより多くのメタデータを収集するため、マージ中に発生する競合が少なくなるため、「インテリジェントマージ」と呼ぶこともできます。
- マージの競合にぶつかった場合、次のように使用できます。
また、プロジェクトのサイズは重要ではありません。subversionから切り替えたとき、実際にはすでに単独で作業しているときに利点があり、すべてが適切に感じられました。変更セット(正確なリビジョンではなく、コミットを含む特定のファイルの特定の一連の変更、コードベースの状態から分離)を使用すると、特定のファイルグループに対して行ったことを正確に視覚化できます。コードベース全体ではありません。
チェンジセットの仕組みとパフォーマンスの向上について。紹介したい例を使って説明します:githubネットワークグラフに示されているsvnからmootoolsプロジェクトに切り替えます。
前
後
あなたが見ているのは、開発者がコミットしながら自分の作業に集中できることです。他のコードを壊すことを恐れることなく、彼らはプッシュ/プル後に他のコードを壊すことを心配しています(DVCS:最初のコミット、次にプッシュ/プル、そして更新)しかし、ここではマージがより賢いため、マージが競合することはまれですが、マージの競合が発生することはほとんどありません。
あなたへの私の推薦は、mercurial / gitの使い方を知っている人を探し、実際にあなたに説明するように彼/彼女に言うことです。私たちのデスクトップとbitbucketアカウントでMercurialを使用してマージする方法を示しながら、コマンドラインで友人と約30分を費やすことで、ばかげた時間で修正する方法を確認するために競合を作り上げることで、 DVCSの真の力。
最後に、Windowsを使用している場合は、git + githubではなくmercurial + bitbucketを使用することをお勧めします。Mercurialも少しシンプルですが、gitはより複雑なリポジトリ管理(たとえばgit rebase)に対してより強力です。
いくつかの追加の推奨読書: