13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity + Bitbucket + SourceTreeで数名で別々のシーンを作成後マージする

Last updated at Posted at 2018-05-27

Unityで複数人で1つのシーンを作業する記事はたまに見かけますが、1人1つのシーンを担当するような記事はあまり見ません。
今回、Git管理でプログラマー数名でそれぞれ別々のシーンを作成後、1つにマージする機会がありましたのでメモしておきます。

はじめ、人数分のブランチをきってシーン作成後、Bitbucket上でプルリクエストを出してmasterブランチにマージしようとしていたのですがマージチェックがいつまでも完了しませんでした。
どうやらローカルでシーンのマージをした後、リモートにプッシュするのが正しいやり方のようです。
以下はそのやり方です。
自信無いので間違ってるとか、よりスマートな方法などがあればぜひご教示お願いします。

※環境:MacOS10.13.4, Unity2017.4.3f1, Bitbucket, SourceTree2.7.3

#UnityYAMLMergeをSourceTreeのマージツールとして設定
Sourcetree -> 環境設定 -> Diff

sourcetree_setting.png

Diffコマンド、Mergeコマンド共に
/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge
引数共に
merge -p $BASE $REMOTE $LOCAL $MERGED
を設定する

#p4mergeをmergespecfile.txtに指定
ここのページのDLリンクからDLします。Registerは特にしません。p4mergeのみチェックしDLします。

そして
/Applications/Unity/Unity.app/Contents/Tools/mergespecfile.txt
を開きます。
下の画像のように、unity use句とprefab use句、そしてApple File Mergeのところに変更をかけます。
mergespecificfile.png

それでは新規にUnityプロジェクトを作っていきます

#BitbucketでUnityプロジェクトを作成し、ブランチをきる

まず下の画像のように、Unity新規プロジェクトでmain(scene1)を作ってmasterにプッシュします。
そしてそのmasterを親とするブランチscene2とscene3を切ります。
ブランチscene2にはこれからscene2を追加、
ブランチscene3にはこれからscene3を追加しようというわけです。

この時にUnityの設定で、Editor -> Project Setting -> EditorでVersion ControlをVisible Meta File, Asset SerializationをForce Textにします。こうするとprefabやsceneといったバイナリフォーマットのファイルをテキストで確認する事ができるようになるようです

branches.png

unity_setting.png

#各ブランチで担当シーンを実装->コミット->プッシュ
(SS撮り忘れちゃいました...)scene2実装担当者は、Sourcetreeのブランチでリモート->scene2をダブルクリックでブランチscene2をローカルにチェックアウトします。

  • リモートブランチの表示更新がされていない場合は、masterブランチで一度プルをかけた方がいいかもしれません

同じく、scene3実装担当者は、Sourcetreeのブランチでリモート->scene3をダブルクリックでブランチscene3をローカルにチェックアウトします。そしてUnityを開いてシーンの実装作業をしていきます。下の画像はscene3の場合です

unity_scene3.png

Unityで担当シーンを作成したら、Sourcetreeでコミット->プッシュします

commit_scene3.png

ここまでやると、Bitbucket上はこのような状態になります。枝分かれしちゃってますのでこれをマージしたいわけです。

commits.png

#ローカルでブランチをマージ
今回はscene2実装担当者がリモートのscene3ブランチをローカルにプルしてマージする事にします。
checkout_scene3_to_scene2.png

マージ先がscene2,マージ元がscene3なので、現在の作業リポジトリをscene2に切り替えます。
sourcetree_scene2_scene3.png

マージ->ログからマージ->scene3選択->該当コミット選択->OK
sourcetree_merge.png

#コンフリクトを解決する
Uncommitted Changeを選ぶと、下の画像のように、!マーク(コンフリクト有)のファイルがある事がわかります。1つ1つ解消していきます。まずassetdatabase3はマージツールで開く事ができないので、「自分の変更を使って解決」か「相手の変更を使って解決」かどちらかで解決します。

conflict_assetdatabase3.png

CurrentLayoutとLastSceneSetupについてはp4mergeで開けるので「外部マージツールを起動」を選択します。
見方は左から「マージ先の内容」「共通の親の内容」「マージ元の内容」
下が「コンフリクト解決後の内容」です

conflict_currentlayout.png

conflict_lastscenesetup.png

#リモートにプッシュ
下の図のようにコンフリクトが全て消えたら、Unityで開いてシーンのマージが出来ているか確認します。場合によってはDefaultLayoutの再設定が促されたり、Rebuildが必要になるかもしれません。

sourcetree_after_merged.png

unity_merged_scenes.png

問題ない事が確認出来たら、リモートにプッシュします。この時点でマスターにまでプッシュしてしまうかどうかは運用状況に寄るかと思います。
push_after_merged.png

Bitbucketでも下の図のように確認出来ました
bitbucket_after_merged.png

以上です。
ただ単にシーンを追加しただけなので、実際はもっと色々大変な事があると思います...

参考URL:
http://tsubakit1.hateblo.jp/entry/2015/05/14/040852
https://muzigram.muzigen.net/2017/06/unitysceneprefabunityyamlmerge.html
http://labs.gree.jp/blog/2015/04/13836/
http://wadahiro.hatenablog.com/entry/20111115/1321372150

Windowsならp4mergeじゃなくMeldでもいいと思います
https://www.youtube.com/watch?v=EQB-N-ClO9g

*あと、この記事用に話を簡単にする為にそれっぽくブランチを切りましたが、GitFlowを織り交ぜてちゃんとした方がより良い運用だと思いました
https://qiita.com/Sansuusetto/items/90b602f25f49016188d3

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?