.NET プロジェクトのソース管理を SourceSafe から Mercurial に切り替えることにしました。
ここで問題は、ソリューションからどのファイルが「抽出」(チェックアウト) されているかを知る可能性があるかどうか、また可能であれば誰によって?
.NET プロジェクトのソース管理を SourceSafe から Mercurial に切り替えることにしました。
ここで問題は、ソリューションからどのファイルが「抽出」(チェックアウト) されているかを知る可能性があるかどうか、また可能であれば誰によって?
「チェックアウト」は、他の誰もそのファイルを変更してはならないことを示すために使用されます。これはより一般的にはLockingとして知られていますが、もはや VCS システムがどのように動作するかの基礎ではありません。最新のシステムは、変更を行ごとにマージし、変更が競合するまれなケースでインタラクティブなヘルプを提供できます。(最初に聞いたときは懐疑的でしたが、実際には非常にうまく機能します)。
Mercurial では、各ユーザーが独自のリポジトリのクローンを持っています。あなたの組織は、全員が同期する「中央」リポジトリもセットアップしていると思います。あなたのワークステーションに座って、あなたhg incoming
がまだ持っていない変更を他の誰かが中央サーバーにプッシュしたかどうかを調べるために使用してください。ただし、中央リポジトリに「プッシュ」された変更のみが表示されます。Mercurial では、ユーザーはローカル クローンへの変更を複数回チェックインでき、中央リポジトリに「プッシュ」されるまで非公開のままです。したがって、誰が特定のファイルを変更しようとしているのかを尋ねることはできません。変更を既に送信した人だけを尋ねることができます。
(注意: これには多くの詳細が含まれていません。Mercurial の本を読んで、システムがどのように機能するか、およびそれを最大限に活用する方法を学んでください)。
とはいえ、mercurial にはファイル ロック機能があります。これはLockExtension によって提供されます。ロックを要求するように特定の種類のファイルを構成できます。他のユーザーは、ファイルがロックされているかどうかを確認でき、変更をプッシュすることはできません (ファイルをロックして休暇を取る可能性があるため、ロックを「盗む」ことが許可されている場合を除きます)。
最後に: コメントで、複数の人が作業してはならないある種のファイルについて言及しています。水銀的に言えば、これは変更をマージしてはならないファイルです。これは、ほとんどの場合、画像ファイルやその他のいわゆる「バイナリ」形式に当てはまります。それらに対処するための気まぐれな方法は、ロックすることではなく、ツールが2 つのバイナリ変更を矛盾して「マージ」するのを防ぐことです。[merge-patterns]
これを行うには、特殊ファイルを「バイナリ」として扱うように構成を設定します。一般的なアイデアを得るには、この質問を参照してください。
要するに、本当に必要な場合はロックを設定できますが、チームのコラボレーションを管理するためのはるかに優れた方法があります。それらを利用することを学ぶと、ロックがまったく必要なくなる場合があります。
Mercurial では、ファイル自体が「チェックアウト」されるのではなく、Mercurial はそのステージング領域で (ローカルに) ファイルを追跡します。hg status
ターミナルから実行する場合。追跡している現在変更されているファイルと、認識していないファイルが表示されます。
したがって、コミットすると、変更された追跡ファイルがコミットされます。追跡されていないファイルをステージング領域に追加するには、追跡されていないすべてのファイルをhg add .
ファイルのチェックアウトについて心配する必要はありません。mercurial は変更内容を認識しています。
Visual Studio を使用しているので、Mercurial を IDE と統合し、変更されたファイルのソリューション エクスプローラーにさまざまなアイコンを表示するプラグイン (このようなもの) をインストールできます。
いいえ、Mercurialには「ロック/ロック解除」モデルが完全になく、ブランチ/マージのみがあります。マージは完全に問題ではありません。プロセス中にバイナリアーティファクトをマージする必要がある場合は、いくつかの欠点があるだけかもしれません(そして、そのようなタイプのオブジェクトをSCMに格納することはとにかくアンチパターンです)。
ロックを使用するDVCSの状況は、CVCSの場合よりもさらに悪化します。すべてのワークスペースには、他のワークスペースから独立した独自のリポジトリのコピーがあるため、すべてのクローンの一部のファイルの状態を確認および検出することは不可能です。
リポジトリ内の変更可能なバイナリオブジェクトがワークフローに必須であり、それを回避できない場合は、次の2つの(異なる)ことを考えることができます。
いいえ、Mercurial は分散型ソース管理です。他の人が何をチェックアウトしたかを確実に知る方法はありません。
おそらくフックを使って何かを構築することもできますが、私はそれをお勧めしません。おそらく、そのようなソリューションを維持するのに苦労することになるでしょう。また、フックがローカルで無効にされる可能性があるため、脆弱になるでしょう。
Mercurial LockExtension は概念的にはあなたが探しているものを提供しますが、すぐに利用できるかどうかはわかりません。中央リポジトリで機能させることができませんでした。