UnityプロジェクトをGitで管理

# 前提

* Bitbucket使用
* SourceTree使用

# 1. Unityプロジェクト作成と初期設定

適当な場所にUnityプロジェクトを作成しUnity Editorで開く。
Edit > Project Settings > Editor を選択し、以下項目を設定して保存する。

![EditorSettings](https://qiita-image-store.s3.amazonaws.com/0/242340/40660b4e-fedc-2af9-47c1-ca05aba00504.png)

* Version Control - Mode : Visible Meta Files
metaファイルはAssetフォルダ内の全てのアセットに対してUnityで必要な管理情報が記載されるファイルで、metaファイルを表示させることでUnity外部のバージョン管理システムを有効化する。


* Asset Serialization : Force Text
全てのアセットをテキスト形式に変換することで、SceneやPrefabなどのバイナリフォーマットのファイルをテキストで見ることでできるので、バージョン管理し易くなる。

# 2. Unityプロジェクトでローカルリポジトリ作成

初期設定が完了したUnityプロジェクトでローカルリポジトリを作成する。
この時リモートリポジトリは作成しない。

![ローカルリポジトリ作成](https://qiita-image-store.s3.amazonaws.com/0/242340/aa9ad25d-f3f2-2bcd-9e34-d4b8dbff301d.png)


変更ファイルが800以上ある...？

![ローカルリポジトリ作成後](https://qiita-image-store.s3.amazonaws.com/0/242340/423fabf6-5b09-e3f0-368b-145a397b5318.png)

# 3. 無視リストを設定

800以上あるファイルのうちバージョン管理が必要なのは以下ディレクトリ配下のファイルのみ。

* Assets
* ProjectSettings
* UnityPackageManager

それ以外はgitignoreに設定して管理対象外とする。
GitHubにテンプレートがあるので拝借。

[Unity.gitignore](https://github.com/github/gitignore/blob/master/Unity.gitignore)

```bash
$ curl -o .gitignore https://raw.githubusercontent.com/github/gitignore/master/Unity.gitignore
```

中身はこんな感じ

```bash
$ cat .gitignore
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
Assets/AssetStoreTools*

# Visual Studio cache directory
.vs/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.opendb

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Builds
*.apk
*.unitypackage
```

かなり減った

![無視リスト設定後](https://qiita-image-store.s3.amazonaws.com/0/242340/3d07873e-e76f-bf12-a411-67e0592a30d6.png)

# 4. Git LFS トラック対象ファイル設定

画像や音声ファイルなどのバイナリデータはファイルサイズが大きくなりがちなのでGit LFSトラック対象とする。
またまた以下を拝借。

[.gitattributes for Unity3D with git-lfs](https://gist.github.com/nemotoo/b8a1c3a0f1225bb9231979f389fd4f3f)

```bash
$ curl -o .gitattributes https://gist.githubusercontent.com/nemotoo/b8a1c3a0f1225bb9231979f389fd4f3f/raw/15f60a55a50b5c058de5e14369051ed268db0c77/.gitattributes
```

中身はこんな感じ

```bash
$ cat .gitattributes
## Unity ##

*.cs diff=csharp text
*.cginc text
*.shader text

*.mat merge=unityyamlmerge eol=lf
*.anim merge=unityyamlmerge eol=lf
*.unity merge=unityyamlmerge eol=lf
*.prefab merge=unityyamlmerge eol=lf
*.physicsMaterial2D merge=unityyamlmerge eol=lf
*.physicsMaterial merge=unityyamlmerge eol=lf
*.asset merge=unityyamlmerge eol=lf
*.meta merge=unityyamlmerge eol=lf
*.controller merge=unityyamlmerge eol=lf


## git-lfs ##

#Image
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.gif filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.ai filter=lfs diff=lfs merge=lfs -text

#Audio
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text

#Video
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text

#3D Object
*.FBX filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -text
*.obj filter=lfs diff=lfs merge=lfs -text

#ETC
*.a filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.dll filter=lfs diff=lfs merge=lfs -text
*.unitypackage filter=lfs diff=lfs merge=lfs -text
*.aif filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.rns filter=lfs diff=lfs merge=lfs -text
*.reason filter=lfs diff=lfs merge=lfs -text
*.lxo filter=lfs diff=lfs merge=lfs -text
```

あとは適当な画像を入れてcommitし、リモートリポジトリを作成してpush
Bitbucket側の設定でGit LFSにpushしたファイルが表示されていればOK

![GitLFS](https://qiita-image-store.s3.amazonaws.com/0/242340/8c65160a-024d-e29d-8a38-e0675b0b3363.png)

おわり