Як використовувати Git для управління джерелами Unity3D?


499

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

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


3
"просто використовувати svn" незалежно від безглуздих аргументів git V svn, git просто не для великих бінарних файлів. Проектами єдності є фільми (та різноманітні величезні бінарні файли - текстури тощо), із кількома рядками коду. Ви б використовували git для зберігання своєї колекції фільмів? svn принаймні розумний.
Fattie

1
Найпростішим рішенням є просто виключити всі бінарні папки з gitignore і використовувати git лише для фактичних файлів коду, а можливо, і для ваших файлів активів. Усі бінарні файли не потрібно включати, оскільки кожен член команди може скласти їх для себе?
Кокодоко

@Kokodoko Виконавці не можуть скласти власні виконувані файли.
Crashworks

Навіть якби це було правдою, вони все одно можуть підштовхувати нові зображення, щоб гріти ... щоб чорти могли компілювати нові твори мистецтва ...
Кокодоко

@Kokodoko Це означає, що артисту потрібно чекати, коли розробник побачить порядок і зробить побудову, щоб побачити їх зміни в грі. Це дуже довгий час ітерації.
Crashworks

Відповіді:


522

Далі - уривок з мого особистого блогу .

Використання Git з 3D-іграми

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

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

Git Workflow

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

Я не буду надто заглиблюватись у те, як працює методологія, як автор її чудово описує, і вкрай мало слів, щоб її легко пройти. Я вже деякий час використовую зі своєю командою, і це найкращий робочий процес, який ми намагалися до цього часу.

Git GUI Client Application

Це дійсно особиста перевага тут, оскільки існує досить багато варіантів з точки зору Git 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, він перегляне, які файли було видалено, перевірте, чи каталог, в якому він існував, порожній, і якщо так, видаліть його.


2
Згадка про робочий процес git - це приємно, але, можливо, я повинен уточнити у своєму питанні, що я запитую про робочі процеси, особливо характерні для єдності 3D. Як ви можете знати, проекти об'єднання значною мірою покладаються на бінарні файли. Чи є якісь особливі міркування для вирішення цього питання? Деякі рекомендації, які я знайшов під час дослідження цієї теми, полягав у використанні робочого процесу, який максимально уникав злиття. Можливо, ви не поділяєтесь у цьому настрої, але моє запитання є більш конкретним щодо конкретних питань, пов'язаних з unit3d, а не загальних налаштувань робочого процесу.
PressingOnAlways

3
Ми використовуємо додаток git для управління нашим великим бінарним вмістом. Підтримка Windows не є приголомшливою, але вона стає кращою. Це корисно лише в тому випадку, якщо вам не важливо відстежувати обороти у великих бінарних файлах.
Jerdak

2
Оновлення цього питання - ми спробували вашу установку, і вона спрацювала досить добре, але ми хотіли, щоб наші активи автоматично синхронізувалися. Зараз ми використовуємо sugarsync для вибіркової синхронізації папки бінарних активів. Dropbox синхронізує лише папку dropbox, але при синхронізації цукру ви можете довільно синхронізувати папки в будь-якому місці на жорсткому диску, що є надзвичайно корисним. Нам довелося трохи змінити структуру каталогу каталогів, щоб визначити одну підпапку для цих великих бінарних файлів, але поки вона спрацювала дуже добре. Ми просто .gitignore цю папку і дозволяємо цукрової синхронізації підтримувати його в синхронізації.
PressingOnAlways

2
Чому вибір потрібно йти Hidden Meta Files?
Сліпп Д. Томпсон

2
Виправлена ​​помилка копіювання n введення - Так, це повинні бути видимі метафайли.
С.Річмонд

60

У 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меню

Також наша команда використовує трохи більш розширений .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 під контролем джерела, ви можете знайти у цій публікації .


Можливо, буде краще, якщо ви відредагуєте мою відповідь вгорі, щоб включити ці нові параметри. :)
С.Річмонд

6
Чому вибір потрібно йти Hidden Meta Files?
Сліп Д. Томпсон

Точка перша явно неправильна. Немає Єдності → Налаштування → Пакети → Репозиторій
Agostino

1
згідно docs.unity3d.com/Manual/… це повинні бути видимі метафайли
Markus

1
Добре працює для моєї команди. Дуже дякую.
eifersucht

34

Що таке GIT?

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

Якщо ви хочете дізнатися більше про GIT, перегляньте цей Швидкий підручник ,

Перш за все переконайтеся, що у вас налаштовано середовище Git. Потрібно налаштувати як локальне середовище, так і сховище Git (я вважаю за краще Github.com).

GIT-клієнтська програма Mac / Windows

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

GitHub - це місце для обміну кодом з друзями, колегами, однокласниками та незнайомими людьми. Понад п’ять мільйонів людей використовують GitHub для створення дивовижних речей разом.

Налаштування Unity3d

Вам потрібно виконати ці налаштування

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

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

Увімкніть зовнішній параметр у Unity → Налаштуваннях → Пакети → Репозиторій

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

Перейдіть на примусовий текст у редагуванні → Налаштування проекту → Редактор → Режим серіалізації активів.

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

Джерело: Використання Git за допомогою управління 3D-джерелами


6
+1 Ця відповідь уже написана вище, але відповідь @NabeelSaleem допомогла мені з наданими ними зображеннями та зрозумілим керівництвом :) дякую
aflatoon

3
Я не можу знайти Preferences > Packagesв Unity 5.x Normal? ty
Ів Ланге

5
@NabeelSaleem так. Насправді цей крок у Unity 5.x не є необхідним. ty
Ів Ланге

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


11

Тепер у нас є безперебійна інтеграція до єдності з розширенням Github до Unity ... https://unity.github.com/

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

На момент написання проекту проект знаходиться в альфа-форматі, але все ще використовується для особистих проектів.


ти спробував це?
Nabeel K

11

Я думав, що можу розмістити простіший .gitignoreдля всіх, хто цікавиться:

# Ignore Everything
/*

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

7
Знову ж таки, всі ці відповіді застаріли на цій сторінці. якщо з якоїсь - то причини ви повинні використовувати мерзотник з Unity, github.com/github/gitignore/blob/master/Unity.gitignore
Fattie

Невеликий, простий і повністю сумісний з усіма версіями: я вважаю, що цей сценарій працює найкращим чином навіть для Unity 2017 та 2018, які нещодавно змінили структуру проекту ( UnityPackageManager/і Packages/).
Ісаак Ерікссон

8

Основні речі, які слід пам’ятати при використанні git для контролю версії вихідного коду: 3d:

(А) НЕ реєстрація в папці Бібліотека . Я помилявся в минулому кілька разів і за це страждав! Видалити АБО перенести папку бібліотеки перед додаванням проекту / файлів у git.

(B) Використовуйте "Видимі метафайли" - для новіших версій єдності - 5.3.4 і вище це відбувається за замовчуванням. Для деяких попередніх версій потрібно змінити налаштування в розділі: Правка-> Налаштування проекту-> Контроль версій

(C) Використовуйте файл .gitignore для Unity-, щоб переконатися, що збережено здоровість, а файли не додаються без потреби - якщо на android / tizen - додайте правила, щоб виключити файли APK та TPK з додавання до сховища. Google навколо для .gitignore-файлу для єдності АБО ще використовуйте цю модель .gitignore for 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 [yourusername] \ Downloads.gitignore.

(4) git add .gitignore

(5) git add *

Сподіваюся, це допомагає ... все найкраще!


6

Edit -> Project Settings -> Editor

Встановіть контроль версій на мета-файли Встановіть серіалізацію активів, щоб примусити текст.

Я думаю, це те, чого ти хочеш.


1
І як тоді ви налаштуєте злиття YAML?
shinzou


6

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

Github for Unity щойно випустив розширення версії 1.0.

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

5

Тільки папки « Активи» та « Настройки проекту» повинні перебувати під контролем версій 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/

3

Unity також забезпечує власний контроль версій джерела. до Единства5 це був сервер Ассет, але тепер його знецінився. і запустити нову систему управління SVN під назвою єдність співпрацювати. Але головна проблема використання єдності, і будь-який SVN - це сцена злиття та злиття. але Non of svn дає нам змогу вирішити подібні конфлікти чи злиття. тож залежать від вас, з яким SVN ви знайомі. Я використовую інструмент SmartSVN на Mac. і черепаха на вікнах.

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


1

Просто додавання в субджет Gitignore. Рекомендований спосіб ігнорує лише Бібліотеку та Темп, якщо він є коренем вашого проекту git. якщо ти схожий на мене і інколи потрібен проект єдності, щоб бути частиною репо, а не всім репо, правильними рядками в gitignore було б:

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

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 mb у Windows, ввівши розмір: large у каталозі, де є ваш проект. Це може бути зручно для пошуку великих файлів, хоча деякі файли між 100 Мб і 128 Мб можуть бути пропущені.

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

Загальний формат git bash такий

git add. .

git commit -m 'message' (фіксує файли з повідомленням, вони все ще знаходяться на вашому ПК, а не у віддаленому репо, в основному вони були 'версіями' як нова фіксація)

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

Недоліком git bash для проектів єдності є те, що якщо є файл> 100mb, ви не отримаєте помилку, поки не натиснете. Тоді вам доведеться скасувати виконання комісії, скинувши голову на попередню комісію. Вид клопоту, особливо якщо ви новачок у Git Bash.

Перевага GitHub Desktop полягає в тому, що ПЕРЕД ЗАВДАННЯМИ файлів на 100 Мб воно дасть вам спливаюче повідомлення про помилку. Потім ви можете зменшити ці файли або додати їх до файлу .gitignore.

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

Якщо інші люди використовують ваш репортаж GitHub, і ви хочете клонувати або витягувати, вам доступні ці варіанти, як на робочому столі GitHub, так і на Git bash.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.