Unity и git

Tulenber 24 December, 2019 ⸱ Beginner ⸱ 4 min ⸱

1
2
# В начале проекта было 2 слова. И слова эти были
git init
Народная мудрость.

Как уже было отмечено в "Контроль версий, геймдев и git lfs" (в котором НЕ говорится, зачем вам контроль версий) первым делом после создания проекта инициализируем git.

Что хранить?

Проекты Unity очень любят генерировать кучу метаинформации и всякого тр…кэша. Проще перечислить 3 папки, которые необходимо индексировать:

  • Assets - содержит все ресурсы для проекта.
  • Packages - содержит список зависимостей.
  • ProjectSettings - содержит конфиги редактора.

Всё остальное генерируется из них.

.gitignore

Существует github/gitignore, на котором можно найти дефолт, используемый при создании проекта на GitHub.
Но если вспомнить, что не Unity единым, то можно сходить на gitignore.io и сгенерировать всё остальное, например, MacOs + Rider + Unity.

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

Настройка Unity

У Unity есть несколько настроек, которые могу превратить ваш проект в картофелину. Необходимо использовать следующие параметры Edit > Project Settings > Editor >

  • Version Control > Mode: “Visible Meta Files" - дабы не потерять связи между объектами.

  • Asset Serialization > Mode: “Force Text" - иначе мерджить придётся бинарные файлы.

UnityYAMLMerge

Теоретически при выставлении Asset Serialization > “Force Text" появляется возможность разрешать конфликты в сценах и префабах, но на практике это довольно сложный процесс. На помощь придёт утилита Unity YAML Merge, детальное объяснение использования которой можно найти в нашей статье "Решение конфликтов сцен в Unity и git при помощи UnityYAMLMerge".

git lfs

В посте "Контроль версий, геймдев и git lfs" говорилось, почему будет использоваться git lfs, где его скачать и изучить, а так же какие сервисы его предоставляют.

1
2
# Инициализируем git lfs
git lfs install

Создаем файл .gitattributes почти на все случаи жизни:

 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

Замечание: Если заполнить .gitattributes руками, то файлы, которые уже были добавлены в индекс git, будут перемещены в git lfs только при следующем их изменении. Для переноса всех файлов определённого типа сразу, можно воспользоваться командой:

1
2
# Переносим все файлы *.bin в git lfs
git lfs track '*.bin'

Заключение

Некая своя специфика контроля версий для Unity существует, но в целом ничего существенного. Однако, если проект не запускается после чекаута на другую машину, следует сразу проверить, не утащилось ли чего-то, помимо трех перечисленных в начале папок.
На этом можно закончить с первоначальной настройкой окружения и перейти к чему-то более относящемуся к Unity. Пока! =)



Privacy policyCookie policyTerms of service
Tulenber 2020