web-dev-qa-db-ja.com

なぜGitのプルアンドプッシュアプ​​ローチがClearcaseのロックおよびハイジャックアプローチよりも優れているのですか?

私はGitの使用について同僚を説得しようとしていますが、プッシュの前にプルを行う利点を説明するのは難しいです。それをマージすると、他の開発者が彼の変更をプッシュしたので、変更をプッシュする前にそれらもマージすることになっています。無限にループします。

Clearcaseでは、作業中のファイルをロックして、誰も変更できないようにすることができます。変更したい場合は、ローカルマシンで「ハイジャック」し、後でマージする必要があります。どういうわけか、これはファイルを操作するためのより安全な(しかし迷惑な)方法のようです。

それでは、Gitのアプローチはどの程度正確に利点ですか?

4
Nav

まず第一に、Gitは分散型VCSです(ClearCaseとは対照的に、これは非常に集中化されています。「 基本的なクリアケースの概念とはすべての開発者は知っておくべきですか? ")

つまり、「ロックされた」ファイルを追跡する中央サーバーはありません。

第二に、あなたは一般的に単に引くだけでなく、あなたは pull --rebase with autostash ローカルの(まだプッシュされていない)変更を、公開された(プッシュされた)同時変更の上に再生するため。

これは、同時コラボレーションを可能にする自然なワークフローです。
ClearCaseは、少なくともスナップショットビューでも同時変更を許可します (ただし、 どのハイジャックされたファイルが変更されたかを簡単に知ることはできません )。

最後に、古い(1985)ClearCaseモデル(「 ClearCaseの利点/不利な点 」を参照)はあまり機能しません。 2015年にそれを使用すると、動的ビューを使用していない限り、多数のファイルを適切にスケーリングできず、それでもマージが非常に遅くなるため、時代遅れです。
IBMツールの使用を続行するがある場合少なくともRTC =(Rational Team Concert) 。それは ロック機構を持っています

2
VonC

どちらかを選択してください。2人が同じファイルを編集するため(クリアケース)、近い将来、常に警告が表示されますか可能性競合の可能性がありますか?または、VCSがそこで検出したときに警告を表示しますかis 2人が同じソースコード行、または互いに非常に近い行(Git)を編集したため、実際の競合

最初のモデルは時々いくつかの誤検知を生成しますが、これは煩わしい場合があります。一見すると、2番目のモデルはバグを導入するリスクが高いようです。これは、マージが正式に成功し、警告が表示されない場合、テストによってのみ明らかになる「セマンティックな」競合が発生するリスクがあるためです。しかし、私の経験では、実際には後者は無視できます。過去10年間にそのような状況に遭遇したことを覚えていることはありません。さらに、最初のモデルは実際に同じリスクを持っています。なぜなら、事前に同時編集についての警告を受け取ったからといって、2人の開発者が後でより慎重にマージ結果を検査することが自動的に保証されるわけではないからです。

4
Doc Brown

1つのケースでは、最初にロックした人が勝ちます。他のケースでは、最初にプッシュする準備ができている人が勝ちます。ほとんどの場合、優先したい人はプッシュする準備ができている人です。私の新機能が1週間残っていて、今日のリリースのバグの修正が完了している場合は、チェックインを優先する必要があります。

これにより、他の人に緊急でないロックを解放させ、緊急の変更をチェックインできるようになります。 「会話を強制する」という理由でこれを好む人もいますが、実際はそうではありません。適切に通信せずに重大な変更を加える迷惑な人々は、ハイジャックされたコピーにそれらの変更を加え、それらのファイルがロック解除されるのを待つことができます。ほとんどの場合、同じ最終結果のために人々を煩わせることになります。最初にチェックインする準備ができている人は誰でもそうし、後でチェックインする人々にマージを強制します。

2
Karl Bielefeldt

コミットする変更がありますが、それらは古いバージョンに基づいています。それは良くないね。どのソース管理システムでも、現在のバージョンに基づくように変更をリベースできます。これは自動ではなく、作業であり、競合が発生する可能性がありますが、すべて避けられません。これまでのところ、すべてが同じです。

ただし、変更のリベースと再テストのプロセスには時間がかかったため、完了するまでに、古いバージョンに基づいた変更が再び行われる可能性があります。通常、これは不運です(コードをリベースしてJoeの変更を含め、Jimは先月の作業をチェックインする必要がありました)。大きなチームで、同じファイルで作業している人がいる場合、これは問題になる可能性があります。

Gitを使用する場合、選択肢は次のとおりです。迅速にするか、完了するまで他の開発者に何もコミットしないように依頼します。他のシステムではファイルをロックできるため、他の開発者はcannot commitを実行できます。これは実際には同じことですが、自分の机に近づかず、ノーとは言えません。ファイルをロックしておらず、長期間にわたってロックしておくことを想定しているので、実際にはそれほど大きな違いはありません。私はいつも誰にも言わずに最初のリベースを行い、他の人をあまり煩わせないようにします。

1
gnasher729