4

ブランチをトランク/マスターにマージする方が簡単なので、git でのブランチは SVN よりもはるかに簡単であるとよく耳にします。私はいくつかのチュートリアルを読みましたが、それらは基本的なマージの競合のみをカバーしており (「アリスが code.cpp の 8 行目を変更し、同時にボブが code.cpp の 8 行目を変更しました ...」)、SVN と SVN の間に違いはありません。他のすべての分散ソース管理システム。

SVN リポジトリで問題が発生するが、git によって適切に処理されるブランチの変更の例を教えてください。

4

2 に答える 2

3

私はついにブランチをいじくり回したり、gitとsvnをマージしたりして、svnを強制終了するが、gitで完全に機能するケースを見つけました。

プロジェクトがこれらのファイルで構成されているとしましょう。

/main.cpp
/sub1/sub1.cpp
/sub1/sub1.h
  1. ブランチを作成する
  2. トランクで、sub1。*をルートディレクトリに移動し、sub1サブディレクトリを削除します。
  3. ブランチで/sub1/sub1.cppにいくつかの変更を加えます
  4. トランクで/sub1.cppにいくつかの変更を加えます
  5. ブランチとトランクをマージします。

SVNは、ポイント3でブランチで行われたすべての変更を失います。gitでの同様の変更は完全にマージされます。分岐が必要なプロジェクトのバージョン管理システムとしてSVNを拒否するには、これで十分です。

于 2010-04-19T14:11:16.847 に答える
2

hgInit.comは Mercurial に関連していますが、コンフリクトをマージするための DVCS と SVN の違いの概要をよく説明しています。

Subversion でマージがうまくいかない理由は、バージョン履歴の保存方法に関係しています。Subversion はリビジョンについて考えるのが好きです。リビジョンとは、特定の時点でのファイル システム全体の外観です。Mercurial では、変更セットについて考えます。変更セットは、あるリビジョンと次のリビジョンの間の変更の簡潔なリストです。

そのため、Subversion はマージ時にファイル全体を比較しますが、Mercurial (または Git) は各変更セットを個別に比較します。変更セットを処理する場合、競合ははるかに少ない頻度で発生します。

于 2010-03-30T09:23:59.657 に答える