Unity and git

Tulenber 24 December, 2019 ⸱ Beginner ⸱ 4 min ⸱

1
2
# All You Need Is
git init
Conventional wisdom.

As already noted in "Version Control, gamedev and git lfs" (which is NOT about why you need version control), initialize git is the best what can happen with a project at the beginning.

What to store?

Unity projects like to generate many meta- and cache information. The simplest way is to show tree needed folders:

  • Assets - contains all project resources.
  • Packages - contains a manifest file used to maintain the dependencies link.
  • ProjectSettings - contains editor config.

All other files generated from those three.

.gitignore

You can use github/gitignore as a template, which used for creating a new project on GitHub.
But Unity not the only one app, which will use this folder. So you can use gitignore.io to generate a file for a combination like this: MacOs + Rider + Unity.

1
2
git add -A
git commit -m "Initial commit."

Unity settings

Unity has few settings, which can break the project in git. Check those two parameters Edit > Project Settings > Editor >

  • Version Control > Mode: “Visible Meta Files" - to store object references.

  • Asset Serialization > Mode: “Force Text" - to get mergeable scenes and prefabs.

UnityYAMLMerge

In theory, Asset Serialization > “Force Text" must provide a possibility to merge conflicts, but in practice, it’s a tough process. To help you resolve such conflicts, Unity creates a tool named Unity YAML Merge, you can read about it in details in our article "Resolving conflicts in Unity scenes with git and UnityYAMLMerge.“

git lfs

The post "Version Control, gamedev and git lfs" already cover questions about git lfs, like why to use it, where to find/learn it and which services provide it. So let’s move forward.

1
2
# Initialize git lfs
git lfs install
.gitattributes template:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# .gitattributes

# Images
*.ai filter=lfs diff=lfs merge=lfs -text
*.cubemap filter=lfs diff=lfs merge=lfs -text
*.bmp filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.gif filter=lfs diff=lfs merge=lfs -text
*.hdr filter=lfs diff=lfs merge=lfs -text
*.iff filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.pict filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.tif filter=lfs diff=lfs merge=lfs -text
*.tiff 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
*.aif filter=lfs diff=lfs merge=lfs -text
*.aiff filter=lfs diff=lfs merge=lfs -text
*.it filter=lfs diff=lfs merge=lfs -text
*.mod filter=lfs diff=lfs merge=lfs -text
*.s3m filter=lfs diff=lfs merge=lfs -text
*.xm 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 Objects
*.3dm filter=lfs diff=lfs merge=lfs -text
*.3ds filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -text
*.c4d filter=lfs diff=lfs merge=lfs -text
*.collada filter=lfs diff=lfs merge=lfs -text
*.dae filter=lfs diff=lfs merge=lfs -text
*.dxf filter=lfs diff=lfs merge=lfs -text
*.FBX filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.jas filter=lfs diff=lfs merge=lfs -text
*.lws filter=lfs diff=lfs merge=lfs -text
*.lxo filter=lfs diff=lfs merge=lfs -text
*.ma filter=lfs diff=lfs merge=lfs -text
*.max filter=lfs diff=lfs merge=lfs -text
*.mb filter=lfs diff=lfs merge=lfs -text
*.obj filter=lfs diff=lfs merge=lfs -text
*.ply filter=lfs diff=lfs merge=lfs -text
*.skp filter=lfs diff=lfs merge=lfs -text
*.stl filter=lfs diff=lfs merge=lfs -text
*.ztl filter=lfs diff=lfs merge=lfs -text
 
# Other
*.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
*.7z filter=lfs diff=lfs merge=lfs -text
*.dll 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

Note: If .gitattributes filled by hand, then files that indexed by git will move to git lfs only after changes. So to move all files of some type right away this command can be used:

1
2
# Move all *.bin files to git lfs
git lfs track '*.bin'

Conclusion

There is some specificity of version control for Unity, but, in general, nothing significant. If you had troubles with a clean check out project, check that there are only three folders mentioned at the beginning of the post, and all must be fine. That’s all with the version control set up for a new project. Let’s go to something more related to Unity. See you next time! =)



Privacy policyCookie policyTerms of service
Tulenber 2020