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

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

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

13 ответов


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

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

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

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

Git Workflow

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

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

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

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

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

для проверки актуальной версии Github поддерживал единство.файл 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. (пропустите этот шаг в v4.5 и выше) включить на Unity → Preferences → Packages → Repository.
  2. открыть Edit меню и выберите Project Settings → Editor:
    1. переключатель Version Control Mode для Visible Meta Files.
    2. переключатель Asset Serialization Mode to Force Text.
  3. сохранить сцену и проект .

хотите перенести существующее РЕПО в LFS?

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

Дополнительные Настройки

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

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


в Unity 4.3 вам также пришлось включить внешнюю опцию из настроек, но поскольку 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 меню

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

# =============== #
# 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 под контролем источника вы можете найти в этот пост.


что такое GIT?

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

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

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

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

для клиентского приложения Git gui я рекомендовал вам пойти с Github.com,

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

в Unity3D параметры

вам нужно сделать эти параметры

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

enter image description here

включить внешнюю опцию в Unity → настройки → пакеты → репозиторий

enter image description here

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

enter image description here

источник: использование Git с 3D-играми Управление Версиями


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

вы захотите добавить это .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


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

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/ProjectSettings

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

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

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


Edit -> Project Settings -> Editor

установите управление версиями в мета-файлы. Установите сериализацию активов в force text.

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


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

можно пример такой.

[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/

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

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

(B) Используйте "Видимые Мета-Файлы" - для новейших версий Unity - 5.3.4 и выше это происходит по умолчанию. Для некоторых из более ранних версии вам нужно изменить настройки в разделе: Изменить - > Настройки Проекта - > Контроль Версий

(C) использовать a .gitignore file for Unity - чтобы убедиться, что здравомыслие поддерживается и файлы не добавляются без необходимости - если на android / tizen - добавить правила, чтобы исключить APK и TPK файлы из добавления в репозиторий. Google вокруг для a .файл gitignore для unity или используйте эту модель .gitignore для единства, предоставляемого На GitHub: https://github.com/github/gitignore/blob/master/Unity.gitignore

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

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

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

(2) Тип инит ЖКТ .

(3) скопируй .файл гитюдного : На MacOS: cp ~ / загрузки/.гитюдного В Windows: копировать c:\Users[yourusername]\загрузки.гитюдного .

(4) git add .gitignore

(5) git add *

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


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

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

  • он использует git-lfs (git large file support) для правильного хранения больших активов
  • блокировка файлов, чтобы никто другой не перезаписывал ваш актив commits
  • нажмите и потяните в / из любой удаленный хранилище
  • вы также можете загрузить его в хранилище активов Unity:https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069

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

enter image description here


Я бы предпочел, чтобы вы использовали BitBucket, так как он не является публичным, и есть официальный учебник Unity по Bitbucket.

https://unity3d.com/learn/tutorials/topics/cloud-build/creating-your-first-source-control-repository

надеюсь, что это помогает.


просто добавляя в субъект Gitignore. Рекомендуемый способ игнорирует только библиотеку и Temp, если его корень wihtin вашего проекта git. если вы похожи на меня и иногда нуждаетесь в проекте unity, чтобы быть частью РЕПО, а не всего РЕПО, правильные строки в gitignore будут:

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild