Unity Projelerinde Git LFS ve Versiyon Kontrol İpuçları

Unity projelerinizde Git LFS kullanarak büyük binary dosyaları (asset'ler) nasıl etkili bir şekilde yöneteceğinizi ve versiyon kontrolü en iyi uygulamalarını öğrenin.

Unity ile oyun geliştirme, birçok farklı dosya türünü içeren karmaşık bir süreçtir. Modeller, dokular, sesler, animasyonlar gibi büyük binary (ikili) dosyalar, projenin önemli bir parçasını oluşturur. Geleneksel Git, küçük metin tabanlı dosyalar için harika çalışsa da, bu tür büyük dosyaları yönetmekte zorlanır. İşte bu noktada Unity Git LFS (Large File Storage) devreye girer ve versiyon kontrol deneyiminizi kökten değiştirir.

Neden Geleneksel Git Unity İçin Yetersizdir?

Git, dosyaların değişikliklerini farkları (diff) kaydederek depolar. Metin dosyalarında bu farklar küçük ve verimlidir. Ancak büyük binary dosyalar (örneğin, bir .fbx modeli veya yüksek çözünürlüklü bir .png dokusu) her değiştiğinde, Git dosyanın tamamını yeni bir versiyon olarak depolamak zorunda kalır. Bu durum zamanla Git deposunun (repository) boyutunu hızla artırır, klonlama sürelerini uzatır ve performans sorunlarına yol açar. Ekip çalışmasında bu sorunlar daha da belirgin hale gelir.

Git LFS Nedir ve Nasıl Çalışır?

Unity Git LFS, Git’in büyük dosyaları verimli bir şekilde yönetmek için geliştirilmiş bir uzantısıdır. LFS, aslında büyük dosyaların kendilerini doğrudan Git deposunda saklamak yerine, bu dosyaların küçük metin işaretçilerini (pointer files) Git’e kaydeder. Gerçek büyük dosyalar ise ayrı bir LFS sunucusunda depolanır. Siz bir depoyu klonladığınızda veya bir branch’e geçtiğinizde, Git bu işaretçileri okur ve LFS sunucusundan ilgili büyük dosyaları indirir.

Bu yaklaşımın temel faydaları şunlardır:

  • Daha Küçük Depo Boyutu: Ana Git deposu sadece işaretçileri içerdiği için çok daha küçük kalır.
  • Hızlı Klonlama: Depoyu klonlama veya branch değiştirme işlemleri hızlanır.
  • Verimli Yönetim: Büyük dosyaların versiyonları ayrı olarak yönetilir, Git’in ana mekanizmasını yormaz.

Unity Projelerinde Git LFS Kurulumu ve Yapılandırması

1. Git LFS’yi Kurun

Öncelikle bilgisayarınızda Git LFS’nin yüklü olması gerekir. Git LFS’yi resmi web sitesinden (git-lfs.github.com) indirebilir veya paket yöneticinizle kurabilirsiniz (örn: brew install git-lfs).

Kurulumdan sonra, terminal veya komut istemcisinde projenizin kök dizinine giderek şu komutu çalıştırın:

git lfs install

Bu komut, Git LFS’yi yerel Git yapılandırmanıza entegre eder.

2. Hangi Dosyaları Takip Edeceğinizi Belirleyin (.gitattributes)

Git LFS’nin en önemli adımı, hangi dosya türlerinin LFS tarafından yönetileceğini belirtmektir. Bu, projenizin kök dizininde bulunan .gitattributes dosyası aracılığıyla yapılır. Bu dosyayı elle oluşturabilir veya git lfs track komutuyla otomatik olarak oluşturtabilirsiniz.

Örneğin, tüm .psd, .fbx ve .unity dosyalarını takip etmek için aşağıdaki komutları kullanabilirsiniz:

git lfs track "*.psd"
git lfs track "*.fbx"
git lfs track "*.unity"
git lfs track "*.prefab"
git lfs track "*.asset"
git lfs track "*.wav"
git lfs track "*.mp3"
git lfs track "*.ogg"
git lfs track "*.anim"
git lfs track "*.controller"

Bu komutlar, .gitattributes dosyasına ilgili girişleri ekleyecektir. Dosyanın içeriği şöyle görünecektir:

*.psd filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.unity filter=lfs diff=lfs merge=lfs -text
*.prefab filter=lfs diff=lfs merge=lfs -text
*.asset filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.anim filter=lfs diff=lfs merge=lfs -text
*.controller filter=lfs diff=lfs merge=lfs -text

Önemli: .gitattributes dosyasını oluşturduktan veya güncelledikten sonra, değişiklikleri Git’e commit etmeyi unutmayın!

3. Gereksiz Dosyaları Yoksayın (.gitignore)

Unity projelerinde .gitignore dosyası, Git LFS kadar önemlidir. Unity, proje açıldığında veya derlendiğinde birçok geçici dosya ve klasör oluşturur (örn: Library, Temp, obj). Bu dosyaların versiyon kontrolüne dahil edilmesi hem depo boyutunu artırır hem de merge çakışmalarına neden olur.

İşte tipik bir Unity .gitignore dosyası örneği:

# Unity
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]serSettings/

# Visual Studio / Rider
.vs/
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.userprefs

# MacOS
.DS_Store

# Linux
thumbs.db

# Autogenerated asset files
*.meta

# Packages
Packages/manifest.json
Packages/manifest.json.meta
Packages/packages-lock.json
Packages/packages-lock.json.meta

Bu dosya, projenizin kök dizinine yerleştirilmelidir. .gitignore ve .gitattributes dosyaları projenizin sağlıklı bir versiyon kontrolüne sahip olmasının temelini oluşturur.

Pratik İpuçları ve En İyi Uygulamalar

1. Doğru Dosyaları Takip Edin

Sadece gerçekten büyük olan ve sık değişen binary dosyaları Unity Git LFS ile takip edin. Küçük dosyalar veya metin tabanlı dosyalar için geleneksel Git daha verimlidir. Genellikle, .unity sahne dosyaları, .prefab dosyaları, modeller (.fbx, .blend), dokular (.png, .jpg, .tga, .psd), sesler (.wav, .mp3), animasyonlar (.anim) ve özel asset dosyaları (.asset) LFS için iyi adaylardır.

2. Eski LFS Dosyalarını Temizleyin (Pruning)

Zamanla, yerel Git LFS önbelleğinizde artık referans verilmeyen veya silinmiş LFS dosyaları birikebilir. Bu dosyaları temizlemek için düzenli olarak şu komutu kullanın:

git lfs prune

Bu, yerel önbelleğinizdeki gereksiz LFS objelerini silerek disk alanından tasarruf etmenizi sağlar.

3. Ekip Üyelerinin LFS Kurulumunu Kontrol Edin

Ekip olarak çalışırken, tüm takım üyelerinin Unity Git LFS‘yi doğru şekilde kurduğundan ve yapılandırdığından emin olun. Eğer bir ekip üyesi LFS’yi kurmadan LFS tarafından takip edilen bir dosyayı commit ederse, Git deposuna işaretçi yerine gerçek dosyanın kendisi yüklenebilir ve bu da sorunlara yol açabilir. Bu durumu önlemek için, projenize yeni katılan herkesin ilk olarak git lfs install komutunu çalıştırmasını ve .gitattributes dosyasının doğru olduğundan emin olmasını sağlayın.

4. Unity Smart Merge Kullanımı

Unity’nin YAML tabanlı sahne (.unity) ve prefab (.prefab) dosyaları metin editörlerinde okunabilir olsa da, merge çakışmaları (conflict) çözmek genellikle zordur. Unity Hub, projeleriniz için özel bir Smart Merge aracı sunar. Bu araç, bu tür dosyaların birleştirilmesini kolaylaştırır. .gitattributes dosyanıza aşağıdaki satırları ekleyerek Git’e Unity’nin özel merge sürücüsünü kullanmasını söyleyebilirsiniz:

*.unity merge=unityyamlmerge
*.prefab merge=unityyamlmerge

Bu, özellikle sahne dosyaları üzerinde birden fazla geliştirici çalıştığında çok faydalıdır.

Yaygın Hatalar ve Çözümleri

1. Git LFS’yi Kurmayı veya Dosyaları Takip Etmeyi Unutmak

Sorun: Büyük asset dosyaları normal Git deposuna commit edildi, depo boyutu şişti.

Çözüm: Eğer bu hatayı fark ederseniz, geçmişteki commit’leri düzeltmek için git lfs migrate komutunu kullanabilirsiniz. Bu komut, geçmişteki büyük dosyaları LFS’ye taşıyarak depo geçmişinizi yeniden yazar. Ancak bu işlem karmaşık olabilir ve dikkatli kullanılmalıdır, özellikle de depo başkalarıyla paylaşılıyorsa. En iyisi, projenin başında LFS’yi doğru yapılandırmaktır.

2. Library Klasörünü Git’e Dahil Etmek

Sorun: Library klasörü, Unity’nin otomatik oluşturduğu ve her bilgisayarda farklı olabilen geçici dosyaları içerir. Bunu commit etmek, sürekli merge çakışmalarına ve gereksiz depo boyutuna yol açar.

Çözüm: Yukarıda belirtilen .gitignore dosyasını kullanarak Library/ klasörünü mutlaka yoksayın. Eğer yanlışlıkla commit ettiyseniz, git rm -r --cached Library komutuyla Git takibinden çıkarın ve ardından .gitignore dosyasını commit edin.

3. LFS Kotası Aşımı

Sorun: Ücretsiz Git LFS hizmetlerinin genellikle bir depolama ve bant genişliği kotası vardır. Bu kotayı aşmak ek maliyetlere yol açabilir.

Çözüm: LFS kullanımınızı düzenli olarak kontrol edin (örn: git lfs status). Sadece gerçekten büyük ve gerekli dosyaları LFS ile takip edin. Gereksiz veya eski LFS dosyalarını git lfs prune ile temizleyin. Gerekirse, daha yüksek LFS kotası sunan ücretli planlara geçiş yapmayı düşünebilirsiniz.

Performans ve Optimizasyon Notları

Unity Git LFS kullanmak, genel versiyon kontrol performansınızı önemli ölçüde artırır. Depo boyutu küçüldüğü için klonlama, çekme (pull) ve gönderme (push) işlemleri daha hızlı gerçekleşir. Ancak, LFS sunucusundan büyük dosyaların indirilmesi ağ hızınıza bağlı olacaktır. Yavaş internet bağlantıları olan ekip üyeleri için ilk klonlama veya büyük bir branch geçişi biraz zaman alabilir. Yerel LFS önbelleği, aynı dosyaların tekrar tekrar indirilmesini engelleyerek bu durumu optimize eder.

Sonuç

Unity projelerinde verimli bir versiyon kontrolü için Unity Git LFS vazgeçilmez bir araçtır. Doğru yapılandırıldığında ve en iyi uygulamalar takip edildiğinde, projenizin büyüklüğü ne olursa olsun sorunsuz bir geliştirme süreci sağlar. .gitattributes ve .gitignore dosyalarını doğru bir şekilde yönetmek, LFS’nin gücünü tam olarak kullanmanın anahtarıdır. Bu sayede hem ekip içinde daha verimli çalışır hem de depo geçmişinizi temiz ve yönetilebilir tutarsınız.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir