Jak używać Git do kontroli źródeł Unity3D?

Jakie są najlepsze praktyki używania Git kontroli źródeł w Unity 3D, szczególnie w radzeniu sobie z binarną naturą projektów Unity 3D? Proszę opisać przepływ pracy, jakie Ścieżki zostaną uwzględnione .gitignore, jakie ustawienia należy ustawić w Unity i / lub projekcie, i wszelkie inne specjalne rzeczy, które należy zauważyć.

Uwaga: zdaję sobie sprawę, że korzystanie z Asset Server jest sposobem zalecanym przez Unity, ale chciałbym używać Gita z różnych powodów. Proszę żadnych odpowiedzi ten stan lub argumentować, że powinienem po prostu korzystać z serwera aktywów. Serwer zasobów naprawdę nie jest dla mnie opcją.

Author: WaleedYaser, 2013-08-14

13 answers

poniżej znajduje się fragment mojego osobistego bloga .

Używanie Gita z grami 3D

Aktualizacja Październik 2015: GitHub od tego czasu wydała wtyczkę dla Git o nazwie Git LFS , która bezpośrednio rozwiązuje poniższy problem. Teraz możesz łatwo i efektywnie wersję dużych plików binarnych!

Git może działać dobrze z grami 3D po wyjęciu z pudełka. Jednak głównym zastrzeżeniem jest to, że wersjonowanie dużych (>5 MB) plików multimedialnych może być problemem długoterminowe, jak twoja historia commit wzdęcia. Rozwiązaliśmy ten potencjalny problem w naszych projektach poprzez wersjonowanie zasobu binarnego tylko wtedy, gdy zostanie on uznany za ostateczny. Nasi artyści 3D używają Dropbox do pracy nad aktywami WIP , zarówno z powyższego powodu, jak i dlatego, że jest to dużo szybsze i prostsze (niewielu artystów będzie aktywnie chciało używać Gita!).

Git Workflow

Twój przepływ pracy w Git jest czymś, o czym musisz sam decydować, biorąc pod uwagę swój własny doświadczenie w pracy zespołowej i sposób współpracy. Jednak. Zdecydowanie polecam odpowiednio nazwaną metodologię Git Flow opisaną przez autora .

Nie będę wnikał zbyt głęboko w to, jak działa metodologia, ponieważ autor opisuje ją doskonale iw kilku słowach zbyt, więc łatwo jest przejść. Używam z moim zespołem od jakiegoś czasu i jest to najlepszy przepływ pracy, jaki do tej pory próbowaliśmy.

Klient Git GUI Zastosowanie

Jest to tak naprawdę osobiste preferencje, ponieważ istnieje sporo opcji pod względem GUI Git lub czy w ogóle używać GUI. Ale chciałbym zasugerować darmową aplikację SourceTree , ponieważ idealnie pasuje do rozszerzenia Git Flow. Przeczytaj SourceTree tutorial tutaj {[14] } na temat implementacji metodologii Git Flow w ich aplikacji.

Unity3D Ignoruj Foldery

Dla aktualizacji wersji Github utrzymany Jedność.plik gitignore BEZ specyfiki systemu operacyjnego.

# =============== #
# 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 Settings

Dla wersji Unity 3D v4. 3 i nowszych:

  1. (pomiń ten krok w wersji 4.5 i wyższej) Włącz opcję External w Unity → Preferences → Packages → Repository.
  2. Otwórz menu Edit i wybierz Project Settings → Editor:
    1. Przełącz Version Control Mode na Visible Meta Files.
    2. Przełącz Asset Serialization Mode na Force Text.
  3. Zapisz scenę i projekt z menu File.

Chcesz przenieść istniejący repo do LFS?

Sprawdź z mojego posta na blogu dla kroków , jak to zrobić tutaj .

Dodatkowa Konfiguracja

Jedną z kilku głównych irytacji, jaką ma używanie Gita w projektach Unity3D, jest to, że Git nie dba o katalogi i chętnie pozostawi puste katalogi po usunięciu z nich plików. Unity3D zrobi*.pliki meta dla tych katalogów i może spowodować bitewę między członkami zespołu, gdy Git commity dodać i usunąć te meta pliki.

Dodaj ten Git Post-merge hook do folderu /.git/hooks/ dla repozytoriów z projektami Unity3D. Po każdym Git pull/merge, sprawdzi, jakie pliki zostały usunięte, sprawdzi, czy katalog, w którym istniał, jest pusty, a jeśli tak, usuń go.

 452
Author: S.Richmond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-29 11:03:01

W Unity 4.3 trzeba było również włączyć opcję zewnętrzną z preferencji, ale od Unity 4.5 zrezygnowano z tej opcji, więc pełny proces konfiguracji wygląda następująco:

  1. Przełącz na Visible Meta Files w Editor → Project Settings → Editor → Version Control Mode
  2. Przełącz na Force Text w Editor → Project Settings → Editor → Asset Serialization Mode
  3. Zapisz scenę i projekt z menu File

Również nasz zespół używa nieco bardziej rozbudowanego pliku .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

Zauważ, że jedynymi folderami, które musisz zachować pod kontrolą źródła, są Assets i ProjectSettings.

Więcej informacje na temat utrzymywania projektu Unity pod kontrolą źródłową można znaleźć w ten post.

 51
Author: zasadnyy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-20 18:56:55

Co to jest GIT?

Git to darmowy i open source rozproszony system kontroli wersji (SCM) opracowany przez Linusa Torvaldsa w 2005 roku (założyciela systemu Linux). Jest on stworzony, aby kontrolować wszystko rom małych i dużych projektów z prędkością i wydajnością. Wiodące firmy takie jak Google, Facebook, Microsoft używają Gita na co dzień.

Jeśli chcesz dowiedzieć się więcej o GIT sprawdź ten szybki tutorial ,

Przede wszystkim upewnij się, że masz skonfigurowane środowisko Gita.Musisz skonfigurować zarówno lokalne środowisko, jak i repozytorium Git (wolę Github.com).

Aplikacja kliencka GIT Mac / Windows

Dla aplikacji klienckiej GIT gui poleciłem Ci Github.com,

GitHub to miejsce do dzielenia się kodem ze znajomymi,współpracownikami, kolegami z klasy i zupełnie obcymi. Ponad pięć milionów ludzi korzysta z Githuba, aby wspólnie budować niesamowite rzeczy.

Unity3d settings

Musisz wykonać te ustawienia

Przełącz na widoczny Meta Files in Edit → Project Settings → Editor → Version Control Mode.

Tutaj wpisz opis obrazka

Włącz opcję zewnętrzną w Unity → Preferencje → Pakiety → repozytorium

Tutaj wpisz opis obrazka

Przełącz na wymuszanie tekstu w trybie Edycja → Ustawienia projektu → edytor → tryb serializacji zasobów.

Tutaj wpisz opis obrazka

Źródło: Używanie Gita z kontrolą źródeł gier 3D

 27
Author: NabeelSaleem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-09 19:44:46

Aby dodać do wszystkiego, co zostało powiedziane, idealnie nadaje się również do użycia git lfs z Unity. Używam tego, odkąd wyszedł i nie miał żadnych problemów.

Będziesz chciał to dodać .gitattributes next to your .plik 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
To moja lista plików. Jeśli używasz dodatkowych plików binarnych, a nie List, dodaj je.

Mam również pliki skonfigurowane do korzystania z yamlmerge, trzeba by to skonfigurować. Możesz o tym przeczytać tutaj: http://docs.unity3d.com/Manual/SmartMerge.html

 16
Author: rygo6,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 17:42:17

Pomyślałem, że mogę zamieścić prostszy .gitignore dla każdego, kto jest zainteresowany:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/ProjectSettings
 6
Author: Get Off My Lawn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 20:11:40

Mamy teraz bezproblemową integrację z unity z rozszerzeniem Github to Unity... https://unity.github.com/

Nowe rozszerzenie GitHub dla Unity wprowadza przepływ pracy GitHub i więcej do Unity, zapewniając obsługę dużych plików z Git LFS i blokowaniem plików.

W momencie pisania projektu jest w wersji alfa, ale nadal nadaje się do projektów osobistych.

 4
Author: Bhupen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-26 15:11:04

Edit -> Project Settings -> Editor

Ustaw kontrolę wersji na pliki meta. Ustaw serializację zasobów na wymuszanie tekstu.

Myślę, że tego właśnie chcesz.
 2
Author: afpro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-28 17:03:22

Tylko foldery Assets i ProjectSettings muszą być pod kontrolą wersji git.

Możesz zrobić takie 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/
 1
Author: EllisonLee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-03 08:39:56

Najważniejsze rzeczy do zapamiętania podczas używania git dla unity-Kontrola wersji kodu źródłowego 3D:

(A) NIE NALEŻY sprawdzać folderu biblioteki . Popełniłem ten błąd wiele razy w przeszłości i cierpiałem za to! Usuń lub przenieś folder biblioteki przed dodaniem projektu / plików do git.

(B) użyj "Visible Meta Files" - dla najnowszych wersji unity - 5.3.4 i nowszych to się dzieje domyślnie. W przypadku niektórych wcześniejszych wersji należy zmienić ustawienia pod: Edycja - > Ustawienia Projektu - > Kontrola Wersji

(C) używać a .plik gitignore dla Unity - aby upewnić się, że sanity jest utrzymywany i pliki nie są niepotrzebnie dodawane - jeśli na Androidzie / tizen-dodaj reguły, aby wykluczyć pliki APK i TPK z dodawania do repozytorium. Google around for a .plik gitignore dla unity lub użyj tego modelu .gitignore for Unity provided by GitHub: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) Dokonać jasne .plik gitignore jest dodawany do repozytorium jako pierwszy dodany plik-bo w przeszłości osobiście brakowało mi dodawania .plik gitignore. mam wiele przemyśleń z perspektywy czasu na temat tego, dlaczego tak się stało - ale obecnie po prostu kopiuję i dodaję .plik gitignore jako pierwszy krok konfiguracji repozytorium.

Więc... aby przygotować projekt Unity na Gita, wykonaj następujące czynności:

(1) Przejdź do folderu projektu

(2) Typ git init .

(3) Kopiuj .plik gitignore: Na MacOS: cp ~ / Downloads/.gitignore W systemie Windows: Kopiuj c:\Users [yourusername] \ Downloads.gitignore .

(4) git add .gitignore

(5) git add *

Mam nadzieję, że to pomoże... wszystkiego najlepszego!

 1
Author: Naligator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-10 02:52:25

Możesz użyć Github dla Unity, Rozszerzenia Unity, które wprowadza przepływ pracy git do interfejsu Unity.

Github dla Unity właśnie wydał wersję 1.0 rozszerzenia.

 1
Author: Kyle B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 12:36:25

Unity zapewnia również własną kontrolę wersji źródłowej. przed unity5 był to unityAsset Server, ale teraz został zdeprecjonowany. i uruchomić nowy system sterowania SVN o nazwie unity collaborate.ale głównym problemem przy użyciu unity i dowolnego SVN jest zatwierdzanie i scalanie sceny . ale brak svn daje nam sposób na rozwiązanie tego rodzaju konfliktów lub scalić scenę . więc zależy od Ciebie, z którym SVN jesteś zaznajomiony . Używam narzędzia SmartSVN na Macu . i żółw na oknach .

Tutaj wpisz opis obrazka

 0
Author: Shahbaz Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:25:10

Wolałbym, abyś używał BitBucket, ponieważ nie jest on publiczny i istnieje oficjalny samouczek Unity Na Bitbucket.

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

Mam nadzieję, że to pomoże.

 0
Author: Nipun David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 09:05:15

Dodaję do tematu Gitignore. Zalecany sposób ignoruje bibliotekę i Temp tylko wtedy, gdy jest to główny element Twojego projektu git. jeśli jesteś podobny do mnie i czasami potrzebujesz unity project, aby być częścią repo, a nie całego repo, poprawnymi ciągami w gitignore będą: {]}

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild
 0
Author: zambari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-28 18:47:13