ゲームジャムで「ブランチ」を使ってみた


ゲームジャム環境でGitとかbitbucketとかSourceTreeを使う機会が多くなってきたのですが、
今回は初めて「ブランチ」という機能を使ってみた。
という備忘録。

「わざわざブランチとか使うの手間かかるよね。」
使わなくていいかでもいいのですが、
なんどもハマった経験から使った方がいい点もあることがわかった。

用語について

ブランチ 

枝分かれ マスターのある時点から違うものを作ること

プルリクエスト

プル(ひっぱって)をお願いする。ここでは、「masterにブランチしたものをひっぱってきて」 というイメージ。

なぜブランチするのか?

実のところ、慣れている人だけとか、一人で作業する分にはブランチいらないんです。
めんどくさいんですよね。
マスターだけでがんがんあげてればいい。
って思うけど。

まぁ

ブランチする条件は
- 「多人数」
- 「規模が大きくすべての把握が困難」
- 「実験的な機能追加中、元の方での修正が割り込まれそう」
な場合

ブランチのメリットは

  • 作業を同時並行で、やっていることが他の人にもわかる。
  • マスター履歴を汚さなくて済む。
  • ブランチして行った作業をマスターに戻す時だけ気をつける。

  • マスター管理の人(マージ専門の人)がいれば、「プルリクエスト」という形でお願いする。

良い点は、

  • マスター管理の人は、すべてのソースをなんとなく把握している必要があるけど、個別作業の人はだいたいおまかせできる。

  • 勝手にマスターにマージされて、とんでもない事になったりしにくくなる。(必ずプルリクエストを経由するので、やばい更新が未然に防げる。)

やばい更新例

  • アセットが数ギガのものが含まれているとか、何か別のサンプルが大量に含まれているとか本来いらんものとか。

一度バージョン管理にファイルが登録されると、著しく更新が重くなったり、被害が大きいが、
初心者の人とかはまりやすい。(ローカルでいじっていた実験サンプルを全部あげちゃうとか)

注意点としては

  • マージ作業が分離されるから、開発側は気楽になれるけど、マージする人にその負担が移動しているだけなので、マージ不能なプルリクエストをしても却下される可能性はある。ので、あらかじめどう作業するかはある程度話し合っておく必要がある。  話し合っていたけど例外は発生した時にここで止められるといった感じ。

作業の流れとしては・・・

ざっくりとは、
- ブランチ作る
- プルリクエストを送る
- マージする

となる。もうすこし付け加えると

  • マスターから自分作業用のブランチ作る
  • ブランチ上で作業し、適宜コミットなどしておく。
  • 作業が終わったら、マスターへマージするために、プルリクエストを送る
  • マスターへマージする
  • 作業ブランチ(ローカルの)を削除する。

という流れ。

具体的な手順

bitbucket使っていて、SourceTreeでブランチの作業メモですが。

ローカルを最新の状態に

とにかく他の人の作業分をサーバーからとってくるため、
masterの一番上が太字になっている事を確認。

なってなかったら、フェッチとかプルとかリベースとかなんとかする。

ブランチをつくる


ブランチに作業名とか、
作業が不明な場合は、名前と時刻とかユニークな名前になるようにしてブランチ作成します。

このあとは、ブランチ側で、ガンガン作業する。
適宜プッシュしたりして、作業履歴を残しつつ作業ができる。
あと、master側にもブランチしているというのが他の人にも見える。(何か作業しているんだなぁと)

この間にマスター側が修正されていて、自分も影響うけそうなのがあったりするなら注意(コンフリクトするかも)

プルリクエスト

で、一通り作業終わったら

ブランチを右クリックして「プル リクエストを作成...」を選ぶ

と、bitbucketのブランチのページが表示されて、そこでブランチからmasterへのプルリクエストが作成できます。

続けて下のほうに差分がでていて、
右上に「マージ」ボタンがでてくるページが表示されます。

うちのチームではこのページのアドレスをslackで担当に伝達してお願いする形でやってました。

プルリクエストが通ったら、マスター取り直して、またブランチ作るということを繰り返します。

さいごに

これで、masterへの更新のマージミスとか、コンフリクト時のパニックで作業時間をとられるとかが避けられるなら、
すばらしいことです。

  • 実際のところ、ブランチし忘れてマスターで作業してたりとかミスして、そんな時に限ってコンフリクトして、なくなく手戻りとかもあったりします。
  • あと、だれも弄ってない自分だけのソースやバイナリの場合は、自分でプルリクエストしてマスターにマージしてしまったりしています。

でも、一度、「何をするか」でブランチし、結果を「プルリクエストするまで」で、タスクが管理できるので、
ゲームジャム的に良い感じがします。