Git for Unity3D kaynak kontrolü nasıl kullanılır?


499

Git kaynak kontrolünü Unity 3D ile kullanmak için , özellikle Unity 3D projelerinin ikili doğasıyla uğraşırken en iyi uygulamalar nelerdir ? Lütfen iş akışını, .gitignore'a hangi yolların dahil edileceğini, Unity ve / veya projede hangi ayarların yapılması gerektiğini ve not edilmesi gereken diğer özel şeyleri açıklayın.

Not: Asset Server'ı kullanmanın Unity tarafından önerilen bir yol olduğunu anlıyorum, ancak Git'i çeşitli nedenlerle kullanmak istiyorum. Lütfen yalnızca Varlık Sunucusu'nu kullanmam gerektiğini belirten veya yanıtlayan yanıtlar yok. Varlık Sunucusu gerçekten benim için bir seçenek değil.


3
anlamsız git V svn bağımsız değişkenlerinden bağımsız olarak "sadece svn kullanın", git sadece büyük ikili dosyalar için değildir. birlik projeleri bir avuç kod satırı ile filmler (ve çeşitli muazzam ikili dosyalar - dokular vb). film koleksiyonunuzu saklamak için git'i kullanır mısınız? svn en azından makul.
Fattie

1
En basit çözüm, tüm ikili klasörleri gitignore ile hariç tutmak ve yalnızca gerçek kod dosyalarınız ve belki de varlık dosyalarınız için git'i kullanmaktır. Her takım üyesi bunları kendileri için derleyebildiğinden, tüm ikili dosyaların dahil edilmesi gerekmez mi?
Kokodoko

@Kokodoko Sanatçılar kendi yürütülebilir dosyalarını derleyemezler.
Crashworks

Bu doğru olsa bile, hala yeni görüntü varlıklarını
git'e itebilirler

@Kokodoko Bu, bir sanatçının taahhüdü görmek için bir geliştiriciyi beklemesi ve oyundaki değişikliklerini görmek için bir yapı yapması gerektiği anlamına gelir. Bu çok uzun bir yineleme zamanı.
Crashworks

Yanıtlar:


522

Aşağıdaki kişisel blogumdan bir alıntıdır .

Git'i 3D Oyunlar ile kullanma

Ekim 2015 Güncellemesi: GitHub, Git için LFS adı verilen ve aşağıdaki sorunla doğrudan ilgili bir eklenti yayınladı . Artık büyük ikili dosyaları kolayca ve verimli bir şekilde sürümleyebilirsiniz!

Git, 3D oyunlarla kutudan çıkar çıkmaz çalışabilir. Ancak buradaki ana uyarı, büyük (> 5 MB) medya dosyalarının sürümünün, taahhüt geçmişiniz şiştiği için uzun vadede bir sorun olabileceğidir. Projelerimizdeki bu potansiyel sorunu, yalnızca ikili varlığını nihai kabul edildiğinde versiyonlayarak çözdük. 3D sanatçılarımız , hem yukarıdaki nedenle hem de çok daha hızlı ve basit olduğu için WIP varlıkları üzerinde çalışmak için Dropbox'ı kullanıyor (pek çok sanatçı aktif olarak Git'i kullanmak istemeyecek!).

Git İş Akışı

Git iş akışınız, ekip olarak kendi deneyimleriniz ve birlikte nasıl çalıştığınız göz önüne alındığında kendiniz karar vermeniz gereken bir şeydir. Ancak. Burada orijinal yazar tarafından tarif edilen uygun şekilde adlandırılmış Git Flow metodolojisini şiddetle tavsiye ediyorum .

Burada, yazarı mükemmel bir şekilde ve oldukça az kelimeyle tanımladığı için metodolojinin nasıl çalıştığı konusunda çok fazla derinlemesine girmeyeceğim, bu yüzden geçmesi kolay. Ekibimle bir süredir kullanıyorum ve şimdiye kadar denediğimiz en iyi iş akışı.

Git GUI İstemci Uygulaması

Bu gerçekten kişisel bir tercihtir, çünkü Git GUI veya hiç GUI kullanıp kullanmama konusunda oldukça az seçenek vardır. Ancak Git Flow uzantısı ile mükemmel bir şekilde takıldığı için ücretsiz SourceTree uygulamasını önermek istiyorum . Git Akış metodolojisini uygulamalarına uygulamak için SourceTree eğitimini buradan okuyun .

Unity3D Klasörleri Yoksay

Güncel bir sürüm için Github Unity.gitignore dosyasını işletim sistemi özellikleri olmadan sakladı .

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

Unity 3D v4.3 ve sonraki sürümler için:

  1. (V4.5 ve sonraki sürümlerde bu adımı atlayın) Externaliçindeki seçeneği etkinleştirin Unity → Preferences → Packages → Repository.
  2. Menüyü açın Editve şunu seçin Project Settings → Editor:
    1. Olarak Version Control Modedeğiştirin Visible Meta Files.
    2. Olarak Asset Serialization Modedeğiştirin Force Text.
  3. Sahneyi ve projeyi Filemenüden kaydedin .

Mevcut deponuzu LFS'ye taşımak ister misiniz?

Burada nasıl yapılacağına ilişkin adımlar için blog yayınımı kontrol edin .

Ek Yapılandırma

Git'i Unity3D projeleriyle kullanmakla ilgili birkaç önemli sıkıntıdan biri, Git'in dizinleri umursamaması ve dosyaları onlardan kaldırdıktan sonra boş dizinleri mutlu bir şekilde bırakmasıdır. Unity3D, bu dizinler için * .meta dosyaları oluşturur ve Git bu meta dosyaları eklemeye ve kaldırmaya devam ettiğinde ekip üyeleri arasında bir savaşa neden olabilir.

Bu Git-birleştirme sonrası kancayı , /.git/hooks/içinde Unity3D projeleri bulunan depolar için klasöre ekleyin . Herhangi bir Git çekme / birleştirme işleminden sonra, hangi dosyaların kaldırıldığına bakar, içinde bulunduğu dizinin boş olup olmadığını kontrol eder ve varsa siler.


2
Git iş akışından bahsetmek güzel, ama belki de soruma açıklık getirmeliyim, özellikle birlik 3D'ye özgü iş akışlarını soruyorum. Bildiğiniz gibi, birlik projeleri büyük ölçüde ikili dosyalara dayanır. Bununla başa çıkmak için özel hususlar var mı? Bu konuyu araştırırken bulduğum bazı öneriler, mümkün olduğunca birleşmeden kaçınan bir iş akışı kullanmaktı. Belki de bu düşüncede paylaşmıyorsunuz, ancak sorum genel iş akışı tercihlerinden ziyade unity3d'ye özgü konulara daha açık.
PressingOnAlways

3
Büyük ikili içeriğimizi yönetmek için bir git-ek kullanıyoruz. Windows desteği harika değil ama iyileşiyor. Bu, yalnızca büyük ikili dosyalarda devirleri izlemekle ilgilenmiyorsanız faydalıdır.
Jerdak

2
Bunun için bir güncelleme - kurulumunuzu denedik ve oldukça iyi çalıştı, ancak varlıklarımızın otomatik olarak senkronize edilmesini istedik. Şimdi ikili varlık klasörünü seçici olarak senkronize etmek için sugarsync kullanıyoruz. Dropbox yalnızca dropbox klasörünü senkronize eder, ancak şeker senkronizasyonu ile, klasörleri sabit diskteki herhangi bir yerde keyfi olarak senkronize edebilirsiniz. Bu büyük ikili dosyalar için bir alt klasör tanımlamak için Varlıklar dizin yapımızı biraz değiştirmek zorunda kaldık, ancak şimdiye kadar gerçekten iyi çalıştı. Bu klasörü sadece .gitignore ve şeker senkronizasyonunun senkronize kalmasına izin veriyoruz.
PressingOnAlways

2
Neden gidelim Hidden Meta Files?
Slipp D.Thompson

2
Kopyala ve yapıştır yazım hatası düzeltildi - Evet, Görünür Meta Dosyaları olmalıdır.
S.Richmond

60

Unity 4.3'te ayrıca Harici seçeneği tercihlerden etkinleştirmeniz gerekiyordu, ancak Unity 4.5'ten beri bunun için seçeneği bıraktılar, bu nedenle tam kurulum işlemi şöyle görünüyor:

  1. Geçiş Visible Meta FilesbölgesiEditor → Project Settings → Editor → Version Control Mode
  2. Geçiş Force TextbölgesiEditor → Project Settings → Editor → Asset Serialization Mode
  3. FileMenüden sahneyi ve projeyi kaydet

Ayrıca ekibimiz biraz daha genişletilmiş bir .gitignoredosya kullanıyor:

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

Kaynak kontrolü altında tutmanız gereken tek klasörlerin Assetsve olduğunu unutmayın ProjectSettings.

Unity Project'in kaynak kontrolü altında tutulması hakkında daha fazla bilgiyi bu yayında bulabilirsiniz .


Bu yeni seçenekleri eklemek için yanıtımı en üstte düzenlerseniz daha iyi olabilir. :)
S.Richmond

6
Neden gidelim Hidden Meta Files?
Slipp D.Thompson

Birinci nokta açıkça yanlıştır. Birlik yok → Tercihler → Paketler → Depo
Agostino

1
docs.unity3d.com/Manual/… 'a göre Görünür Meta Dosyaları olmalı
Markus

1
Ekibim için iyi çalışıyor. Çok teşekkür ederim.
eifersucht

34

GIT nedir?

Git, 2005 yılında Linus Torvalds (Linux OS kurucusu) tarafından geliştirilen ücretsiz ve açık kaynaklı dağıtılmış bir sürüm kontrol sistemidir (SCM). Küçük ve büyük projelerin her şeyi hız ve verimlilikle kontrol etmek için yaratılmıştır. Google, Facebook ve Microsoft gibi önde gelen şirketler her gün GIT kullanıyor.

GIT hakkında daha fazla bilgi edinmek istiyorsanız bu Hızlı eğiticiye bakın ,

Her şeyden önce Git ortamınızı kurduğunuzdan emin olun. Hem yerel ortamınızı hem de Git havuzunu ayarlamanız gerekir (Github.com'u tercih ederim).

GIT istemci uygulaması Mac / Windows

GIT gui istemci uygulaması için Github.com ile gitmenizi tavsiye ederim,

GitHub, kodu arkadaşlarınızla, iş arkadaşlarınızla, sınıf arkadaşlarınızla ve yabancılarla paylaşabileceğiniz yerdir. Beş milyondan fazla insan birlikte harika şeyler oluşturmak için GitHub'ı kullanıyor.

Unity3d ayarları

Bu ayarları yapmanız gerekir

Düzenle → Proje Ayarları → Düzenleyici → Sürüm Kontrol Modunda Görünür Meta Dosyalara geçin.

resim açıklamasını buraya girin

Unity → Tercihler → Paketler → Depo'da Harici seçeneğini etkinleştir

resim açıklamasını buraya girin

Düzenle → Proje Ayarları → Düzenleyici → Varlık Serileştirme Modunda Metni Zorla'ya geçin.

resim açıklamasını buraya girin

Kaynak: Git'i 3D Oyunlar ile Kullanma Kaynak Kontrolü


6
+1 Bu cevap yukarıda yazılmıştır ancak @NabeelSaleem yanıtı sağladığı görüntüler ve açık rehber ile bana yardımcı oldu :) teşekkürler
aflatoon

3
Preferences > PackagesUnity 5.x Normal'de bulamıyorum ? ty
Yves Lange

5
@NabeelSaleem evet. Aslında Unity 5.x'teki bu adım gerekli değildir. ty
Yves Lange

22

Belirtilen her şeye eklemek için git lfs'yi Unity ile kullanmak da idealdir . Çıktığı günden beri bunu kullanıyorum ve hiçbir sorun yaşamadım.

Bunu dosyanızın .gitattributesyanına eklemek isteyeceksiniz.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

Bu benim hareketli dosya listem. Listede olmayan ek ikili dosyalar kullanıyorsanız, bunları ekleyin.

Ayrıca yamlmerge kullanmak için yapılandırılmış dosyaları var, bunu ayarlamanız gerekir. Burada okuyabilirsiniz: http://docs.unity3d.com/Manual/SmartMerge.html


11

Artık Github to Unity uzantısı ile birliğe sorunsuz entegrasyonumuz var ... https://unity.github.com/

Yeni GitHub for Unity uzantısı GitHub iş akışını ve daha fazlasını Unity'ye getirir ve Git LFS ve dosya kilitleme ile büyük dosyalar için destek sağlar.

Yazma sırasında proje alfadadır, ancak kişisel projeler için hala kullanılabilir.


bunu denedin mi
Nabeel K

11

.gitignoreİlgilenen herkes için daha basit bir mesaj gönderebileceğimi düşündüm :

# Ignore Everything
/*

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

7
Yine, tüm bu cevaplar bu sayfada oldukça güncel değil. herhangi bir nedenle git'i
Fattie

Küçük, basit ve tüm sürümlerle tam uyumlu: Bu betiğin, yakın zamanda proje yapılarını ( UnityPackageManager/ve Packages/) değiştiren Unity 2017 ve 2018 için bile en iyi şekilde çalıştığını düşünüyorum .
Isaak Eriksson

8

Git-birlik kaynak kodu sürüm kontrolü için git kullanırken hatırlanması gereken başlıca şeyler:

(A) YAPMAYIN check-in Kütüphane klasörünün . Bu hatayı geçmişte defalarca yaptım ve bunun için acı çektim! Projenizi / dosyalarınızı git'e eklemeden önce VEYA kütüphane klasörünü silin.

(B) "Görünür Meta Dosyaları" kullanın - en yeni birlik sürümleri için - 5.3.4 ve üstü bu varsayılan olarak gerçekleşir. Önceki sürümlerin bazıları için aşağıdaki ayarları değiştirmeniz gerekir: Düzenle-> Proje Ayarları-> Sürüm Kontrolü

(C) Unity için bir .gitignore dosyası kullanın - akıl sağlığının korunduğundan ve dosyaların gereksiz yere eklenmediğinden emin olmak için - android / tizen'de - APK ve TPK dosyalarının depoya eklenmesini önlemek için kurallar ekleyin. Google, birlik için bir .gitignore dosyası için VEYA GitHub tarafından sağlanan bu modeli .gitignore için kullanın: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) .gitignore dosyasının ilk eklenen dosya olarak depoya eklendiğinden emin olun - geçmişte kişisel olarak .gitignore dosyası eklemeyi kaçırdım. Neden böyle olduğuna dair birçok düşünceniz var - ama bugünlerde sadece .gitignore dosyasını depo kurmanın ilk adımı olarak kopyalayıp ekliyorum.

Bu yüzden ... bir Unity projesini git için hazır hale getirmek için aşağıdakileri yapın:

(1) Proje klasörüne git

(2) git init yazın.

(3) .gitignore dosyasını kopyalayın: MacOS'ta: cp ~ / Downloads / .gitignore Windows'ta: c: \ Users [kullanıcı adınız] \ Downloads.gitignore'u kopyalayın.

(4) git add .gitignore

(5) git ekle *

Umarım bu yardımcı olur ... tüm iyi!


6

Edit -> Project Settings -> Editor

Sürüm Denetimi'ni meta dosyalara ayarlayın. Metni zorlamak için Öğe Serileştirmeyi ayarlayın.

Bence istediğin bu.


1
Ve sonra YAML birleşmesini nasıl kurarsınız?
shinzou


6

Git iş akışını Unity'nin kullanıcı arayüzüne getiren bir Unity Uzantısı olan Github for Unity'yi kullanabilirsiniz .

Github for Unity , eklentinin 1.0 sürümünü yayınladı.


5

Git Sürümü denetimi altında yalnızca Varlıklar ve ProjectSettings klasörlerinin olması gerekir.

Böyle bir gitignore yapabilirsiniz.

[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 ayrıca kendi Kaynak sürüm kontrolünü sağlar. unity5'ten önce unityAsset Server oldu ama şimdi amortismana tabi tutuldu. ve birlik işbirliği denilen yeni bir SVN kontrol sistemi başlatın. ancak birliği kullanarak ana sorun ve herhangi bir SVN sahneye çıkıyor ve birleştiriyor. ama svn olmayan bize bu tür çatışmaları çözme veya birleştirme sahnesini çözme yolu verir. hangi SVN hakkında bilgi sahibi olduğunuza bağlı. Mac'te SmartSVN aracını kullanıyorum. ve kaplumbağalar üstünde pencere eşiği.

resim açıklamasını buraya girin


1

Sadece Gitignore'un alt jetine ekliyoruz. Önerilen yol sadece git projenizin kökü ile Kütüphane ve Temp'i yok sayar. Eğer benim gibiyseniz ve bazen repo'nun bir parçası olmak için repo'nun bir parçası olmak için birlik projesine ihtiyacınız varsa, gitignore'daki doğru dizeler şöyle olurdu:

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

0

Geçmişte git ile hayal kırıklığına uğramış birinden çok basit bir iş akışı eklemek istedim. Git'i kullanmanın birkaç yolu vardır, muhtemelen birlik için en yaygın olanı GitHub Desktop, Git Bash ve GitHub Unity'dir.

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

Aslında hepsi aynı şeyi kullanıcı seçimi dışında yapıyor. 50GB için 4 $ / ay için veri paketlerinde ek depolama alanı bulunan 1GB ücretsiz büyük dosya depolamasına izin veren büyük dosya kurulumu için git'e sahip olabilirsiniz ve bu, 100mb'den büyük dosyaları uzak depolara aktarmanıza olanak tanır (gerçek dosyaları bir sunucunuzda ve repoınızda bir işaretçi)

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

Herhangi bir nedenden dolayı lfs kurmak istemiyorsanız, projenizi bulunduğunuz dizine size: large yazarak projelerinizi Windows'ta 128 MB'den büyük dosyalar için tarayabilirsiniz. Bu, büyük dosyaları aramak için kullanışlı olabilir, ancak 100mb ile 128mb arasında kaçırılan bazı dosyalar olabilir.

resim açıklamasını buraya girin

Git bash'ın genel biçimi

git ekleyin. (kaydedilecek dosyaları ekler)

git commit -m 'message' (dosyaları bir mesajla teslim eder, hala bilgisayarınızdadır ve uzak depoda değiller, temelde yeni bir taahhüt olarak 'sürümlendirildiler')

git push (dosyaları depoya aktar)

Birlik projeleri için git bash'ın dezavantajı, 100mb'den büyük bir dosya varsa, itene kadar bir hata almayacağınızdır. Daha sonra, başınızı önceki taahhüdüne sıfırlayarak taahhüdünüzü geri almalısınız. Bir tür güçlük, özellikle de git bash ile yeni iseniz.

GitHub Desktop'ın avantajı, 100mb ile dosya işlemeden ÖNCE size bir açılır hata mesajı verecektir. Daha sonra bu dosyaları küçültebilir veya .gitignore dosyasına ekleyebilirsiniz.

Bir .gitignore dosyası kullanmak için, yerel depo kök dizininizde .gitignore adlı bir dosya oluşturun. Dosyaları atlamak istediğiniz her seferde bir satır ekleyin. SharedAssets ve diğer Asset olmayan klasör dosyaları genellikle atlanabilir ve düzenleyicide otomatik olarak yeniden doldurulur (paketler yeniden içe aktarılabilir vb.). Dosya türlerini hariç tutmak için joker karakterler de kullanabilirsiniz.

GitHub repo'nuzu başka kişiler kullanıyorsa ve klonlamak veya çekmek istiyorsanız, GitHub masaüstünde veya Git bash'da da bu seçeneklerden yararlanabilirsiniz.

GitHub'u editörde kullanabileceğiniz Unity GitHub paketinden çok bahsetmedim çünkü kişisel olarak arayüzü çok kullanışlı bulamadım ve genel olarak herkesin git'e aşina olmasına yardımcı olacağını düşünmüyorum, ama bu sadece benim tercih.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.