質問

バージョン管理に関する私が読んだいくつかの投稿に基づいて、人々はバージョン管理システムの悲観的なロックは悪いことだと考えているようです。どうして?ある開発者がファイルをチェックアウトしている間に別の開発者が変更を送信できないようにすることを理解していますが、それではどうでしょうか?コードファイルが非常に大きく、常に複数の人が同時に作業している場合は、コードを再編成する必要があると申し上げます。それを小さな機能単位に分割します。

同時バージョンのコード変更の統合は、優れたバージョン管理システムが提供するツールを使用した場合でも、面倒でエラーが発生しやすいプロセスです。可能な限り避けるべきだと思います。それでは、なぜ悲観的なロックは推奨されませんか?

役に立ちましたか?

解決

一般的にプロジェクトとチームに依存します。悲観的ロックは理解しやすいので良いです-一度に1人の開発者で、マージは不要です!

ただし、欠点はまさにそれです。一度に1人の開発者です。私は現在、同僚が現場に行っており、彼が去る前にすべてをチェックアウトしたので、バグを修正する必要がある場合、彼は戻ってすべての変更をチェックインできます... 、私とベースの開発チームの残りのメンバーにとってはひどいです。

チームでペシミスティックロックを回避できる場合、それを使用するのは問題ありません。本当に嫌いなのは、Visual SourceSafeのデフォルトのプラクティスが理由です。多くの変更をマージすることに自信がない場合は、それを使用する別の理由があります-楽観的なロックSCMを使用し、マージを開始したことがある場合、回復がどれだけ難しいかがわかります。

マージを処理できる場合は、オプティミスティックロックが優れているのでお勧めしますが、使用したくない場合はオタクカードを渡す必要はありません。

他のヒント

  1. ソースセーフで遊び、開発者に2週間の休暇を残す。それに加えて、VSS管理者がいない。これで修正を投稿できましたが、開発者のせいではできません
  2. 複数の機能やバグ修正を行っている場合。コードがどれほど小さくても、中央のファイルの競合が発生します。
  1. ボブはFooBar.javaを編集する必要があります
  2. ジョンは編集のためにチェックアウトしました
  3. ボブはローカルコピーを編集し、FooBar.java.bakとして保存します
  4. ジョンがチェックインすると、ボブがチェックアウトします
  5. BobはFooBar.java.bakをコピーしてチェックインします
  6. ジョンは自分の機能を再実装します

それは何度も何度も起こります。このプロセスは煩わしいため、開発者はこれを行います。

  1. ボブはFooBar.javaを編集する必要があります
  2. ジョンは編集のためにチェックアウトしました
  3. ボブはジョンが完了するまで親指をいじるのを待たなければなりません

悲観的なロックはアマチュアアワーのように感じられます。

  • 常に次のオプションがあるわけではありません ファイルをバラバラにする
    • 構成ファイル
    • XMLファイル
  • 比較的小さなファイルでも、複数の開発者がアクセスする必要がある別個の部分を含むことができます
    • ライブラリ
    • ユーティリティ
  • マージツールは、以前よりもはるかにスマートになりました
    • 競合はかなりまれです
  • 開発者が「偶然」ファイルを持っていることによる遅延を減らします。チェックアウト

開発者が競合のマージと修正を処理できない場合、再教育する必要があります。

たとえば、ある人(Web開発者)がレイアウトコードを変更し、他の誰かがJSPが使用しているモデルのAPIを変更する可能性があるJSPと競合するのは、小さなファイルでも一般的です。

ボブとジョンの場合については、svnのような協調システムはロックシステムよりもこのシナリオを防ぐことはできません。 FooBar.javaを「更新」して、最新版を持っているというsvnを満たし、そのファイルをローカルで削除し、ベースラインバージョンに関係なく作成した自分の個人用コピーで上書きし、チェックインして、喜んで破棄します他の男の変更。 ロックするかどうかにかかわらず、これを妨げるシステムはないので、議論に持ち込むことすら意味がありません。

本当の問題は、あなたのバランスを決定することです

マージミスの可能性           対 ファイルをロックしているユーザーに起因する不便

ロックシステムまたは非ロックシステムのいずれかが「優れている」という概念ナンセンスです。

VSSをデフォルトのフルロックモードで6人の開発者と共に使用しましたが、次のように機能しました 夢。時折、誰かがロックを解除するのを忘れてしまい、それらを追い詰めるか、手動でロックを解除し、戻ったときに手でマージする必要がありますが、 これは非常に最小限でした。 svnが自動マージを何度も台無しにしているのを見たことがあります。 2人が同じファイルを自動的にマージできない方法で同じファイルを変更した場合、常に「競合」にフラグを立てるわけではありません。
逆に、VSSのロックに苛立ち、自分のコピーを編集し、 他の人のコードの上にそれらをずらっとチェックインすると、私は見ました svnは、最後にチェックアウトしてから他の人によって変更されたものを誤ってチェックしようとするときに、私を便利にキャッチします。

私のポイントは、これは理にかなった議論ではないということです。どちらのシステムの成功も落ち着く 1つのシステムかどうかではなく、競合ポイントが発生したときの管理方法 または他の方が優れています。

悲観的ロックは(個人的な経験)コラボレーションの方法です。それは時々、チームの良好なコミュニケーションによって簡単に置き換えられます。 「ちょっと、ちょっとの間、このいくつかのファイルで作業するつもりです」と言うだけで。

ロックなしで2〜6人のチームで働いたことがあり、通常の必要なマージを超えて問題は発生しませんでした。

また、 Visual SourceSafe でホストされているプロジェクトのロックを1回行いました。私見では逆効果でした。

ソフトウェア開発者は常に楽観的です-推定スキルを見てください!

実際には、競合はまれであり、ロックを心配する必要がないという利点は、時折発生する競合の解決手順よりも重要です。

  

コードファイルが非常に大きく、常に複数の人が同時に作業している場合

このような場合は、「人間」が担当し、変更を調整するときです。理想的な場合、およびプロジェクト管理がうまくいけば、誰かが調整するのでロックされたファイルを変更しようとしている時間にめったにヒットしないので、これは実際には起こりません。

つまり、「Bob」がコンポーネントX / Y / Zで大幅な変更を行っていることがわかります。コンポーネントXにバグ修正がある場合は、送信する前にBobと話す必要があります。変更。

私が言うとおり、これは理想的です;)

重大な競合が発生する可能性がある場合は、悲観的ロックをお勧めします。ほとんどのプログラミングでは、深刻な競合は発生しないため、悲観的なロックはほとんど意味がありません。これの例外は次の場合です:

  • 実際にはマージできないバイナリファイルでの作業-アートアセット(モデル、テクスチャなど)は良い例です。
  • マージする方法がわからず、学習したくない非技術ユーザーとの作業(主にアーティストですが、一部のテクニカルライターもこれに適合します)。
  • 複雑度が高いために簡単にマージまたは小さなファイルに分割できない非常に大きなファイルで作業する(そのような状況は一度も見たことがないが、可能だと確信している)。

それ以外の場合...

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