Unityで始めるバージョン管理
Git LFS入門編
広島Unity勉強会 ナカオクタカヒロ
1
ナカオク タカヒロ
NAKAOKU    TAKAHIRO
2
1992年 生まれる
2002年 プログラミングを学び始める
2014年 TPSゲーム-Religion をリリース
同年  広島Unity勉強会 を立ち上げ
2016年 CoderDojo紙屋町 に参加
kamera25
Github/FB/Twitter
3
って何?
4
Unity Technologies 社が出している
インタラクティブ
メディア
を作成するためのツール
5
6
Religion
・自作のOSSオンラインTPSゲーム
・Unityを使って開発
・バージョン管理にGitとBitbucketを使っていた
https://crowsullcore.jimdo.com
開発当初
Gitについて詳しくなかった。
「とりあえずバイナリも全部コミットしときゃ良いだろう」
7
開発中盤
「?。クローン超遅いぞ?」
8
9
10
?
?
?
なんで超重くなった?
11
・Gitはファイルを丸ごと圧縮して、リポジトリに保存する
・つまり重いデータ(バイナリデータ)を変更しても、丸ごと保存される
リポジトリにバイナリが入ると
ブクブク太る
12
https://confluence.atlassian.com/bitbucket/what-kind-of-limits-do-you-have-on-r
epository-file-upload-size-273877699.html
1GB以上使ったらメールで警告出すでー (2GB超えたらコミットさせへんで )
13
https://confluence.atlassian.com/bitbucket/what-kind-of-limits-do-you-have-on-r
epository-file-upload-size-273877699.html
1GB以上使ったらメールで警告出すでー (2GB超えたらコミットさせへんで )
ひでぶ
Unity Teams
Unity公式のバージョン管理サービス
・CIも可能
●無料枠
1GB / 3人 / 90日までの履歴保存
●Advance(月$9)
25GB / 3人 / CI利用可 / 無期限の履歴
保存
14
やっぱりGit
使いたいじゃないですか
15
16
Git LFS
https://git-lfs.github.com
17
Git LFSとは
・GitHub社が作成したテキストと巨大なバイナリデータを分ける拡張
Git only Git LFS
Code
IMG
Doc Git Repository
Fat!!!
Code
IMG
Doc
Git Repository
LFS Server
18
Git LFSの仕組み
・リポジトリには、ポインタファイルが存在していてファイルのありかを指してる
Git Repository
LFS Server
Pointer File
version https://git-lfs.github.com/spec/v1
oid sha256:a50b0385829c40c5b426ba2dc37f280acd8c0
fce4a21213ba7693a49fd5151c6
size 30037
IMG
19
Git LFSの仕組み
・クローン時にGitリポジトリをダウンロードする
・そこからポインタファイルを読んで必要なファイルだけをDLする。
Git Repository
LFS Server
IMG
Local Git
Repository
Pointer File
2.Request
Code
1.Clone
Pointer File
20
LFSを使うときにやらないといけないこと
・Git LFS をインストールする(1回だけ)
・SourceTreeとかなら標準で入ってます
・普通にGitリポジトリを作成する
・LFSでトラックする形式を決める
・.gitattributesで指定すると楽 (後述)
git lfs track "*.jpg"
Git LFSが使える ホスティングサービス
21
GitHub Bitbucket GitLab
容量 1GB(アカウントごと)
転送 1GB/月(アカウントごと)
pack($5)追加で容量と転送容量
を50GBに
容量 1GB(リポジトリごと)
$10で5GB
容量 10GB(リポジトリごと)
CIとデプロイも使える(Runners/
無料)
無
料
※2018年1月20日現在
備
考
実際にUnityをプロジェクトを
管理してみる
22
23
Unityで使ってみる
・Edit > Project Settings > Editor をクリック
共通
24
Unityで使ってみる
・Version Control の項目を Visible Meta Files にする (標準はHidden)
共通
25
Unityで使ってみる
・Hidden Meta Files のままだと、.metaが生成されない
・Hiddenのままでも頑張れば出来るけど・・・
Visible Meta FilesHidden Meta Files
共通
26
Unityで使ってみる
・Asset Serialization の項目を Force Text にする
・Sceneファイル をテキスト形式で出力させる
・
共通
27
Unityで使ってみる
・Gitリポジトリを作成し、.gitignoreを追加する
https://github.com/github/gitignore/blob/master/Unity.gitignore
共通
28
Unityで使ってみる
・.gitignoreを追加することで、コミットしないファイルを決める
共通
絶対に必要なのは
Assets (素材データ関連)
ProjectSettings (設定データ)
UnityPackageManager (将来的な機能?)
だけ!
Ver.2017.3の場合
29
Unityで使ってみる
・Gitリポジトリを作成し、.gitattributesを追加する
・LFS管理下のファイル形式をまとめて指定する
https://gist.github.com/nemotoo/b8a1c3a0f1225bb9231979f389fd4f3f
LFS
30
Unityで使ってみる
・あとはふつーにコミット&プッシュする → Done!
共通
ね、簡単でしょ?
Unityでより楽に
管理するために
31
LFS関係ないけど
32
GitHub for Unity
・GitHub社公式のUnityエディタ拡張
・Unity Editor 上でコミット&プッシュできる
33
UnityYAMLMarge
・Unityには複数のシーンを合成する、マルチシーン合成機能がある
・けど、1つのシーンやプレファブを複数人で弄るとコンフリクトする。
このツールでは、YAMLを解析して上手くマージしてくれる。
(git-flowで作業する時は入れた方がよさそう。)
https://docs.unity3d.com/ja/current/Manual/SmartMerge.html
UnityYAMLMarge
・コンフリクトを起こしたときに実行する。
34
A
B
A'
同じファイルを編集す
る。
C
Conflict!
意味的にYAMLを解釈して、コ
ンフリクトを解消する。
Tanaka-branch
Shimizu-branch
デモ
3535
A A'
Conflict!
Tanaka-branch
Shimizu-branch B
C
フォークしてから、Tanakaは
緑のハコに、Shimizuは球体
追加したんか。
二つを合成や!
36
最悪解決できなかったら
37
UnityPackageで手動解決だ。要約:Zipで送って上書き
まとめ
38
・GitでもLFS使えば、バイナリ怖くない
・開発にはSourceTreeおすすめ
・最悪、unitypackage入れれば解決できると割り切る
・ZenjectとかのDIを使ってみる
・複数人で楽しいゲーム開発を!
Do it all, with unity!
39
ご静聴ありがとうございました!
参考URL
・Unityマニュアル - SmartMerge
https://docs.unity3d.com/jp/current/Manual/SmartMerge.html
・How to Git with Unity
https://robots.thoughtbot.com/how-to-git-with-unity
・Let's talk about Unity + Git: Best Practices and Workflow
https://www.reddit.com/r/gamedev/comments/6mc1az/
lets_talk_about_unity_git_best_practices_and/
・FLAT ICON DESIGN
http://flat-icon-design.com
40

Unityで始めるバージョン管理 Git LFS 入門編