Unity Projelerinde Git LFS ve .gitignore: Verimli Versiyonlama

Unity projelerinde Git LFS ve .gitignore ayarları ile verimli versiyon kontrolü yapın. Büyük dosyaları yönetme, performans artışı ve ortak çalışma ipuçları bu rehberde.

Unity projeleri, özellikle oyun geliştirme süreçlerinde, çok sayıda büyük ikili dosya (dokular, modeller, ses dosyaları vb.) içerir. Bu dosyaların versiyon kontrol sistemleri (VCS) ile yönetimi, doğru stratejiler uygulanmazsa ciddi performans sorunlarına yol açabilir. Git, yazılım dünyasında de facto standart haline gelmiş olsa da, büyük ikili dosyaları doğrudan yönetmek için optimize edilmemiştir. İşte tam bu noktada Git Large File Storage (Git LFS) ve doğru yapılandırılmış bir .gitignore dosyası devreye giriyor.

Unity Projeleri ve Versiyon Kontrolü Neden Zorlayıcıdır?

Bir Unity projesi, sadece kod dosyalarından ibaret değildir. İçerisinde megabaytlarca, hatta gigabaytlarca yer kaplayabilen 3D modeller, yüksek çözünürlüklü dokular, animasyonlar, ses efektleri ve sahne dosyaları barındırır. Geleneksel Git, her dosyanın her versiyonunu depoladığı için, bu tür büyük dosyaların her değişimi depo boyutunu hızla şişirir. Bu durum, depoyu klonlama, çekme (pull) ve gönderme (push) işlemlerini yavaşlatır, disk alanını tüketir ve geliştirici deneyimini olumsuz etkiler.

Ayrıca, Unity projesinin kendisi de derleme (build) sırasında oluşan geçici dosyalar, kütüphane dosyaları ve kullanıcıya özel ayarlar gibi, versiyon kontrolüne dahil edilmemesi gereken birçok dosya ve klasör üretir. Bu tür dosyaların yanlışlıkla depoya eklenmesi, gereksiz şişkinliğe ve ekip içinde uyumsuzluklara neden olabilir.

Git LFS: Büyük Dosyalar İçin Kurtarıcı

Git LFS (Large File Storage), Git’in büyük ikili dosyaları verimli bir şekilde yönetmek için tasarlanmış bir uzantısıdır. Temel prensibi, büyük dosyaların kendisini Git deposuna doğrudan depolamak yerine, bu dosyaların referanslarını (küçük işaretçi dosyaları) depoya kaydetmek ve asıl büyük dosyaları ayrı bir LFS sunucusunda saklamaktır. Birisi depoyu klonladığında veya bir dalı çektiğinde, Git LFS otomatik olarak işaretçi dosyalarını gerçek büyük dosyalarla değiştirir.

Git LFS’nin Faydaları:

  • Depo Boyutunu Azaltır: Ana Git deposu sadece işaretçi dosyalarını içerdiğinden, depo boyutu çok daha küçük kalır.
  • Daha Hızlı İşlemler: Klonlama, çekme ve gönderme işlemleri, büyük dosyaların kendisi yerine sadece işaretçilerle uğraşıldığı için hızlanır.
  • Verimli Yönetim: Ekip üyelerinin sadece ihtiyaç duydukları büyük dosyaları indirmesine olanak tanır.
  • Daha İyi Performans: Git geçmişi incelenirken veya dallar arasında geçiş yaparken yaşanan yavaşlamaları engeller.

Unity Projelerinde Git LFS Kurulumu:

  1. Git LFS Kurulumu: Öncelikle Git LFS’yi bilgisayarınıza yüklemeniz gerekir. Çoğu Linux dağıtımında paket yöneticileriyle (sudo apt-get install git-lfs), macOS’ta Homebrew ile (brew install git-lfs) veya Windows’ta resmi sitesinden indirerek kurabilirsiniz. Kurulum sonrası terminalde git lfs install komutunu çalıştırmayı unutmayın.
  2. Dosyaları İzlemeye Başlama: Unity projenizin kök dizininde, büyük ikili dosyalarınızı Git LFS ile izlemek istediğinizi Git’e bildirmeniz gerekir. Örneğin, tüm .psd (Photoshop), .fbx (3D model), .png (resim) ve .wav (ses) dosyalarını izlemek için şu komutları kullanabilirsiniz:
    git lfs track "*.psd"
    git lfs track "*.fbx"
    git lfs track "*.png"
    git lfs track "*.wav"
    git lfs track "*.unity"
    git lfs track "*.prefab"
    git lfs track "*.asset"

    Bu komutlar, projenizin kök dizininde .gitattributes adında bir dosya oluşturur veya günceller. Bu dosya, Git LFS’nin hangi dosya türlerini yöneteceğini tanımlar. Bu dosyayı Git deposuna eklemeyi unutmayın: git add .gitattributes.

  3. Mevcut Büyük Dosyaları Dönüştürme (Opsiyonel): Eğer projenizde zaten büyük dosyalar varsa ve bunları Git LFS’ye dönüştürmek istiyorsanız, git lfs migrate import --include="*.psd,*.fbx" gibi komutlar kullanabilirsiniz. Bu işlem, depo geçmişinizi yeniden yazacağı için dikkatli olun ve yedekleme yapmadan uygulamayın.

Unity İçin .gitignore Ayarları: Temiz Bir Depo İçin Anahtar

Doğru yapılandırılmış bir .gitignore dosyası, Git deposunuzun temiz, yönetilebilir ve şişkinlikten uzak kalmasını sağlar. Unity projelerinde versiyon kontrolüne dahil edilmemesi gereken birçok dosya ve klasör bulunur. Bunlar genellikle geçici dosyalar, derleme çıktıları, kütüphaneler ve makineye özel yapılandırmalardır.

Neden .gitignore Kullanmalıyız?

  • Depo Temizliği: Gereksiz dosyaların depoya eklenmesini engeller.
  • Çakışmaları Önler: Farklı geliştiricilerin yerel ayarlarından veya derleme çıktılarından kaynaklanan çakışmaları azaltır.
  • Depo Boyutunu Küçük Tutar: Geçici ve makineye özel dosyaların depoya eklenmesini engelleyerek depo boyutunu optimize eder.
  • Ekip Uyumu: Tüm ekibin aynı versiyon kontrol kurallarına uymasını sağlar.

Unity İçin Örnek .gitignore Dosyası:

İşte Unity projeleri için sıkça kullanılan bir .gitignore dosyasının içeriği:

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

# Visual Studio
.vs/
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.userprefs
*.pidb
*.booproj
*.svd

# Rider
.idea/
*.iml

# Autogenerated VS/Rider files
Assets/Plugins/Editor/JetBrains/
Assets/Plugins/Editor/Rider/

# OS Generated Files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Misc
*.bak
*.rar
*.zip
*.gz
*.unitypackage

# Uncomment this line if you have an Assets folder inside your project root
# Assets/AssetStoreTools/

Bu liste, genel olarak Unity projelerinde göz ardı edilmesi gereken temel öğeleri içerir. Özellikle Library/, Temp/ ve Obj/ klasörleri çok önemlidir çünkü bunlar Unity tarafından otomatik olarak oluşturulur ve proje ayarlarınızın yerel kopyalarını, önbellekleri ve geçici derleme dosyalarını barındırır. Bu klasörleri versiyon kontrolüne dahil etmek, gereksiz büyük dosyalara, sık sık çakışmalara ve farklı makinelerdeki uyumsuzluklara yol açar.

.gitignore İpuçları:

  • Başlangıç Noktası: Yeni bir Unity projesi başlatırken, GitHub’ın sağladığı Unity özel .gitignore şablonunu kullanmak iyi bir başlangıç noktasıdır.
  • Düzenli Kontrol: Projeniz büyüdükçe veya yeni paketler/araçlar ekledikçe .gitignore dosyanızı gözden geçirin ve güncelleyin.
  • Hassas Dosyalar: API anahtarları veya hassas yapılandırma dosyaları gibi özel bilgileri içeren dosyaları asla depoya eklemeyin. Bunları genellikle .gitignore‘a dahil edip, örnek dosyalarını (örn: config.example.json) depoya koyarak yönetin.

Entegrasyon ve En İyi Uygulamalar

Git LFS ve .gitignore‘ı birlikte kullanmak, Unity projelerinizde sorunsuz bir versiyon kontrol deneyimi için kritik öneme sahiptir. İşte bazı en iyi uygulamalar:

  1. Erken Başlayın: Projenin en başında Git LFS’yi kurun ve .gitignore dosyanızı yapılandırın. Sonradan büyük dosyaları temizlemek veya geçmişi düzeltmek çok daha zor olabilir.
  2. .gitattributes ve .gitignore Commit Edin: Bu dosyalar projenizin versiyon kontrol kurallarını belirlediği için, her zaman depoya eklenmeli ve ekip üyeleriyle paylaşılmalıdır.
  3. Doğru Dosya Türlerini İzleyin: Sadece gerçekten büyük ve ikili olan dosyaları Git LFS ile izleyin. Küçük metin tabanlı dosyalar (örn: C# scriptleri) normal Git ile yönetilmelidir.
  4. Sunucu Seçimi: Git LFS için bir sunucuya ihtiyacınız olacaktır. GitHub, GitLab ve Bitbucket gibi platformlar genellikle LFS desteği sunar (genellikle belirli bir kota ile). Kendi LFS sunucunuzu da kurabilirsiniz.
  5. Eğitim ve Dokümantasyon: Ekip üyelerinizin Git LFS’nin nasıl çalıştığını ve .gitignore kurallarını anlamasını sağlayın. Yeni başlayanlar için basit bir dahili dokümantasyon hazırlamak faydalı olacaktır.

Sonuç

Unity projelerinizde verimli ve sorunsuz bir versiyon kontrol süreci yürütmek, özellikle büyük ekipler ve kapsamlı oyunlar için hayati öneme sahiptir. Git LFS, büyük ikili dosyaların yönetimi sorununu çözerken, doğru yapılandırılmış bir .gitignore dosyası ise depo temizliğini ve ekip uyumunu sağlar. Bu iki aracın entegrasyonuyla, geliştirme sürecinizi hızlandırabilir, depolama alanından tasarruf edebilir ve daha stabil bir çalışma ortamı yaratabilirsiniz. Unutmayın, iyi bir versiyon kontrol stratejisi, başarılı bir oyun geliştirme projesinin temel taşlarından biridir.