Git, yazılım geliştirme projelerini, veri bilimi iş akışlarını ve hatta dokümantasyon depolarını yönetmeye yardımcı olmak için yaygın olarak kullanılan bir sürüm kontrol aracıdır. Ancak, geleneksel Git büyük dosyaları işleme konusunda sınırlamalara sahiptir. Büyük dosyalar her bir commit ile kopyalanır; bu da deponun şişmesine ve değişiklikleri çekerken büyük dosyaların birden fazla kopyasını kopyalama gereksinimi nedeniyle iş akışlarının yavaşlamasına yol açar. Bu nedenle, Git ile büyük dosyaları yönetmek aşağıdaki nedenlerle verimsiz hale gelebilir:
Büyük depo boyutu: Büyük dosyaları doğrudan bir Git deposunda saklamak, deponun genel boyutunu artırır; bu da özellikle dosyaların yüklenmesini/indirilmesini gerektirebilecek uzak bir depoda çalışırken clone ve fetch işlemlerini yavaşlatır.
Verimsiz depolama ve versiyonlama: Büyük bir dosya her değiştirildiğinde Git geçmişte yeni bir sürüm saklar ve bu da deponun hızla şişmesine neden olur.
Performans sorunları: Büyük bir depoda klonlama, çekme (pull), gönderme (push) gibi Git işlemleri belirgin şekilde yavaşlar ve daha fazla depolama alanı gerektirir.
Bu kılavuzda, deponuzdaki büyük dosyalara yardımcı olan bir Git uzantısı olan Git Large File Storage'ı (Git LFS) ayrıntılı olarak inceleyeceğiz. Ek kopyalama veya dosya depolaması olmadan büyük dosyalardaki değişiklikleri daha verimli şekilde saklamamıza olanak tanır. Depo içinde büyük ikili dosyalarınız olacağını öngördüğünüz her durumda kullanmalısınız. Öncelikle bunun ne olduğunu, nasıl çalıştığını, ne zaman kullanılacağını ve nasıl etkili şekilde kurulacağını daha ayrıntılı biçimde açıklayacağım.
Git Large File Storage (Git LFS), büyük dosyaların işlenmesini iyileştiren bir Git uzantısıdır.
Uzak bir depodan verileri tembel (lazy) biçimde getirmek için Git'e işlevsellik ekleyerek fetch ve clone işlemlerinin ele alınma biçimini değiştirir ve Git'e bazı akıllı dosya yönetimi işlevleri kazandırır.
Diğer tüm açılardan, kullanıcı deneyimi sorunsuzdur ve normal Git ile aynıdır.
Git LFS, standart Git takibinden nasıl ayrılır
Geleneksel Git'te deponun tüm geçmişini .git dizininde saklarız. Buna zaman içinde değişen gerçek metin dosyaları da dahildir. Ayrıca, tüm dosyalar el altında olsun diye git fetch veya git clone çağırdığımızda tüm depolar indirilir. Git LFS kullandığımızda, bazı şeyler değişir.
İlk olarak, Git LFS, her dosyayı saklama gereksinimini azaltarak büyük dosyaları uzak depolamaya işaret eden hafif pointer'larla değiştirir. İkincisi, büyük dosyalar yalnızca ilgili dala checkout yaptığınızda indirilir; yani üzerinde çalışmaya hazır olduğumuzda büyük dosyaları indiririz.
Son olarak, temiz bir çalışma ortamı sağlamak için dosyaların eski sürümlerini temizleyerek yerel depo depolamanızı yönetir.
Git LFS Nasıl Çalışır?
Git LFS, pointer tabanlı bir depolama mekanizmasını izler. Daha önce bahsedildiği gibi, bir dosyayı LFS takibi için belirttiğinizde, Git LFS depoda onu bir pointer dosya ile değiştirir ve ayrıca önbelleğe yerel bir kopya yerleştirir.
Commit'leri gönderdiğinizde (push), yerel önbellek uzak bir depoya (ör. GitHub, GitLab, Bitbucket LFS sunucuları) güncellenir. Değişiklikler varsa ve checkout yaparsanız, bu değişiklikler size en güncel çalışma kopyasını sağlamak üzere yerel önbelleğinizi günceller.
En popüler uzak depolardan biri olan GitHub hakkında bilgi edinmek isterseniz, şu GitHub'a Giriş kursuna göz atın.
Git LFS kullanmanın birçok faydası vardır. Depo boyutlarını küçük ve yönetilebilir tutar. Ayrıca, büyük dosyalarla çalışan ekipler için performansı artırır. Büyük dosyaların gereksiz yere çoğaltılmasını önleyerek yerel depo boyutunuzu da makul seviyede tutar.
Git LFS'i Kurma
Git LFS'i kullanmadan önce birkaç kurulum adımı vardır. Uzantıyı yüklemeyi içeren nispeten basit bir süreçtir. Mevcut depolarınız varsa, bunları taşımanız gerekir. Yeni bir depo oluşturuyorsanız, Git LFS'i basitçe başlatabilirsiniz.
Git LFS'i Yükleme
Git LFS'i kullanmak için sisteminize kurmanız gerekir. En kolay yol, git-lfs web sitesine gidip dosyaları yüklemektir. Bunu yaptıktan sonra, Git LFS'i tamamen başlatıp kurmak için komut konsolunuzda bir kez git lfs install çalıştırırsınız.
Git LFS'ten Yararlanma
Kurulduktan sonra, Git LFS'in her depo için yapılandırıldığından emin olmanız gerekir. Farklı uzak Git takipçileri (ör. GitHub ve Bitbucket) biraz farklı adımlara sahip olacaktır. Kullandığınız uzak Git takipçisi için önerilen adımları izlemeniz en iyisidir. Üst düzeyde, yeni bir depo başlatırsanız, o depoda git lfs install çalıştırarak kancaları (hooks) başlatabilir ve ardından takip edilecek dosyaları ekleyebilirsiniz. Mevcut bir deponuz varsa, git lfs migrate komutunu kullanabilir ve ardından .git dizini temizleme prosedürlerini uygulayabilirsiniz:
Git LFS'in bir projede kullanımının bazı yönlerini gözden geçirelim. Git LFS deposundan büyük dosyaları izleme, commit'leme, klonlama ve çekme adımlarını ele alacağız.
Büyük Dosyaları İzleme (git lfs track)
Belirli dosya türlerini izlemeye başlamak için git lfs track <file type> komutunu kullanabiliriz. Örneğin, CSV dosyalarını izlemek isteseydim, komutu şöyle yazardım: git lfs track "*.csv". Bu aynı zamanda, bu belirli dosya için Git LFS kullandığımızdan emin olmak üzere .gitattributes dosyamıza bilgi ekler. Artık LFS dosyalarını doğru şekilde izlediğimizden emin olmak için önce .gitattributes dosyamızı push etmemiz gerekir.
İzlemeyi ekledikten sonra, her zamanki gibi ekleyip commit edebilirsiniz:
git add largefile.csv
git commit -m "Adding large file with Git LFS"
git push origin mainAltyapı:
Arka planda, Git LFS dosyayı ayrı olarak saklar ve depoda bir pointer ile değiştirir. Oldukça sorunsuz bir deneyim olmalıdır.
Git LFS ile Depoları Klonlama (git lfs clone)
Daha yeni bir Git sürümüne (>= 2.3.0) sahipseniz, git clone komutu hem LFS hem de LFS olmayan dosyalarınız için otomatik olarak çalışmalıdır. Daha eski bir Git sürümü kullanıyorsanız, belirli git lfs clone komutunu kullanmanız gerekir. Bu komut, büyük dosyalar için pointer bilgisine başvuracağı ve her büyük dosyanın yalnızca çalışma kopyasını klonlayacağı için alışılmış klonlamadan farklı çalışır. Git'te klonlama hakkında daha fazla bilgi için Git Clone Branch üzerine aşağıdaki eğitimi inceleyin.
Büyük Dosyaları Çekme (git lfs pull)
Depo içindeki büyük LFS dosyalarınızı fetch ve checkout etmek isterseniz, git lfs pull işlevini kullanabilirsiniz. Bu, yalnızca Git dosyalarını çekecek olan basit bir git pull'dan ayrıdır.
Örnek bir iş akışı şöyledir:
git checkout main # check out your main branch
git pull # pull latest git files from the remote, for this branch
git lfs pull # pull latest git lfs files from the remote, for this branchAltyapı:
Git LFS Kullanımı için En İyi Uygulamalar
Git LFS harika bir çözüm olsa da, kendi sorunlar serisiyle gelebilir ve evrensel bir çözüm olarak tasarlanmamıştır. Ondan en iyi şekilde yararlanmak için Git LFS kullanırken aşağıdaki en iyi uygulamalara dikkat edin:
Git LFS'i yalnızca büyük ikili dosyalar için kullanın; kod veya küçük metin dosyaları için değil.
Gereksiz dosyaları düzenli olarak şu komutla budayın: git lfs prune
Tüm dizinleri izlemekten kaçının; bu, performans sorunlarına ve şişmeye yol açabilir
Tüm işbirlikçilerin Git LFS kurulu olduğundan emin olun; aksi halde dosyalar eksik olabilir.
Bu genel yönergeleri takip ederseniz, Git LFS sizin için harika bir araç olacaktır!
Yaygın Sorunlar ve Çözüm Yolları
Git LFS, Git'in bir uzantısı olduğundan, kendi sorun setiyle birlikte gelir. Bu özellikle, kendi sorunlarına sahip olan uzak depolara bağlı olduğundan geçerlidir. Git LFS kullanırken karşılaşabileceğiniz bazı yaygın problemler ve çözümleri şunlardır.
Git LFS Kimlik Doğrulama Sorunları
Git LFS ile kimlik doğrulama sorunlarıyla karşılaşmanızın birçok yolu vardır. Uç tarafınızda doğru kimlik bilgilerine sahip olduğunuzdan emin olmak için şunları kontrol edin:
Doğru SSH yapılandırmasını kullanın: git config lfs.url ssh://<git-url>
Git LFS sıklıkla üst dala (parent) izleme yaptığı için, üst dala okuma/yazma erişiminizin olduğundan emin olun
Uzak depodan tamamen temiz bir fetch/clone yapmayı deneyin
Sorun yaşamaya devam ediyorsanız ve yönetici değilseniz, izinler konusunda yardımcı olup olamayacaklarını görmek için projeyi kimin sahipleniyorsa onlarla iletişime geçin.
Büyük Dosya Depolama Sınırları ve Kotaları
Hizmetler Git LFS depolaması için kotaya sahip olabilir. Örneğin GitHub, Ücretsiz ve Pro kullanıcılar için 2 GB sınırına, Enterprise bulut kullanıcıları için dosya başına 5 GB sınırına sahiptir. Hatalardan kaçınmak için, hizmetinizin sınırından daha büyük dosyalar yüklemediğinizden emin olun.
Mevcut Depoları Git LFS Kullanmaya Taşımak
Bir depo halihazırda büyük dosyalar içeriyorsa, şu komutla onları taşıyın:
Bu işlem, büyük dosyaları geriye dönük olarak LFS pointer'larıyla değiştirir.
Sonuç
Git LFS, depoları performanslı ve hafif tutarken büyük dosyaları verimli şekilde yönetmek için vazgeçilmez bir araçtır. Git LFS'ten yararlanarak geliştiriciler, depolarındaki daha büyük dosyaları düzgün şekilde yönetebilir. Şişmeyi en aza indirmek için en iyi uygulamaları takip ettiğiniz sürece, LFS dosya takibinize büyük ölçüde yardımcı olacaktır. Git hakkında daha fazla bilgi edinmek isterseniz, şu kaynakları deneyin:
Git LFS dosyaları içeren bir depoyu klonlarsam ne olur?⌄
Git'in daha yeni sürümlerinde git clone çalıştırmak depo ve LFS pointer'larını otomatik olarak getirir. Daha eski bir Git sürümündeyseniz, gerçek büyük dosyaları indirmek için git lfs pull çalıştırmanız gerekir. Alternatif olarak, git lfs clone bunu otomatik olarak yapar.
Hangi dosyaların Git LFS tarafından izlendiğini nasıl kontrol edebilirim?⌄
İzlenen dosya kalıplarını görmek için git lfs track, LFS kullanılarak saklanan gerçek dosyaları listelemek için git lfs ls-files komutunu çalıştırın.
GitHub veya başka bir barındırma hizmetinde Git LFS depolama alanım biterse ne olur?⌄
GitHub gibi hizmetler depolama sınırları uygular. Depolamayı git lfs prune ile yönetebilir, daha fazla alan satın alabilir veya alternatif bir harici depolama çözümü kullanabilirsiniz.
Git LFS'i etkinleştirdikten sonra kullanmayı bırakabilir miyim?⌄
Evet, ancak LFS takibini kaldırmak için dosyalarınızı standart Git'e geri taşımak üzere git lfs migrate export --include="*.filetype" komutunu kullanmanız gerekir.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Git, yazılım geliştirme projelerini, veri bilimi iş akışlarını ve hatta dokümantasyon depolarını yönetmeye yardımcı olmak için yaygın olarak kullanılan bir sürüm kontrol aracıdır. Ancak, geleneksel Git büyük dosyaları işleme konusunda sınırlamalara sahiptir. Büyük dosyalar her bir commit ile kopyalanır; bu da deponun şişmesine ve değişiklikleri çekerken büyük dosyaların birden fazla kopyasını kopyalama gereksinimi nedeniyle iş akışlarının yavaşlamasına yol açar. Bu nedenle, Git ile büyük dosyaları yönetmek aşağıdaki nedenlerle verimsiz hale gelebilir:
Bu kılavuzda, deponuzdaki büyük dosyalara yardımcı olan bir Git uzantısı olan Git Large File Storage'ı (Git LFS) ayrıntılı olarak inceleyeceğiz. Ek kopyalama veya dosya depolaması olmadan büyük dosyalardaki değişiklikleri daha verimli şekilde saklamamıza olanak tanır. Depo içinde büyük ikili dosyalarınız olacağını öngördüğünüz her durumda kullanmalısınız. Öncelikle bunun ne olduğunu, nasıl çalıştığını, ne zaman kullanılacağını ve nasıl etkili şekilde kurulacağını daha ayrıntılı biçimde açıklayacağım.
Git konusunda yeniyseniz, Git Nasıl Öğrenilir rehberimize ve Git'e Giriş Kursuna göz atın.
Git LFS nedir?
Git Large File Storage (Git LFS), büyük dosyaların işlenmesini iyileştiren bir Git uzantısıdır.
Uzak bir depodan verileri tembel (lazy) biçimde getirmek için Git'e işlevsellik ekleyerek fetch ve clone işlemlerinin ele alınma biçimini değiştirir ve Git'e bazı akıllı dosya yönetimi işlevleri kazandırır.
Diğer tüm açılardan, kullanıcı deneyimi sorunsuzdur ve normal Git ile aynıdır.
Git LFS, standart Git takibinden nasıl ayrılır
Geleneksel Git'te deponun tüm geçmişini
.gitdizininde saklarız. Buna zaman içinde değişen gerçek metin dosyaları da dahildir. Ayrıca, tüm dosyalar el altında olsun diyegit fetchveyagit cloneçağırdığımızda tüm depolar indirilir. Git LFS kullandığımızda, bazı şeyler değişir.İlk olarak, Git LFS, her dosyayı saklama gereksinimini azaltarak büyük dosyaları uzak depolamaya işaret eden hafif pointer'larla değiştirir. İkincisi, büyük dosyalar yalnızca ilgili dala checkout yaptığınızda indirilir; yani üzerinde çalışmaya hazır olduğumuzda büyük dosyaları indiririz.
Son olarak, temiz bir çalışma ortamı sağlamak için dosyaların eski sürümlerini temizleyerek yerel depo depolamanızı yönetir.
Git LFS Nasıl Çalışır?
Git LFS, pointer tabanlı bir depolama mekanizmasını izler. Daha önce bahsedildiği gibi, bir dosyayı LFS takibi için belirttiğinizde, Git LFS depoda onu bir pointer dosya ile değiştirir ve ayrıca önbelleğe yerel bir kopya yerleştirir.
Commit'leri gönderdiğinizde (push), yerel önbellek uzak bir depoya (ör. GitHub, GitLab, Bitbucket LFS sunucuları) güncellenir. Değişiklikler varsa ve checkout yaparsanız, bu değişiklikler size en güncel çalışma kopyasını sağlamak üzere yerel önbelleğinizi günceller.
En popüler uzak depolardan biri olan GitHub hakkında bilgi edinmek isterseniz, şu GitHub'a Giriş kursuna göz atın.
Git LFS kullanmanın birçok faydası vardır. Depo boyutlarını küçük ve yönetilebilir tutar. Ayrıca, büyük dosyalarla çalışan ekipler için performansı artırır. Büyük dosyaların gereksiz yere çoğaltılmasını önleyerek yerel depo boyutunuzu da makul seviyede tutar.
Git LFS'i Kurma
Git LFS'i kullanmadan önce birkaç kurulum adımı vardır. Uzantıyı yüklemeyi içeren nispeten basit bir süreçtir. Mevcut depolarınız varsa, bunları taşımanız gerekir. Yeni bir depo oluşturuyorsanız, Git LFS'i basitçe başlatabilirsiniz.
Git LFS'i Yükleme
Git LFS'i kullanmak için sisteminize kurmanız gerekir. En kolay yol, git-lfs web sitesine gidip dosyaları yüklemektir. Bunu yaptıktan sonra, Git LFS'i tamamen başlatıp kurmak için komut konsolunuzda bir kez
git lfs installçalıştırırsınız.Git LFS'ten Yararlanma
Kurulduktan sonra, Git LFS'in her depo için yapılandırıldığından emin olmanız gerekir. Farklı uzak Git takipçileri (ör. GitHub ve Bitbucket) biraz farklı adımlara sahip olacaktır. Kullandığınız uzak Git takipçisi için önerilen adımları izlemeniz en iyisidir. Üst düzeyde, yeni bir depo başlatırsanız, o depoda
git lfs installçalıştırarak kancaları (hooks) başlatabilir ve ardından takip edilecek dosyaları ekleyebilirsiniz. Mevcut bir deponuz varsa,git lfs migratekomutunu kullanabilir ve ardından .git dizini temizleme prosedürlerini uygulayabilirsiniz:Bir Projede Git LFS Kullanma
Git LFS'in bir projede kullanımının bazı yönlerini gözden geçirelim. Git LFS deposundan büyük dosyaları izleme, commit'leme, klonlama ve çekme adımlarını ele alacağız.
Büyük Dosyaları İzleme (git lfs track)
Belirli dosya türlerini izlemeye başlamak için
git lfs track <file type>komutunu kullanabiliriz. Örneğin, CSV dosyalarını izlemek isteseydim, komutu şöyle yazardım:git lfs track "*.csv". Bu aynı zamanda, bu belirli dosya için Git LFS kullandığımızdan emin olmak üzere.gitattributesdosyamıza bilgi ekler. Artık LFS dosyalarını doğru şekilde izlediğimizden emin olmak için önce.gitattributesdosyamızı push etmemiz gerekir.Büyük Dosyaları Ekleme ve Commit'leme
İzlemeyi ekledikten sonra, her zamanki gibi ekleyip commit edebilirsiniz:
Arka planda, Git LFS dosyayı ayrı olarak saklar ve depoda bir pointer ile değiştirir. Oldukça sorunsuz bir deneyim olmalıdır.
Git LFS ile Depoları Klonlama (git lfs clone)
Daha yeni bir Git sürümüne (>= 2.3.0) sahipseniz, git clone komutu hem LFS hem de LFS olmayan dosyalarınız için otomatik olarak çalışmalıdır. Daha eski bir Git sürümü kullanıyorsanız, belirli git lfs clone komutunu kullanmanız gerekir. Bu komut, büyük dosyalar için pointer bilgisine başvuracağı ve her büyük dosyanın yalnızca çalışma kopyasını klonlayacağı için alışılmış klonlamadan farklı çalışır. Git'te klonlama hakkında daha fazla bilgi için Git Clone Branch üzerine aşağıdaki eğitimi inceleyin.
Büyük Dosyaları Çekme (git lfs pull)
Depo içindeki büyük LFS dosyalarınızı fetch ve checkout etmek isterseniz,
git lfs pullişlevini kullanabilirsiniz. Bu, yalnızca Git dosyalarını çekecek olan basit birgit pull'dan ayrıdır.Örnek bir iş akışı şöyledir:
Git LFS Kullanımı için En İyi Uygulamalar
Git LFS harika bir çözüm olsa da, kendi sorunlar serisiyle gelebilir ve evrensel bir çözüm olarak tasarlanmamıştır. Ondan en iyi şekilde yararlanmak için Git LFS kullanırken aşağıdaki en iyi uygulamalara dikkat edin:
git lfs pruneBu genel yönergeleri takip ederseniz, Git LFS sizin için harika bir araç olacaktır!
Yaygın Sorunlar ve Çözüm Yolları
Git LFS, Git'in bir uzantısı olduğundan, kendi sorun setiyle birlikte gelir. Bu özellikle, kendi sorunlarına sahip olan uzak depolara bağlı olduğundan geçerlidir. Git LFS kullanırken karşılaşabileceğiniz bazı yaygın problemler ve çözümleri şunlardır.
Git LFS Kimlik Doğrulama Sorunları
Git LFS ile kimlik doğrulama sorunlarıyla karşılaşmanızın birçok yolu vardır. Uç tarafınızda doğru kimlik bilgilerine sahip olduğunuzdan emin olmak için şunları kontrol edin:
git config lfs.url ssh://<git-url>Sorun yaşamaya devam ediyorsanız ve yönetici değilseniz, izinler konusunda yardımcı olup olamayacaklarını görmek için projeyi kimin sahipleniyorsa onlarla iletişime geçin.
Büyük Dosya Depolama Sınırları ve Kotaları
Hizmetler Git LFS depolaması için kotaya sahip olabilir. Örneğin GitHub, Ücretsiz ve Pro kullanıcılar için 2 GB sınırına, Enterprise bulut kullanıcıları için dosya başına 5 GB sınırına sahiptir. Hatalardan kaçınmak için, hizmetinizin sınırından daha büyük dosyalar yüklemediğinizden emin olun.
Mevcut Depoları Git LFS Kullanmaya Taşımak
Bir depo halihazırda büyük dosyalar içeriyorsa, şu komutla onları taşıyın:
Bu işlem, büyük dosyaları geriye dönük olarak LFS pointer'larıyla değiştirir.
Sonuç
Git LFS, depoları performanslı ve hafif tutarken büyük dosyaları verimli şekilde yönetmek için vazgeçilmez bir araçtır. Git LFS'ten yararlanarak geliştiriciler, depolarındaki daha büyük dosyaları düzgün şekilde yönetebilir. Şişmeyi en aza indirmek için en iyi uygulamaları takip ettiğiniz sürece, LFS dosya takibinize büyük ölçüde yardımcı olacaktır. Git hakkında daha fazla bilgi edinmek isterseniz, şu kaynakları deneyin: