Как использовать Git для управления исходным кодом Unity3D?

499

Каковы наилучшие практики использования управления исходными кодами Git в Unity 3D, особенно в отношении бинарной природы проектов Unity 3D? Пожалуйста, опишите рабочий процесс, какие пути будут включены в .gitignore, какие настройки должны быть установлены в Unity и / или проекте, и любые другие особые вещи, которые следует отметить.

Примечание: я понимаю, что использование Asset Server является рекомендованным Unity способом, но я хотел бы использовать Git по ряду причин. Пожалуйста, не отвечайте так, чтобы утверждать, что я должен просто использовать Asset Server. Сервер активов действительно не вариант для меня.

PressingOnAlways
источник
3
«просто используйте svn» независимо от бессмысленных аргументов git V svn, git просто не для больших двоичных файлов. Проекты Unity - это фильмы (и различные огромные двоичные файлы - текстуры и т. д.) с несколькими строками кода. Вы бы использовали git для хранения своей коллекции фильмов? свн как минимум разумно.
Толстяк
1
Самое простое решение - просто исключить все двоичные папки с помощью gitignore и использовать git только для ваших файлов фактического кода и, возможно, ваших файлов ресурсов. Все бинарные файлы не нужно включать, так как каждый член команды может скомпилировать их для себя?
Кокодоко
@Kokodoko Артисты не могут составлять свои собственные исполняемые файлы.
Crashworks
Даже если бы это было правдой, они все еще могут подтолкнуть новые графические ресурсы к git ... так, чтобы разработчики могли скомпилировать с новой иллюстрацией ...
Kokodoko
@Kokodoko Это означает, что артисту нужно будет подождать, пока разработчик увидит коммит и сделать сборку, чтобы увидеть его изменения в игре. Это очень долгое время итерации.
Crashworks

Ответы:

523

Ниже приводится выдержка из моего личного блога .

Использование Git с 3D-играми

Обновление октябрь 2015: GitHub с тех пор выпустил плагин для Git под названием Git LFS, который непосредственно решает следующую проблему. Теперь вы можете легко и эффективно создавать версии больших двоичных файлов!

Git отлично работает с 3D-играми из коробки. Однако главное предостережение заключается в том, что управление версиями больших (> 5 МБ) медиафайлов может быть проблемой в течение длительного времени, поскольку ваша история фиксации увеличивается. Мы решили эту потенциальную проблему в наших проектах, версионируя бинарный актив только тогда, когда он считается окончательным. Наши 3D-художники используют Dropbox для работы с активами WIP, как по вышеуказанной причине, так и потому, что это намного быстрее и проще (не многие художники будут активно использовать Git!).

Git Workflow

Ваш рабочий процесс Git очень важен для вас, учитывая ваш собственный опыт работы в команде и совместную работу. Однако. Я бы настоятельно рекомендовал методологию Git Flow с соответствующим названием, как описано автором здесь .

Я не буду вдаваться в подробности о том, как работает методология, так как автор описывает ее отлично, и в нескольких словах, так что легко разобраться. Я уже некоторое время использую с моей командой, и это лучший рабочий процесс, который мы когда-либо пробовали.

Клиентское приложение Git GUI

Это действительно личное предпочтение, так как есть довольно много вариантов с точки зрения Git GUI или того, использовать ли вообще GUI. Но я хотел бы предложить бесплатное приложение SourceTree, так как оно идеально подходит для расширения Git Flow. Прочтите здесь руководство SourceTree по внедрению методологии Git Flow в их приложения.

Unity3D Игнорировать папки

Для получения актуальной версии Github поддерживал файл Unity.gitignore без особенностей ОС.

# =============== #
# Unity generated #
# =============== #
Temp/
Library/

# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Настройки Unity3D

Для версий Unity 3D v4.3 и выше:

  1. (Пропустите этот шаг в версии 4.5 и выше) Включите Externalпараметр в Unity → Preferences → Packages → Repository.
  2. Откройте Editменю и выберите Project Settings → Editor:
    1. Переключиться Version Control Modeна Visible Meta Files.
    2. Переключиться Asset Serialization Modeна Force Text.
  3. Сохраните сцену и проект из Fileменю.

Хотите перенести существующее хранилище в LFS?

Проверьте мой блог для шагов о том, как это сделать здесь .

Дополнительная конфигурация

Одно из немногих основных неудобств, связанных с использованием Git с проектами Unity3D, заключается в том, что Git не заботится о каталогах и с радостью оставит пустые каталоги после удаления из них файлов. Unity3D создаст файлы * .meta для этих каталогов и может вызвать небольшую битву между членами команды, когда Git будет продолжать добавлять и удалять эти метафайлы.

Добавьте этот хук Git после слияния в /.git/hooks/папку для репозиториев с проектами Unity3D в них. После любого Git pull / merge, он посмотрит, какие файлы были удалены, проверит, является ли каталог, в котором он существовал, пустым, и если это так, удалите его.

S.Richmond
источник
2
Упоминание о рабочем процессе git - это хорошо, но, возможно, я должен уточнить в своем вопросе, который я задаю, о рабочих процессах, особенно специфичных для unity 3D. Как вы, возможно, знаете, проекты Unity сильно зависят от двоичных файлов. Есть ли какие-то особые соображения, чтобы иметь дело с этим? Некоторые рекомендации, которые я нашел при исследовании этой темы, заключались в том, чтобы использовать рабочий процесс, который максимально избегал слияний. Возможно, вы не согласны с этим мнением, но мой вопрос больше касается конкретных вопросов, связанных с unity3d, а не общих предпочтений рабочего процесса.
PressingOnAlways
3
Мы используем git-приложение для управления нашим большим двоичным контентом. Поддержка Windows не удивительна, но становится все лучше. Это полезно только в том случае, если вам не нужно отслеживать обороты в больших двоичных файлах.
Джердак
2
Обновление к этому - мы попробовали вашу настройку, и она работала довольно хорошо, но мы хотели, чтобы наши ресурсы были автоматически синхронизированы. Теперь мы используем sugarsync для выборочной синхронизации папки бинарных ресурсов. Dropbox будет синхронизировать только папку Dropbox, но с помощью сахарной синхронизации вы можете произвольно синхронизировать папки в любом месте на жестком диске, что чрезвычайно полезно. Нам пришлось немного изменить структуру каталогов Assets, чтобы определить одну подпапку для этих больших двоичных файлов, но пока она работала действительно хорошо. Мы просто .gitignore эту папку и позволяем синхронизации сахара, чтобы держать его в синхронизации.
PressingOnAlways
2
Почему выбор Hidden Meta Files?
Слипп Д. Томпсон
2
Исправлена ​​моя копия n вставить опечатку - Да, это должны быть Видимые метафайлы.
С.Ричмонд
60

В Unity 4.3 вы также должны были включить опцию External из настроек, но начиная с Unity 4.5 они пропустили опцию, поэтому процесс полной настройки выглядит следующим образом:

  1. Переключитесь Visible Meta FilesвEditor → Project Settings → Editor → Version Control Mode
  2. Переключитесь Force TextвEditor → Project Settings → Editor → Asset Serialization Mode
  3. Сохранить сцену и проект из Fileменю

Также наша команда использует немного более расширенный .gitignoreфайл:

# =============== #
# Unity generated #
# =============== #
Temp/
Library/

# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Обратите внимание, что единственными папками, которые нужно держать под контролем исходного кода, являются Assetsи ProjectSettings.

Более подробную информацию о сохранении Unity Project под контролем источников вы можете найти в этом посте .

Засадный
источник
Возможно, будет лучше, если вы отредактируете мой ответ сверху, чтобы включить эти новые опции. :)
С.Ричмонд
6
Почему выбор Hidden Meta Files?
Слипп Д. Томпсон
Пункт первый явно ошибочен. Единства нет → Настройки → Пакеты → Репозиторий
Агостино
1
в соответствии с docs.unity3d.com/Manual/… это должны быть Видимые метафайлы
Маркус
1
Хорошо работает для моей команды. Большое спасибо.
eifersucht
34

Что такое GIT?

Git - это бесплатная распределенная система контроля версий (SCM) с открытым исходным кодом, разработанная Линусом Торвальдсом в 2005 году (основатель ОС Linux). Он создан для быстрого и эффективного управления всем, от небольших до крупных проектов. Ведущие компании, такие как Google, Facebook, Microsoft используют GIT каждый день.

Если вы хотите узнать больше о GIT, посмотрите этот краткий учебник ,

Прежде всего убедитесь, что у вас настроена среда Git. Вам нужно настроить как локальную среду, так и репозиторий Git (я предпочитаю Github.com).

GIT клиентское приложение Mac / Windows

Для клиентского приложения GIT я рекомендую вам воспользоваться Github.com,

GitHub - это место, где можно делиться кодом с друзьями, коллегами, одноклассниками и совершенно незнакомыми людьми. Более пяти миллионов человек используют GitHub для создания удивительных вещей вместе.

Настройки Unity3d

Вам нужно сделать эти настройки

Переключитесь на Видимые метафайлы в меню «Правка» → «Настройки проекта» → «Редактор» → «Режим контроля версий».

введите описание изображения здесь

Включить внешний параметр в Unity → Настройки → Пакеты → Репозиторий

введите описание изображения здесь

Переключитесь на Принудительный текст в меню «Правка» → «Настройки проекта» → «Редактор» → «Сериализация активов».

введите описание изображения здесь

Source: Использование Git с 3D-играми Source Control

NabeelSaleem
источник
6
+1 Этот ответ уже написан выше, но ответ @NabeelSaleem помог мне с предоставленными им изображениями и понятным руководством :) спасибо
aflatoon
3
Я не могу найти Preferences > Packagesв Unity 5.x Normal? Ты
Ив Ланге
5
@NabeelSaleem да. На самом деле этот шаг в Unity 5.x не нужен. Ты
Ив Ланге
22

Чтобы добавить ко всему изложенному, также идеально использовать git lfs с Unity. Я использовал это, так как это вышло, и у меня не было никаких проблем с этим.

Вы хотите добавить это .gitattributesрядом с вашим .gitignoreфайлом

*.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

*.a filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.aif filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.FBX 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

Это мой список файлов. Если вы используете дополнительные двоичные файлы, которых нет в списке, добавьте их.

У меня также есть файлы, настроенные для использования yamlmerge, вам нужно это настроить. Вы можете прочитать об этом здесь: http://docs.unity3d.com/Manual/SmartMerge.html

rygo6
источник
11

Теперь у нас есть бесшовная интеграция в единство с расширением Github to Unity ... https://unity.github.com/

Новое расширение GitHub для Unity обеспечивает рабочий процесс GitHub и многое другое для Unity, обеспечивая поддержку больших файлов с помощью Git LFS и блокировку файлов.

На момент написания проекта он находится в альфа-версии, но все еще может использоваться для личных проектов.

Bhupen
источник
ты пробовал это?
Набиль К
11

Я думал, что я мог бы опубликовать более простой .gitignoreдля всех, кто заинтересован:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
Сойди с моей лужайки
источник
7
Опять же, все эти ответы довольно устарели на этой странице. если по какой-то причине вам нужно использовать git с Unity, github.com/github/gitignore/blob/master/Unity.gitignore
Fattie
Небольшой, простой и полностью совместимый со всеми версиями: я считаю, что этот скрипт работает лучше всего, даже для Unity 2017 и 2018, которые недавно изменили структуру своего проекта ( UnityPackageManager/и Packages/).
Исаак Эрикссон
8

Основные моменты, которые следует помнить при использовании git для контроля версий исходного кода unity-3d:

(A) НЕ регистрируйте папку «Библиотека» . Я делал эту ошибку несколько раз в прошлом и пострадал за это! Удалите ИЛИ переместите папку библиотеки перед добавлением вашего проекта / файлов в git.

(B) Используйте «Видимые метафайлы» - для новейших версий Unity - 5.3.4 и выше это происходит по умолчанию. Для некоторых более ранних версий вам нужно изменить настройки в: Edit-> Project Settings-> Version Control

(C) Используйте файл .gitignore для Unity, чтобы убедиться, что он не нарушает работоспособность и файлы не добавляются без необходимости - если на android / tizen - добавьте правила, чтобы исключить добавление файлов APK и TPK в репозиторий. Поищите в Google файл .gitignore для единства ИЛИ еще используйте эту модель .gitignore для Unity, предоставленную GitHub: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) Убедитесь, что файл .gitignore добавлен в хранилище в качестве первого добавленного файла - потому что в прошлом я лично пропускал добавление файла .gitignore. Задумайтесь о том, почему это произошло, но сейчас я просто копирую и добавляю файл .gitignore в качестве первого шага настройки репозитория.

Итак ... чтобы подготовить проект Unity для git, сделайте следующее:

(1) Перейти в папку проекта

(2) Наберите git init.

(3) Скопируйте файл .gitignore: В MacOS: cp ~ / Downloads / .gitignore В Windows: скопируйте c: \ Users [имя_руза_пользователя] \ Downloads.gitignore.

(4) git add .gitignore

(5) git add *

Надеюсь, это поможет ... всего наилучшего!

Naligator
источник
6

Edit -> Project Settings -> Editor

Установите контроль версий для метафайлов. Установите Сериализацию Актива, чтобы заставить текст.

Я думаю, что это то, что вы хотите.

AFPRO
источник
1
А как тогда настроить слияние YAML?
Синдзоу
6

Вы можете использовать Github для Unity , расширение Unity, которое вносит рабочий процесс git в пользовательский интерфейс Unity.

Github для Unity только что выпустил версию 1.0 расширения.

  • Он использует git-lfs (поддержка больших файлов git) для правильного хранения больших ресурсов.
  • Блокировка файлов, чтобы никто больше не перезаписывал ваши активы
  • Push и Pull в / из любого удаленного хранилища
  • Вы также можете скачать его в Unity Asset Store: https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069
Кайл Б
источник
5

Только папки Assets и ProjectSettings должны находиться под контролем версий git.

Вы можете сделать Gitignore, как это.

[Ll]ibrary/
[Tt]emp/
[Oo]bj/

# Autogenerated VS/MD solution and project files
*.csproj
*.unityproj
*.sln
*.suo
*.userprefs

# Mac
.DS_Store
*.swp
*.swo

Thumbs.db
Thumbs.db.meta

.vs/
EllisonLee
источник
3

Unity также обеспечивает собственный контроль версий Source. до Unity5 это был сервер Univasset, но теперь его амортизация. и запустите новую систему управления SVN под названием UnWollaborate. Но главная проблема заключается в использовании Unity, а любая SVN - это коммитирование и слияние сцены. но ни один из svn не дает нам возможности разрешать подобные конфликты или объединять сцены. так что от вас зависит, с каким SVN вы знакомы. Я использую инструмент SmartSVN на Mac. и черепаха на окнах.

введите описание изображения здесь

Шахбаз Али
источник
1

Просто добавляю информацию о Gitignore. Рекомендованный способ игнорирует только Library и Temp, если он находится в корне вашего git-проекта. если вы похожи на меня и иногда вам нужен единый проект, чтобы быть частью репо, а не всего репо, правильные строки в gitignore будут такими:

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild
zambari
источник
0

Я хотел добавить очень простой рабочий процесс от кого-то, кто был разочарован git в прошлом. Есть несколько способов использования git, вероятно, наиболее распространенными для единства являются GitHub Desktop, Git Bash и GitHub Unity.

https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069 .

По сути, все они делают одно и то же, но это выбор пользователя. Вы можете использовать git для настройки больших файлов, что позволяет бесплатно хранить большие файлы объемом 1 ГБ с дополнительным хранилищем, доступным в пакетах данных по цене 4 долл. / Мес. За 50 ГБ, и это позволит вам передавать файлы размером> 100 МБ в удаленные репозитории (он хранит фактические файлы в сервер и в вашем репо указатель)

https://git-lfs.github.com/

Если по какой-либо причине вы не хотите настраивать lfs, вы можете сканировать свои проекты на наличие файлов> 128 МБ в Windows, введя size: large в каталоге, где находится ваш проект. Это может быть удобно для поиска больших файлов, хотя могут быть пропущены некоторые файлы размером от 100 до 128 МБ.

введите описание изображения здесь

Общий формат git bash:

мерзавец добавить. (добавляет файлы для фиксации)

git commit -m 'message' (фиксирует файлы с сообщением, они все еще находятся на вашем компьютере, а не в удаленном репо, в основном они были «версионированы» как новый коммит)

git push (отправка файлов в хранилище)

Недостаток git bash для проектов Unity заключается в том, что если файл имеет размер> 100 МБ, вы не получите ошибку, пока не нажмете. Затем вы должны отменить свой коммит, вернув свою голову к предыдущему коммиту. Что-то вроде хлопот, особенно если вы новичок в git bash.

Преимущество GitHub Desktop в том, что ДО того, как вы зафиксируете файлы размером 100 Мб, появится всплывающее сообщение об ошибке. Затем вы можете сжать эти файлы или добавить их в файл .gitignore.

Чтобы использовать файл .gitignore, создайте файл с именем .gitignore в корневом каталоге локального репозитория. Просто добавьте файлы по одной строке за раз, которую вы хотели бы пропустить. SharedAssets и другие файлы, не относящиеся к Asset-папкам, обычно можно не указывать, и они автоматически заполняются в редакторе (пакеты могут быть повторно импортированы и т. Д.). Вы также можете использовать шаблоны для исключения типов файлов.

Если другие люди используют ваш репозиторий GitHub и вы хотите клонировать или вытащить его, у вас есть эти опции, доступные вам также на рабочем столе GitHub или в Git bash.

Я не упомянул много о пакете Unity GitHub, где вы можете использовать GitHub в редакторе, потому что лично я не нашел интерфейс очень полезным, и я не думаю, что в целом он поможет кому-нибудь познакомиться с git, но это только мой предпочтение.

vasmos
источник