たとえば、ゲームエンジンなどが複数の人によって同時に処理されているときに、上書きをどのように防ぐことができるのか、ということが起こりました。
開発者1が作業してAudio.cpp
おり、開発者2も作業をしているとしましょう。Audio.cpp
これは、一般的に大規模なチームで上書きに対処するためにどのように管理されていますか?(つまり、開発者2がファイルを開くのを停止して、開発者1が終了するまで)
たとえば、ゲームエンジンなどが複数の人によって同時に処理されているときに、上書きをどのように防ぐことができるのか、ということが起こりました。
開発者1が作業してAudio.cpp
おり、開発者2も作業をしているとしましょう。Audio.cpp
これは、一般的に大規模なチームで上書きに対処するためにどのように管理されていますか?(つまり、開発者2がファイルを開くのを停止して、開発者1が終了するまで)
回答:
ほとんどのソフトウェア開発チーム(ゲーム開発だけでなく)は、バージョン管理ソフトウェアを使用してこの問題を解決します。例は
これらのすべてのツールにはいくつかの違いがありますが、基本的なワークフローは通常次のようになります。完全なコードベースを備えたプロジェクト用の中央リポジトリが1つあります。開発者がプロジェクトに参加する場合、「チェックアウト」を実行します。バージョン管理ソフトウェアはコードベースをローカルマシンにコピーします。ソフトウェアは、コードベースの現在のバージョン(「リビジョン」)を記憶しています。開発者が変更を加えてメインリポジトリに配置する場合、「コミット」を実行します。それらの変更は中央リポジトリにアップロードされ、新しいリビジョン番号が作成されます。
別の開発者が変更をコミットしたいが、一度チェックアウトしたリビジョンが最新のものではなくなった場合、バージョン管理システムはそれらを許可しません。開発者はまず、その間に起こったリビジョンを「プル」する必要があります。これにより、ローカルコピーが中央リポジトリの最新バージョンに更新されます。競合がある場合(中間リビジョンが変更したファイルに変更を加えた場合)、ソフトウェアは、競合するファイルを手動で編集(「マージ」)することで競合を解決するよう依頼する場合があります。それを行った後、変更を新しいリビジョンとしてコミットできます。
開発者は同じファイルを使用しません。
各開発者は独自のバージョンのファイルを所有しており、特別な種類のソフトウェアを使用して作業を管理しています。両方が変更を加えた場合、他の開発者が行った変更を上書きしようとすると、解決する必要のある競合が発生します。競合が発生しないと、私が説明したソフトウェアが文句を言い始めます。つまり、競合の原因となっている開発者は、自分の作業を他の開発者の作業と組み合わせる必要があり、その場合にのみファイルを「保存」できます。
これは、さもなければそれほど単純ではないバージョン管理の概念の一部の簡単な説明です。
バージョン管理とマージとの競合の処理に関する他の回答で指摘されたポイントに加えて、チームメンバーが互いの作業を上書きしないようにする方法が少なくとも2つあります。
一部のバージョン管理システム(SVNなど)では、ファイルのロックが許可されています。これは、あるチームメンバーが一定期間ファイルの排他的所有権を取得し、その後ファイルがロック解除されるまで、他のチームメンバーが競合する編集(または実際の編集)を行うことを防ぐことを意味します。
ただし、これは多くの問題を引き起こす可能性があるため、通常はあまり使用されません。(特定の時間にファイルを操作できるユーザーを制限することにより)生産性を低下させ、誰かがファイルのロック解除を忘れた場合に問題を引き起こす可能性があります。また、少なくともSVN(他のVCSについてはわかりません)では、ファイルをロックしても他の人が作業コピーに変更を加えることはできませんが、変更をコミットすることはできません-開発者がロックされているため変更をコミットできないことを発見するためだけにファイルを変更します。
チームは、特定のファイルを一度に複数の人が操作しないように、開発者にタスクを割り当てることができます。たとえば、開発者はそれぞれプロジェクトの特定の部分(3Dレンダリング、ネットワーク、オーディオなど)を担当できます。コードベースが適切にモジュール化されている場合、ネットワークコードに割り当てられた開発者はファイルに触れる必要がほとんどありません。オーディオを扱う。
もちろん、他の方法で管理する必要があるオーバーラップは常に存在します。