2012-02-04 4 views
2

SVNでは、ローカルリビジョンがマスターリポジトリで最新でない場合はコミットできません。 Mercurialはこれをチェックせず、コミットすることができます。その後、マージを行う必要があります。Mercurialがコミットする前に最新のリビジョンをチェックしないのはなぜですか?

これは多くのプログラマーが作業している場合、大きな問題につながる可能性があります。これを回避する方法はありますか?

+2

あなたが示唆する「大きな問題」は、MercurialよりもSubversionと違いはありません。あるシステムでは 'svn update'を実行するときに暗黙的にマージしますが、' hg pull'の後に 'hg merge'を使って明示的に行います。 –

答えて

6

MercurialとSVNには2つの非常に異なる作業方法があります。

SVNが集中化されているので、コミットしたものはすぐに他のすべてにアクセスできます。それは、常に他のすべての変更の上にコミットする必要がある理由です。だから、あなたがやったことが他の人たちが行った変更をまだ使っていることを確かめることができます。

Mercurialでは、コミットは作業ディレクトリのローカルです。 pushのみが他の人に配布されます。これは、コミットごとにチェックがない理由です。 (このようにして、リポジトリに接続しなくても、オフラインで作業することもできます)。

push変更を行ったときにのみ、Mercurialは作業中のブランチに新しいコミットがあるかどうかを確認します。そうであれば、プッシュを強制することができます(これにより新しいヘッドが作成されます)。または他の変更をマージして、他人の作業を認識させることができます。

すべてのDVCS(Dは配布用です)私はコミット/プッシュを扱うのと同じ方法を持っていることを知っています。それは多くの利点の1つです。マージが正しく行われている限り、これにより問題は発生しません。

コミットごとに新しいチェンジセットを確認したい場合、いくつかのフックでそれを行うことは可能だと思いますが、理由は分かりません。多分誰かがそのようなことを提案するでしょう。

関連する問題