Jak korzystać z kontroli źródła Git for Unity3D?

499

Jakie są najlepsze praktyki korzystania z kontroli źródła Git w Unity 3D, szczególnie w przypadku binarnego charakteru projektów Unity 3D? Proszę opisać przepływ pracy, jakie ścieżki będą zawarte w .gitignore, jakie ustawienia należy ustawić w Unity i / lub projekcie oraz wszelkie inne specjalne rzeczy, na które należy zwrócić uwagę.

Uwaga: Zdaję sobie sprawę, że korzystanie z Asset Server jest zalecanym przez Unity sposobem, ale chciałbym używać Git z różnych powodów. Proszę, nie udzielaj odpowiedzi, które twierdzą lub twierdzą, że powinienem po prostu użyć serwera zasobów. Serwer zasobów naprawdę nie jest dla mnie opcją.

PressingOnAlways
źródło
3
„po prostu użyj svn” niezależnie od bezcelowych argumentów git V svn, git po prostu nie jest dla dużych plików binarnych. Projekty jedności to filmy (i różne ogromne pliki binarne - tekstury itp.), z garstką linii kodu. czy użyłbyś git do przechowywania swojej kolekcji filmów? SVN jest co najmniej rozsądny.
Fattie,
1
Najprostszym rozwiązaniem jest po prostu wykluczenie wszystkich folderów binarnych za pomocą gitignore i używanie git tylko do rzeczywistych plików kodu i być może plików zasobów. Nie trzeba uwzględniać wszystkich plików binarnych, ponieważ każdy członek zespołu może je skompilować dla siebie?
Kokodoko,
@Kokodoko Artyści nie mogą tworzyć własnych plików wykonywalnych.
Crashworks,
Nawet gdyby to była prawda, wciąż mogą wypychać nowe zasoby graficzne do git ... aby deweloperzy mogli skompilować z nową grafiką ...
Kokodoko
@Kokodoko Oznacza to, że artysta musiałby poczekać, aż deweloper zobaczy zatwierdzenie i wykona kompilację, aby zobaczyć zmiany w grze. To bardzo długi czas iteracji.
Crashworks,

Odpowiedzi:

522

Poniżej znajduje się fragment mojego osobistego bloga .

Korzystanie z Git w grach 3D

Aktualizacja z października 2015 r .: GitHub wydał wtyczkę Git o nazwie Git LFS, która bezpośrednio rozwiązuje poniższy problem. Teraz możesz łatwo i wydajnie wersjonować duże pliki binarne!

Git może dobrze działać z gotowymi grami 3D. Jednak głównym zastrzeżeniem jest to, że przechowywanie wersji dużych (> 5 MB) plików multimedialnych może stanowić problem w dłuższej perspektywie, ponieważ historia zatwierdzeń się powiększa. Ten potencjalny problem rozwiązaliśmy w naszych projektach, przechodząc do wersji zasobu binarnego tylko wtedy, gdy zostanie uznany za ostateczny. Nasi artyści 3D używają Dropbox do pracy nad zasobami WIP, zarówno z powyższego powodu, jak i dlatego, że jest on znacznie szybszy i prostszy (niewielu artystów będzie aktywnie chciało korzystać z Git!).

Git Workflow

Twój obieg pracy w Git jest czymś, co musisz sam zdecydować, biorąc pod uwagę własne doświadczenia jako zespół i sposób współpracy. Jednak. Zdecydowanie poleciłbym odpowiednio nazwaną metodologię Git Flow opisaną przez oryginalnego autora tutaj .

Nie będę się zbytnio zagłębiał w sposób, w jaki działa metodologia, ponieważ autor opisuje ją doskonale i w kilku słowach, aby łatwo było się z nią zapoznać. Od jakiegoś czasu korzystam z moim zespołem i jest to najlepszy przepływ pracy, jaki do tej pory próbowaliśmy.

Aplikacja kliencka Git GUI

Jest to naprawdę osobista preferencja, ponieważ istnieje wiele opcji w zakresie Git GUI lub tego, czy w ogóle używać GUI. Chciałbym jednak zasugerować bezpłatną aplikację SourceTree, ponieważ idealnie pasuje do rozszerzenia Git Flow. Przeczytaj samouczek SourceTree tutaj na temat wdrażania metodologii Git Flow w ich aplikacji.

Unity3D Ignoruj ​​foldery

Aby pobrać aktualną wersję, Github utrzymał plik Unity.gitignore bez specyfikacji 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

Ustawienia Unity3D

W przypadku wersji Unity 3D v4.3 i nowszych:

  1. (Pomiń ten krok w wersji 4.5 lub nowszej) Włącz Externalopcję w Unity → Preferences → Packages → Repository.
  2. Otwórz Editmenu i wybierz Project Settings → Editor:
    1. Przełącz Version Control Modena Visible Meta Files.
    2. Przełącz Asset Serialization Modena Force Text.
  3. Zapisz scenę i projekt z Filemenu.

Czy chcesz przenieść istniejące repozytorium do LFS?

Sprawdź mój post na blogu, aby dowiedzieć się, jak to zrobić tutaj .

Dodatkowa konfiguracja

Jedną z niewielu głównych niedogodności związanych z używaniem Git w projektach Unity3D jest to, że Git nie dba o katalogi i chętnie zostawia puste katalogi po usunięciu z nich plików. Unity3D utworzy pliki * .meta dla tych katalogów i może spowodować bitwę między członkami zespołu, gdy Git zobowiązuje się do dodawania i usuwania tych plików meta.

Dodaj ten zaczep Git po scaleniu do /.git/hooks/folderu dla repozytoriów z projektami Unity3D w nich. Po każdym ściągnięciu / scaleniu Git, sprawdzi, jakie pliki zostały usunięte, sprawdzi, czy katalog, w którym istniał, jest pusty, a jeśli tak, usuń go.

S.Richmond
źródło
2
Wspominanie o przepływie pracy git jest miłe, ale być może powinienem wyjaśnić w moim pytaniu o przepływy pracy szczególnie specyficzne dla Unity 3D. Jak zapewne wiesz, projekty Unity w dużej mierze opierają się na plikach binarnych. Czy są jakieś specjalne względy, aby sobie z tym poradzić? Niektóre zalecenia, które znalazłem podczas badania tego tematu, polegały na użyciu przepływu pracy, który w jak największym stopniu unikał scalania. Być może nie podzielasz tego sentymentu, ale moje pytanie dotyczy bardziej konkretnych problemów unity3d niż ogólnych preferencji przepływu pracy.
PressingOnAlways
3
Używamy aneksu do zarządzania naszą dużą zawartością binarną. Obsługa systemu Windows nie jest świetna, ale jest coraz lepsza. Jest to pomocne tylko wtedy, gdy nie obchodzi Cię śledzenie obrotów w dużych plikach binarnych.
Jerdak
2
Aktualizacja tego - wypróbowaliśmy twoją konfigurację i działała całkiem dobrze, ale chcieliśmy, aby nasze zasoby były automatycznie synchronizowane. Teraz używamy sugarsync do selektywnej synchronizacji folderu zasobów binarnych. Dropbox zsynchronizuje tylko folder Dropbox, ale dzięki synchronizacji cukru możesz dowolnie synchronizować foldery w dowolnym miejscu na dysku twardym, co jest niezwykle przydatne. Musieliśmy nieco zmienić strukturę katalogów Assets, aby zdefiniować jeden podfolder dla tych dużych plików binarnych, ale jak dotąd działał naprawdę dobrze. Po prostu .gitignore ten folder i pozwalamy synchronizacji cukru, aby zachować synchronizację.
PressingOnAlways
2
Dlaczego warto wybrać Hidden Meta Files?
Slipp D. Thompson
2
Naprawiono literówkę „kopiuj i wklej” - tak, powinny to być widoczne pliki meta.
S.Richmond
60

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

  1. Przełącz się Visible Meta FilesnaEditor → Project Settings → Editor → Version Control Mode
  2. Przełącz się Force TextnaEditor → Project Settings → Editor → Asset Serialization Mode
  3. Zapisz scenę i projekt z Filemenu

Również nasz zespół używa nieco bardziej rozszerzonego .gitignorepliku:

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

Pamiętaj, że jedynymi folderami, które musisz zachować pod kontrolą źródła, są Assetsi ProjectSettings.

Więcej informacji o utrzymywaniu Projektu Unity pod kontrolą źródła można znaleźć w tym poście .

zasadnyy
źródło
Może być lepiej, jeśli edytujesz moją odpowiedź u góry, aby uwzględnić te nowe opcje. :)
S.Richmond
6
Dlaczego warto wybrać Hidden Meta Files?
Slipp D. Thompson,
Punkt pierwszy jest po prostu błędny. Brak jedności → Preferencje → Pakiety → Repozytorium
Agostino
1
zgodnie z docs.unity3d.com/Manual/… powinny to być widoczne pliki meta
Markus
1
Działa dobrze dla mojego zespołu. Dziękuję Ci bardzo.
eifersucht
34

Co to jest GIT?

Git to darmowy i rozproszony system kontroli wersji Open Source (SCM) opracowany przez Linusa Torvaldsa w 2005 roku (założyciel Linux OS). Został stworzony, aby kontrolować wszystko od małych do dużych projektów z szybkością i wydajnością. Wiodące firmy takie jak Google, Facebook, Microsoft codziennie korzystają z GIT.

Jeśli chcesz dowiedzieć się więcej o GIT, zapoznaj się z tym krótkim samouczkiem ,

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

Aplikacja kliencka GIT Mac / Windows

W przypadku aplikacji klienckiej GIT gui zaleciłem przejście na Github.com,

GitHub to miejsce do dzielenia się kodem z przyjaciółmi, współpracownikami, kolegami z klasy i kompletnymi nieznajomymi. Ponad pięć milionów osób korzysta z GitHub, aby wspólnie tworzyć niesamowite rzeczy.

Ustawienia Unity3d

Musisz wykonać te ustawienia

Przejdź do widocznych plików meta w menu Edycja → Ustawienia projektu → Edytor → Tryb kontroli wersji.

wprowadź opis zdjęcia tutaj

Włącz opcję Zewnętrzną w Unity → Preferencje → Pakiety → Repozytorium

wprowadź opis zdjęcia tutaj

Przełącz na Wymuś tekst w Edycja → Ustawienia projektu → Edytor → Tryb szeregowania zasobów.

wprowadź opis zdjęcia tutaj

Źródło: Korzystanie z Git z kontrolą gier 3D

NabeelSaleem
źródło
6
+1 Ta odpowiedź jest już napisana powyżej, ale odpowiedź @NabeelSaleem pomogła mi ze zdjęciami, które podał i jasnym przewodnikiem :) dzięki
aflatoon
3
Nie mogę znaleźć Preferences > Packagesw Unity 5.x Normal? ty
Yves Lange
5
@NabeelSaleem tak. W rzeczywistości ten krok w Unity 5.x nie jest konieczny. ty
Yves Lange
22

Aby dodać do wszystkiego, co wspomniano, idealnie jest również używać git lfs z Unity. Używam tego, odkąd to wyszło i nie miałem z tym problemu.

Będziesz chciał dodać to .gitattributesdo swojego .gitignorepliku

*.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 jest moja lista plików kroczących. Jeśli korzystasz z dodatkowych plików binarnych, których nie ma na liście, dodaj je.

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

rygo6
źródło
11

Mamy teraz bezproblemową integrację z jednością z rozszerzeniem Github do Unity ... https://unity.github.com/

Nowe rozszerzenie GitHub dla Unity przenosi 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 projekt jest w fazie alfa, ale nadal nadaje się do osobistych projektów.

Bhupen
źródło
próbowałeś tego?
Nabeel K
11

Pomyślałem, że mogę napisać prostsze .gitignoredla każdego, kto jest zainteresowany:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
Wynoś się z mojego trawnika
źródło
7
Ponownie, wszystkie te odpowiedzi są dość nieaktualne na tej stronie. jeśli z jakiegoś powodu musisz używać git z Unity, github.com/github/gitignore/blob/master/Unity.gitignore
Fattie
Mały, prosty i w pełni kompatybilny ze wszystkimi wersjami: uważam, że ten skrypt działa najlepiej, nawet dla Unity 2017 i 2018, które niedawno zmieniły strukturę projektu ( UnityPackageManager/i Packages/).
Isaak Eriksson,
8

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

(A) NIE melduj się w folderze Library . Popełniłem ten błąd wiele razy w przeszłości i cierpiałem z tego powodu! Usuń LUB przenieś folder biblioteki przed dodaniem projektu / plików do git.

(B) Użyj „Widocznych plików meta” - w przypadku najnowszych wersji jedności - 5.3.4 i nowszych dzieje się tak domyślnie. W przypadku niektórych wcześniejszych wersji należy zmienić ustawienia w: Edycja-> Ustawienia projektu-> Kontrola wersji

(C) Użyj pliku .gitignore dla Unity - aby upewnić się, że zdrowie psychiczne jest zachowane i że pliki nie zostaną niepotrzebnie dodane - jeśli na Androidzie / Tizen - dodaj reguły wykluczające dodawanie plików APK i TPK do repozytorium. Google szuka pliku .gitignore dla jedności LUB użyj tego modelu .gitignore dla Unity dostarczonego przez GitHub: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) Upewnij się, że plik .gitignore jest dodany do repozytorium jako pierwszy dodany plik - ponieważ w przeszłości osobiście brakowało mi dodania pliku .gitignore. Mam wiele przemyśleń z perspektywy czasu, dlaczego tak się stało - ale teraz po prostu kopiuję i dodam plik .gitignore jako pierwszy krok do skonfigurowania repozytorium.

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

(1) Przejdź do folderu projektu

(2) Wpisz git init.

(3) Skopiuj plik .gitignore: w systemie MacOS: cp ~ / Downloads / .gitignore W systemie Windows: skopiuj c: \ Users [nazwa użytkownika] \ Downloads.gitignore.

(4) git dodaj .gitignore

(5) git add *

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

Naligator
źródło
6

Edit -> Project Settings -> Editor

Ustaw Kontrola wersji na pliki meta. Ustaw Serializację zasobów, aby wymusić tekst.

Myślę, że tego właśnie chcesz.

afpro
źródło
1
A potem, jak skonfigurować scalanie YAML?
shinzou
6

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

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

Kyle B.
źródło
5

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

Możesz zrobić takiego 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
źródło
3

Unity zapewnia również własną kontrolę wersji kodu źródłowego. przed unity5 był to unityAsset Server, ale teraz jest już nieaktualny. i uruchomić nowy system sterowania SVN o nazwie jedność współpracować. ale głównym problemem związanym z korzystaniem z jedności jest to, że dowolna SVN popełnia i scala scenę. ale Non of svn daje nam możliwość rozwiązania tego rodzaju konfliktów lub scalenia sceny. więc zależy od ciebie, z którym SVN znasz. Używam narzędzia SmartSVN na komputerze Mac. i żółwia w oknach.

wprowadź opis zdjęcia tutaj

Shahbaz Ali
źródło
1

Po prostu dodałem podstrumień Gitignore. Zalecany sposób ignoruje tylko Library i Temp, jeśli jest to katalog główny twojego projektu git. jeśli jesteś podobny do mnie i czasami potrzebujesz projektu jedności, który będzie częścią repozytorium, a nie całości repo, prawidłowe ciągi w gitignore będą:

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild
zambari
źródło
0

Chciałem dodać bardzo prosty przepływ pracy od kogoś, kto był sfrustrowany gitem w przeszłości. Istnieje kilka sposobów korzystania z git, prawdopodobnie najbardziej popularne dla jedności to GitHub Desktop, Git Bash i GitHub Unity

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

Zasadniczo wszyscy robią to samo, ale wybór użytkownika. Możesz mieć git do konfiguracji dużych plików, który pozwala na 1 GB bezpłatnej pamięci dużych plików z dodatkową pamięcią dostępną w paczkach danych za 4 USD / mc za 50 GB, a to pozwoli ci przesyłać pliki> 100 MB do zdalnych repozytoriów (przechowuje rzeczywiste pliki na serwer i w twoim repozytorium wskaźnik)

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

Jeśli nie chcesz konfigurować LFS z jakiegokolwiek powodu, możesz skanować projekty w poszukiwaniu plików> 128 MB w Windows, wpisując rozmiar: duży w katalogu, w którym masz projekt. Może to być przydatne do wyszukiwania dużych plików, chociaż mogą zostać pominięte niektóre pliki między 100 MB a 128 MB.

wprowadź opis zdjęcia tutaj

Ogólny format git bash to

git add. (dodaje pliki do zatwierdzenia)

git commit -m 'message' (zatwierdza pliki z komunikatem, nadal znajdują się na twoim komputerze, a nie w zdalnym repozytorium, w zasadzie zostały „wersjonowane” jako nowe zatwierdzenie)

git push (wypychaj pliki do repozytorium)

Wadą git bash dla projektów jedności jest to, że jeśli jest plik> 100mb, nie pojawi się błąd, dopóki go nie wypchniesz. Następnie musisz cofnąć zatwierdzenie, resetując głowę do poprzedniego zatwierdzenia. Trochę kłopotów, szczególnie jeśli jesteś nowy w git bash.

Zaletą GitHub Desktop jest to, że PRZED zatwierdzeniem plików o pojemności 100 MB wyświetli się komunikat o błędzie. Następnie możesz zmniejszyć te pliki lub dodać je do pliku .gitignore.

Aby użyć pliku .gitignore, utwórz plik o nazwie .gitignore w katalogu głównym repozytorium lokalnego. Po prostu dodaj pliki po jednym wierszu, który chcesz pominąć. Pliki SharedAssets i inne pliki folderów innych niż Asset można zwykle pominąć i automatycznie wypełnią się ponownie w edytorze (pakiety można ponownie zaimportować itp.). Możesz również użyć symboli wieloznacznych, aby wykluczyć typy plików.

Jeśli inne osoby używają Twojego repozytorium GitHub i chcesz sklonować lub pociągnąć, masz te opcje dostępne również na pulpicie GitHub lub Git Bash.

Nie wspominałem wiele o pakiecie Unity GitHub, w którym możesz używać GitHub w edytorze, ponieważ osobiście nie uważałem interfejsu za bardzo przydatny i nie sądzę, aby ogólnie pomógł każdemu zapoznać się z git, ale to tylko moja pierwszeństwo.

vasmos
źródło