UnityプロジェクトをGit LFSでバージョン管理する　個人的なオススメの設定 

#はじめに
最近弊社でのバージョン管理がGitHubで管理するようになったので、その際、Unityプロジェクトをバージョン管理で必要不可欠なGit LFSの個人的なオススメな設定を紹介したいと思います。
#Git LFSとは
結構UnityプロジェクトをGitLFSで管理した記事など上げている方がいたのでここではリンク先の紹介
https://qiita.com/MasaKoha/items/96d11730d06695470944
https://www.slideshare.net/kamera25/unity-git-lfs
http://tech.guitarrapc.com/entry/2017/07/14/031046
http://q7z.hatenablog.com/entry/2016/12/10/000222
#使用クライアントソフト
断然 [Sourcetree](https://ja.atlassian.com/software/sourcetree) 一択かなと 見やすいのと色々設定できる点かと　　それ以外に[Github for Unity](https://unity.github.com/)ありますが、デザイナーさんやプランナーさんとかが使うのは良さそうかも　余計な項目がないから
#Unityプロジェクトの設定
Edit>ProjectSettings>Editorを選択

・VersionControlのModeをVisibleMetaFilesを選択
これで.Metaファイルを生成するようにする　Metaファイルはフォルダ先の情報とか画像データのImportSettingsなどの情報が格納されているので、Metaファイルを共有しないと他の人に影響が出る
<img width="268" alt="スクリーンショット 2018-08-15 18.29.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/f9b6cc04-e22f-d9f7-e830-a0f561c88f24.png">

・AssetSerializationのModeをForceTextにする
これにしておかないと.Assetファイル（例えば　ProjectSettingsのデータ）の中身がテキストファイルにならないので、差分が見れなくなる　　必ずこの設定にしておこう
<img width="267" alt="スクリーンショット 2018-08-15 18.28.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/beeaf9d5-f819-8307-f553-7b127af3aeef.png">

#.gitignore（無視ファイル）の設定
大体世間一般的にUnityプロジェクトをGitで管理する際の無視ファイルに追加で、個人使用のAssetだけ無視する構成になってます

```text:.gitignore
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
# 個人使用のAssetのもの
/Assets/AssetStoreTools*
/Assets/Snapcam/Scripts/Editor/Editor Default Resources/SceneSnaps*
/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources*
/Assets/PygmyMonkey*
/Assets/HierarchyPlus*
/Assets/Plugins/Editor/JetBrains*
/.idea*

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

# Unity3D generated meta files
*.pidb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Builds
*.apk
```

#.gitattributes(Git LFS 追跡対象リスト)の設定
構成的には大体データが大きめになりそうな拡張子を対象していて、差分の見たい拡張子は外しています（LFS対象になったファイルはバイナリデータになってしまうので）
ここでポイントですが、LightingData.assetは必ず設定しましょう
これだけ直接ファイル名で明記していますが、プロジェクト内の全ファイル名が当てはまるファイルは追跡対象になります。
これを設定しないと、LightingDataは結構データが大きくなりやすいので、リポジトリに上げれない可能性があるのともう一つ問題が出ます。
このまま共有してしまうと　他の人のプロジェクトのLightingDataが壊れた状態で共有されます
これはどうゆう事でしょうか
実際のLightingDataを見てみましょう
このようにLightingDataがLFS対象外で以外のLightingDataの画像データがLFS対象になっているので壊れてしまいました。なので必ず、どちらのデータも、LFS対象外かLFS対象にする必要があります
<img width="307" alt="Unity_2017_4_9f1_Personal__64bit__-_Main_unity_-_GodBreathYou_-_Android__Personal___Metal_.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/fed17cb4-ceaf-3008-d7c9-c5799b817fed.png">

あとは　それ以外にも、警告されたファイルがあったら直接ファイル名を追加して警告を取り除く
ちなみに.assetの拡張子を指定していない理由は.gitignore（無視ファイル）の設定で書いています

```text:.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
*.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
*.bmp filter=lfs diff=lfs merge=lfs -text
*.tiff filter=lfs diff=lfs merge=lfs -text
*.iff filter=lfs diff=lfs merge=lfs -text
*.pict 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
*.aiff filter=lfs diff=lfs merge=lfs -text
*.mod filter=lfs diff=lfs merge=lfs -text
*.it filter=lfs diff=lfs merge=lfs -text
*.s3m filter=lfs diff=lfs merge=lfs -text
*.xm filter=lfs diff=lfs merge=lfs -text
*.aif filter=lfs diff=lfs merge=lfs -text

#Video
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
*.avi filter=lfs diff=lfs merge=lfs -text
*.mpg filter=lfs diff=lfs merge=lfs -text
*.mpeg filter=lfs diff=lfs merge=lfs -text
*.asf 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
*.dae filter=lfs diff=lfs merge=lfs -text
*.3ds filter=lfs diff=lfs merge=lfs -text
*.dxf filter=lfs diff=lfs merge=lfs -text
*.max filter=lfs diff=lfs merge=lfs -text
*.ma filter=lfs diff=lfs merge=lfs -text
*.mb filter=lfs diff=lfs merge=lfs -text

#font
*.ttf filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text

# Android
*.a filter=lfs diff=lfs merge=lfs -text
*.so filter=lfs diff=lfs merge=lfs -text

# library
*.dll filter=lfs diff=lfs merge=lfs -text

#ETC
*.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
*.rns filter=lfs diff=lfs merge=lfs -text
*.reason filter=lfs diff=lfs merge=lfs -text
*.lxo filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.lzh filter=lfs diff=lfs merge=lfs -text
*.7z filter=lfs diff=lfs merge=lfs -text

#
*.spm filter=lfs diff=lfs merge=lfs -text
*.tif filter=lfs diff=lfs merge=lfs -text
*.tiff filter=lfs diff=lfs merge=lfs -text
*.unitypackage filter=lfs diff=lfs merge=lfs -text
*.apk filter=lfs diff=lfs merge=lfs -text

LightingData.asset filter=lfs diff=lfs merge=lfs -text

```

#Git LFSを使って見た感想
正直　プロジェクト始めの設定で後々、めんどくささに影響出ると思いました
なのでなるべく最初に大体の設定はしておきましょう
あと、さすがにLFS対応していても何Gバイトを越すデータの共有には無理あるなあと思います
例えば　動画ファイルを共有する際、たまに共有できない時があったり、unity cloud buildができなかったりしました。