web-dev-qa-db-ja.com

バージョン管理でのロック/ロック解除の使用はアンチパターンですか?

最近、仕事でGitを使い始めました。以前は、VSS( これにはいくつかの問題があります )しか使用していませんでしたが、これまでのところ、Gitは桁違いに優れています。

ここでの主な違いは、VSSに「サーバー」バージョンが集中しているときにGitが配布されることと、VSSが「checkout-lock-checkin」ワークフローを使用するのに対し、Gitはそうではないことです。私たちのチームでコードを操作する際に発生した最大の問題は、コードがチェックアウトされ、他の人が利用できないことに関連しています。これは作業をかなり遅くしますが、これはVSSに固有のものではないことも知っています。 CVSのような他のソース管理システムも、ワークフローの一部としてファイルをロックしているようです。

ロックをバージョン管理システムの一部にする理由はありますか?それとも開発ワークフローですか?または、おそらくロックの慣行は悪い習慣と見なされ、推奨されるべきではありませんか?

6
joshin4colours

ロックをバージョン管理システムの一部にする理由はありますか?

はい、もちろん!つまり、マージについて心配する必要はありません。これは、バージョン管理環境では深刻な問題です。

しかし、苦い経験から、マージよりも大きな痛みは、開発全体をコミットする準備ができるまで、チームがファイルの開発をロックアウトすることを余儀なくされていることからわかりました。これが、TFS(およびそれ以降のバージョンのVSS、デフォルトではオンになっていないが)を含む最新のVCSが、何らかのコストでマージを完全に不要にするよりもマージを容易にすることを好む理由です。

19
pdr

誰もがテキストファイルで作業できるわけではないため、これはアンチパターンではありません。 this person が指摘するように、後で簡単にマージできない、文書化されていない独自の形式でバイナリファイルを作成するアプリケーションを使用している可能性があります。

より単純なケースは画像ですが、一度に1人で作業するのは理にかなっています。ロックしないと、チームの良好なコミュニケーションが必要になるので、誰もが他の誰もが取り組んでいることを理解し、お互いのつま先を踏まないようにします。コミュニケーションはすべてのチームで重要ですが、仕事の衝突を回避するためにそれを信頼することは、大規模なチームでは不十分にスケーリングする可能性があります。

あなたがdoを使ってテキストファイルを操作する場合でも、コンテキスト(@mikeに感謝)のために不便な場合があります。たとえば、次の質問を見てください: 行内でのgitマージ 、具体的には:

LaTeXドキュメントの場合、これは特に煩わしいです。LeTeXを書くときの一般的な習慣は、1行ごとに段落全体を書き、テキストエディターにWordの折り返しを処理させるだけです。

その質問に対して実行可能な解決策が提案されていますが、人間の言語で作業する場合、物事はしばしばトリッキーになります。

12
R0MANARMY

ほとんどのバイナリファイル形式は、ソース管理でマージできません。 2人で同時に変更した場合、最後にチェックした方が「勝ち」。ロックはそのような状況で役立ちますが、多くのチームはそのような問題を防ぐために他の通信手段(所有者の割り当てなど)を使用しています。

明らかにその支持者がいますが、バイナリファイル以外では、ほとんどの人はVCSロックがアンチパターンであることに同意します。多くの場合、バージョン管理の外でマージを実行したり、他の誰かがロックしたファイルを「デバッグ目的で」ローカルで変更したり、チェックインを怠ったりします。 。そのため、現在最も集中化されたVCSでは、特定のファイルだけを選択してロックし、他のファイルはロックできません。

6
Karl Bielefeldt

例によるバージョン管理を読むことを強くお勧めします: http://www.ericsink.com/vcbe/ ロックが機能する場合と機能しない場合を含むさまざまなシステムの概念を非常に明確に説明します(これは実際に非テキストファイルであり、マージが解決できない場合です。)(オフラインアクセスのため)真のロックは不可能ですが、他の人の作業を上書きしないようにするために、ある種のロックの概念が役立ちます。

(また、git-setupで中央サーバーを引き続き使用できることも指摘しています。そうすることは理にかなっている可能性があります。分散は、リポジトリの1つが特別な意味を持つことができないことを意味しません。)

3
Inca