Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@tpro

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

More than 1 year has passed since last update.

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

9
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tpro
XR開発、UnityやC++。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?