チームはソースファイルの上書きをどのように防止しますか?[閉まっている]


26

たとえば、ゲームエンジンなどが複数の人によって同時に処理されているときに、上書きをどのように防ぐことができるのか、ということが起こりました。

開発者1が作業してAudio.cppおり、開発者2も作業をしているとましょう。Audio.cppこれは、一般的に大規模なチームで上書きに対処するためにどのように管理されていますか?(つまり、開発者2がファイルを開くのを停止して開発者1が終了するまで)


84
選択したタグの1つがすでに答えです。
フィリップ

18
実際、4つのタグのうち3つが答えですが 1つが答えです。
–MSalters

回答:


69

ほとんどのソフトウェア開発チーム(ゲーム開発だけでなく)は、バージョン管理ソフトウェアを使用してこの問題を解決します。例は

これらのすべてのツールにはいくつかの違いがありますが、基本的なワークフローは通常次のようになります。完全なコードベースを備えたプロジェクト用の中央リポジトリが1つあります。開発者がプロ​​ジェクトに参加する場合、「チェックアウト」を実行します。バージョン管理ソフトウェアはコードベースをローカルマシンにコピーします。ソフトウェアは、コードベースの現在のバージョン(「リビジョン」)を記憶しています。開発者が変更を加えてメインリポジトリに配置する場合、「コミット」を実行します。それらの変更は中央リポジトリにアップロードされ、新しいリビジョン番号が作成されます。

別の開発者が変更をコミットしたいが、一度チェックアウトしたリビジョンが最新のものではなくなった場合、バージョン管理システムはそれらを許可しません。開発者はまず、その間に起こったリビジョンを「プル」する必要があります。これにより、ローカルコピーが中央リポジトリの最新バージョンに更新されます。競合がある場合(中間リビジョンが変更したファイルに変更を加えた場合)、ソフトウェアは、競合するファイルを手動で編集(「マージ」)することで競合を解決するよう依頼する場合があります。それを行った後、変更を新しいリビジョンとしてコミットできます。


18
GitとMercurialは分散バージョン管理システムであり、少し異なる動作をすることに注意してください。単一の中央リポジトリは必要ありませんが、理論的には開発者が誰からでも直接更新をプルできるようにします。もちろん、実際には、1つのリポジトリ(GitHubなどの公開ホストにあることが多い)が「公式」リポジトリを宣言し、非分散バージョン管理システムの中央リポジトリのように多かれ少なかれ使用することは依然として一般的です。
イルマリカロネン

18
この回答は、マージが常に手動で行われることも意味します。ただし、ほとんどの場合、バージョン管理ソフトウェアは違いを自動的にマージでき、本当に厄介な変更のために手動での作業のみを必要とします。
ジョッキング

コメントでの長時間の議論は避けてください。これはディスカッションフォーラムではありません。それをしたい場合は、ゲーム開発チャットを使用してください。いくつかの接線コメントスレッドをクリーンアップしました。
ジョシュ

また、理想的には、各チームメンバーが特定のモジュールをほぼ独占的に担当し、まれに複数の人が短時間で同じソースファイルを変更します。このワークフローは競合する変更をマージする必要性を最小限に抑えるためです。しかし、常にそうとは限りません。
ニコラスミアリ

13

開発者は同じファイルを使用ません。

各開発者は独自のバージョンのファイルを所有しており、特別な種類のソフトウェアを使用して作業を管理しています。両方が変更を加えた場合、他の開発者が行った変更を上書きしようとすると、解決する必要のある競合が発生します。競合が発生しないと、私が説明したソフトウェアが文句を言い始めます。つまり、競合の原因となっている開発者は、自分の作業を他の開発者の作業と組み合わせる必要があり、その場合にのみファイルを「保存」できます。

これは、さもなければそれほど単純ではないバージョン管理の概念の一部の簡単な説明です。


6
また、彼らはコミュニケーションと呼ばれるこの斬新なことをします、そして、ソフトウェアは真空で書かれていません。そのため、彼らが対立を理解していない場合、彼らは他の人と話をするか、事前に調整します。
ブライアン

9

バージョン管理とマージとの競合の処理に関する他の回答で指摘されたポイントに加えて、チームメンバーが互いの作業を上書きしないようにする方法が少なくとも2つあります。

  • 一部のバージョン管理システム(SVNなど)では、ファイルのロックが許可されています。これは、あるチームメンバーが一定期間ファイルの排他的所有権を取得し、その後ファイルがロック解除されるまで、他のチームメンバーが競合する編集(または実際の編集)を行うことを防ぐことを意味します。

    ただし、これは多くの問題を引き起こす可能性があるため、通常はあまり使用されません。(特定の時間にファイルを操作できるユーザーを制限することにより)生産性を低下させ、誰かがファイルのロック解除を忘れた場合に問題を引き起こす可能性があります。また、少なくともSVN(他のVCSについてはわかりません)では、ファイルをロックしても他の人が作業コピーに変更を加えることはできませんが、変更をコミットすることはできません-開発者がロックされているため変更をコミットできないことを発見するためだけにファイルを変更します。

  • チームは、特定のファイルを一度に複数の人が操作しないように、開発者にタスクを割り当てることができます。たとえば、開発者はそれぞれプロジェクトの特定の部分(3Dレンダリング、ネットワーク、オーディオなど)を担当できます。コードベースが適切にモジュール化されている場合、ネットワークコードに割り当てられた開発者はファイルに触れる必要がほとんどありません。オーディオを扱う。

    もちろん、他の方法で管理する必要があるオーバーラップは常に存在します。


2
プラス面として、ロックは、.JPEGまたは他の非プレーンテキストファイルを編集できる唯一の方法です。これは理論上の制限ではなく、通常、マージツールがひどいことです。
–MSalters

2
@MSaltersツールが悪いということではなく、ほとんどのマージツールがバイナリデータ用ではなくテキスト用に作成されているだけです。そして、2つの変更がファイル内の同じピクセルを変更した場合、どのように競合を解決しますか?さらに悪いことに、JPEG圧縮による変化をどのように考慮しますか?これは非常に複雑な問題であり、単一の適切な解決策さえない場合があるため、ほとんどのマージツールがサポートしない理由は、その必要性は非常にまれであり、機能を実装するのが難しいためです。
モーリシー

3
@MaurycyZarzycki:同じ文字を変更することは同じピクセルを変更することに似ています:それは手動で解決する必要があります。.JPEGはおそらく悪い例でしたが、アーティストは損失の多い形式を扱うことがないため、今では気づいています。しかし、マージの問題は.PNGにも存在します。少なくとも、マージツールがXMLを壊すことなくXMLをマージできるようになれば幸いです。
–MSalters

@MSalters確かに、それで私はもっと同意できる。
モーリシー

1
@xorsyst:この方法で試してください:2つの場所でSVNからチェックアウトします。次に、ロケーション1からファイルをロックします。ロケーション2は、コミットまたは更新するまで、ファイルがロックされていることを認識しません。
ザンリンクス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.