より効率的なバージョン管理方法は何ですか:チェックアウトまたはマージ?

StackOverflow https://stackoverflow.com/questions/29144

  •  09-06-2019
  •  | 
  •  

質問

私は常にバージョン管理に「マージ」手法を使用する Subversion または CVS を使用してきました。私の友人の 1 人は、Perforce とその変更リストとチェックアウト方法論の素晴らしさを絶賛しています。

多くは経験と個人的な好みによると思いますが、バージョン管理のどの方法がより効率的に作業できるかについて何らかの調査が行われたかどうか疑問に思いました。

編集: 明確にするために、Perforce と SVN の両方がロックとマージを許可していることは知っていますが、SVN は自由な編集とマージ方法を「奨励」しているのに対し、私の理解では、Perforce はチェックアウト - チェックイン方法を奨励しています。

役に立ちましたか?

解決

正直なところ、それは開発者の規律に依存すると思います。

私は個人的な仕事に Subversion を使用しており、いくつかの仕事でも使用しました。Subversion の気に入っている点は、誰かを追い詰めて、なぜその人が何かに取り組んでいるのか、私が仕事をしてもいいかどうかを尋ねる必要がないことです。問題は、誰かが何かに取り組み始めようと決めたものの、しばらくそれをチェックインしない場合に発生します。チェックアウトとチェックインの間にいくつかの変更が加えられるため、マージが困難になる可能性があります。

私は現在 Perforce を使用していますが、何らかの理由で SVN の方が気に入っています。Perforce を使用すると、マージの競合が発生する可能性をより適切に示すことができ、マージの解決に役立つ組み込みツールも備えています。誰かが長期間にわたって大量の変更を加えた場合、マージがより困難になるという同じ問題があります。

基本的にどちらのモデルでも、変更を頻繁にチェックインする必要があります。多数のチェックインを行うと、マージが必要になる可能性が低くなります。私はあまりにも頻繁に、あまりにも長い間、チェックアウトし続けていることに罪を感じています。個人的には、SVN の価格は Perforce と比較して不足しているものをすべて補っているように感じます。それらの違いはまだ見つかりません。

他のヒント

マージの方が効率的です。単純な理由は、同じファイルへの同時に変更が頻繁に行われる傾向があり、マージを使用するとそこから回復できるからです。対照的に、シングル チェックアウトではそのような余分な作業は防止されますが、その代償としてスケジュール設定が大幅に非効率になります。通常、2 つの変更を同じファイルにマージするには短時間しかかかりません (例:ファイルに変更を加えるにはかなりの時間がかかります (例: 分)。そのため、ファイル編集へのアクセスを妨げることは非常に非効率的です。

Perforce はチェックアウト方法を強制せず、同時チェックアウト (マージと同等) を許可することに注意してください。

前回の評価では、Perforce は分岐とブランチ間の変更の統合のサポートにおいて Subversion を上回りました。この欠点を修正するための作業が Subversion で進行中ですが、私たちはそれを確認するために戻ってきていません。

Perforce では、ファイルを分岐すると、Perforce はそのファイルの出所と、どのリビジョンが 2 つのバージョンに「統合」されたかを「記憶」します。また、リポジトリ内のストレージの最適化も行われているため、誰かがブランチに変更を加えるまでブランチのコピーは実際には実現されません。その後、(私の理解が正しければ)、ファイル内のリビジョンと同じように、ベースのコピーとの差分を使用します。支店。

Perforce によるブランチ間の関係の追跡は、大きな資産です。Subversion がこれを実装している場合は、お知らせください。

おそらく Perforce ではなく Source Safe のことを言っているのでしょうか?Perforce はマージをサポートしており、実際、名前付きマージが追加された SVN 1.5 までは SVN よりもマージ サポートが優れていました (Perforce には常に備わっていた変更リストも追加されており、SVN を使用するショップに移行するのが非常に残念です)。 1.5 がもう少しテストされるまでアップグレードしないでください。)

SVN と Perforce は両方ともロックされたチェックアウトを実行できるため、必要に応じて「マージされていない」モデルを実行できることは注目に値しますが、おそらくバージョン管理でバイナリを管理することを除けば、これにはあまり用途がありません。

とにかく、あなたの質問に対する簡単な答えは、「複数の開発者が関与する場合には、マージ モデルがはるかに優れている」です。

私の理解が正しければ、Perforce はチェックアウトされていないすべてのファイルを読み取り専用にします。これは、Microsoft TFS および VSS での動作に似ています。一方、Subversion は読み取り専用属性を設定しません。IMO、Subversion の方法は、ファイルを変更するためにわざわざソース管理クライアントを使用する必要がないため、より簡単です。無謀にも変更を進め、準備ができたら、ディスク上の変更内容をサーバーと比較します。チェックインをする。

すべてのファイルが読み取り専用の場合、ファイルを頻繁に変更し、保存しようとして、それが読み取り専用であることに気づき、チェックアウトするためにソース管理クライアントに移動する必要があることに気づきました。ソース管理クライアントがエディタに統合されている場合はそれほど問題はありませんが、ソース コードではないものをバージョン管理下に保存している場合は、多くの場合、これはオプションではありません。

私の理解が正しければ、Perforce はチェックアウトされていないすべてのファイルを読み取り専用にします。

これはデフォルトの動作にすぎません。必要に応じて、頻繁に変更されるファイルを代わりに読み取り/書き込みに設定できます。ファイル修飾子の完全なリストを参照 ここ.

また、私の環境では、Eclipseを使用しています。 PERFORCEプラグイン. 。このプラグインを使用すると、ファイルを編集するとすぐに編集用にファイルが開きます。

研究内容についてはわかりませんが、データポイントを 1 つ挙げておきます。
私のチームは主に快適さを理由に PVCS (チェックアウト) を選択しました。マージに関する疑念と、Subversion などのツールに対する認識の欠如が、間違いなくその一因となっています。

ここでの質問を理解できているかどうかわかりません。マージを完全にサポートしていない最新のソース管理システム (Visual SourceSafe 以外) を知りません。

私は間違いなくマージ方法論を好みます。

私は Visual Sourcesafe (二度と使用しないことを願っています)、CVS、Subversion、および bzr を使用しました。Visual Sourcesafe は「編集前にチェックアウト」する方法を強制するため、面倒な場合があります。CVS と Subversion は歴史的にマージを受け入れるのが得意ではありませんでしたが、Subversion 1.5 ではそれが改善されたと聞いています。

最初から頻繁なマージを念頭に置いて設計された VCS を使用することをお勧めします。私がこれを行うために使用したのは bzr ですが、他の主要な分散 vcs システム (git および mercurial) も同様に行います。

しかし、結局のところ、私はこの特定の分野に関する研究を知りません。一般に、プログラミングの効率に関する研究はほとんどありません。 ピープルウェア 注目すべき例外の 1 つです。

正直に言うと、その質問はよくわかりません。しかし、Perforce の効率性と、複数人によるファイルの非同期変更や編集内容のマージ処理を処理できることは保証できます。

Perforce では、あなたも変更しているファイルを誰かがチェックインした場合、次回サーバーから同期するとき (つまり、最新のファイルを取得します)、解決が必要な変更がいくつかあることが通知されます。これをいつ行うかはあなた次第です。ファイルを「解決」すると、ローカル バージョンにマージが行われます。これにはツールが適しています。

いつ実行するかを選択できることが重要です。自分のタスクに直接関係しない更新 (バグ修正など) を取得するために同期している可能性がありますが、その段階では、他の人のタスクに対処する必要はありません。作業中と同じファイルに変更すると、影響を受けます。したがって、続行してビルドとテストを実行し、その後、自分の時間でファイルを解決します。

もう 1 つは、更新されたファイルと最初に同期せずに編集内容を送信した場合です。この場合、Perforce は送信を阻止し、ファイルに解決するフラグを付けます。この段階で賢明な開発者であれば、マージを行ってから、変更を Perforce に送信する前に再コンパイルおよび/またはテストを行うでしょう。

これについて私が気に入っている点は、明示的に処理されていない変更を中央サーバーに送信するのを徹底的に阻止するため、ビルドが中断される可能性が最小限に抑えられることです。解決プロセスは簡単でオーバーヘッドが非常に低いため、効率の問題はまったくありません。

Perforce は、変更をどのように反映するかについての選択と制御を非常に明確に提供し、編集のマージを管理する優れたツールでこれをバックアップします。個人的には、選択と、選択を簡単に実行できる機能が好きです。疑いもなく、Subversion には独自の代替手段もあります。

おそらく慣れの問題だと思いますが、重大な、または測定可能な効率の問題はないと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top