多人数でゲームを作る際には、他人が手を加えたコードを誤って上書きして消してしまわないようにする必要があります。これをサポートするプログラムがソースコードのバージョン管理ツールです。
実は Subversion というのは、このソースコードのバージョン管理ツールの代表的な実装なのです。 Subversion を使うと先のシナリオのような事態に陥っても問題を解決しやすくなります。
まず、先のシナリオのように、 Byerkut さんと yomogi さんが同時に bootstrap.cpp を更新してしまった際に、 Subversion を使っているとどうなるのかというと、なんと何事もなかったかのようにふたりの作業が消失せずに反映されるのです。 Subversion を使うと、同じファイルが複数の人間によって編集された場合、 NAS へアップロードする段階で、ふたりの編集ポイントをマージ(併合)します。つまり、 Subversion を使うと、「これから編集しようとするファイルは、他の誰かによって編集されているかもしれない」という配慮が必要なくなるのです。もう、好きなときにソースコードを編集することができます。なんて便利なんでしょう!
しかし、ひとつだけ注意点があります。 Subversion は同じファイルが別の人間によって変更された場合、それぞれの変更点をマージ(併合)してソースコードを保ちますが、これはそれぞれの変更点が異なる場合です。たとえば Byerkut さんが bootstrap.cpp の Activate() 関数を変更し、 yomogi さんは bootstrap.cpp の Deactivate() 関数を変更した場合などのように、変更を加えた場所が異なるときのみの話なのです。もし、 Byerkut さんと yomogi さんが同じ行のコードを書き換えた場合、 Subversion はどちらの変更が正しいのか判断できないため警告を発します。警告を受けたプログラマは他のプログラマと議論してどちらの変更が正しいのかを決定し、 Subversion へコミットしなければなりません。
ちょっと覚えることが多くて面倒に感じられますでしょうか?しかし、多人数でのソフトウェア開発において、ソースコードのバージョン管理ツールを使うことはデファクトスタンダードになっています。これからチームで同人ソフトを作ろうと思われている方は Subversion について一考いただくことをおすすめします。
ちなみに Chaw は Subversion のフロントエンドを備えたバグトラッキングシステムです。一言で言って「プロジェクト管理システム」です。
Comments
なるほど…
やはり、比較をするのは機械なので使いやすい反面、使いにくい部分が出てくるのですね
例えば、変更点が同じだった場合、比較のために最後にイニシャルで_bとか_yと二つのファイルに分け、変更場所を指定するファイルを別に用意し、投票的なものをしてもらう…
といった仕組みなのでしょうか
気になるのが
例えば自分が危険な変更をしてしまった時、Byerkutさんが気づいて元のバージョンに戻したい場合は簡単に出来るのでしょうか
次に、テキスト比較のプログラムがどのようになっているかわかりませんが、
大幅にテキストを変更した場合(ソースコード全体に影響がある場合)に、変更部分だけ書き換えるといったことが可能なのでしょうか…
例えば、変数名を変更した場合、ソースの複数の箇所を変更する必要があることになりますが、機械は正常に比較できるのでしょうか
同じ時に、Byerkutさんが、yomogiが変更している最中の変数を使用する関数を追加した場合、コンパイル時にエラーが出てしまいます。(変数名を書き換えることなんてないとは思いますが、一例として…)
年末ですし、忙しそうですので、、、
質問の返事は気長に待ちます
とりあえずお仕事頑張って下さい
> yomogi さん
こんにちは(^^
ソースコードのバージョン管理ツールは良いですよ♪
> 例えば、変更点が同じだった場合、比較のために最後にイニシャルで_bとか_yと二つのファイルに分け、変更場所を指定するファイルを別に用意し、投票的なものをしてもらう…
> といった仕組みなのでしょうか
そういう解決方法もありですが、たぶん、
ゲーム開発くらいだったら当事者間での取り決めで大丈夫だと思います。
> 例えば自分が危険な変更をしてしまった時、Byerkutさんが気づいて元のバージョンに戻したい場合は簡単に出来るのでしょうか
めちゃくちゃ簡単にできます。
コマンドを打つだけです。
しかも、過去のどのバージョンへも復元が可能です。
> テキスト比較のプログラムがどのようになっているかわかりませんが、
> 大幅にテキストを変更した場合(ソースコード全体に影響がある場合)に、変更部分だけ書き換えるといったことが可能なのでしょうか…
マージ(併合)に関しては Perl を生んだ高名なプログラマーの
アルゴリズムが使われており、すでに実績も豊富にあるので心配ありません。
変更箇所が細切れでも広くても問題なく処理します。
> 同じ時に、Byerkutさんが、yomogiが変更している最中の変数を使用する関数を追加した場合、コンパイル時にエラーが出てしまいます。
その通りです。
ですので、サーバへアップロードする際には
コンパイルエラーが0の状態にしなければなりません。
これは暗黙のルールです(マナーですかね)。
Contributions