Edited at

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

More than 1 year has passed since last update.


前提


  • Bitbucket使用

  • SourceTree使用


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

適当な場所にUnityプロジェクトを作成しUnity Editorで開く。

Edit > Project Settings > Editor を選択し、以下項目を設定して保存する。

EditorSettings


  • Version Control - Mode : Visible Meta Files

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


  • Asset Serialization : Force Text

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



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

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

この時リモートリポジトリは作成しない。

ローカルリポジトリ作成

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

ローカルリポジトリ作成後


3. 無視リストを設定

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


  • Assets

  • ProjectSettings

  • UnityPackageManager

それ以外はgitignoreに設定して管理対象外とする。

GitHubにテンプレートがあるので拝借。

Unity.gitignore

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

中身はこんな感じ

$ 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

かなり減った

無視リスト設定後


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

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

またまた以下を拝借。

.gitattributes for Unity3D with git-lfs

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

中身はこんな感じ

$ 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

おわり