Aracılığıyla paylaş


Git'te büyük dosyaları yönetme ve depolama

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Git, sürümler arasındaki farklar rahatlıkla seçilebildiği ve kod rahatlıkla sıkıştırılabildiği için kaynak kodunuzun hacmini düşük tutmanıza yardımcı olur. Sıkıştırması zor olan ve sürümler arasında tamamen değişen büyük dosyalar (ikili dosyalar gibi), Git depolarınızda depolandığında sorun oluşturur. Git'in hızlı performansı, yerel depolama alanından bir dosyanın tüm sürümlerine hitap etme ve bu sürümlere geçiş yapma özelliğinden gelir.

Deponuzda büyük ve fark edilemeyen dosyalarınız varsa (ikili dosyalar gibi), deponuzda her değişiklik yaptığınız her seferde bu dosyaların tam kopyasını saklarsınız. Deponuzda bu dosyaların birçok sürümü varsa kodunuzu kullanıma alma, dallama, getirme ve kopyalama süresini önemli ölçüde artırır.

Git'te ne tür dosyalar depolamanız gerekir?

Bağımlılıkları değil, kaynak kodunu taahhüt et.

Ekibiniz dosya oluşturmak ve güncelleştirmek için düzenleyiciler ve araçlarla birlikte çalıştığından, ekibinizin Git iş akışının avantajlarından yararlanabilmesi için bu dosyaları Git'e yerleştirmeniz gerekir. Deponuza başka türlerde dosya işlemeyin: örneğin DLL'ler, kitaplık dosyaları ve ekibinizin oluşturmadığı ancak kodunuzun bağımlı olduğu diğer bağımlılıklar. paket yönetimi aracılığıyla bu dosyaları sistemlerinize teslim edin.

Paket yönetimi bağımlılıklarınızı paketler ve paketi dağıttığınızda dosyaları sisteminize yükler. Paketler, ortamlar aynı yüklü paketlere sahip olduğu sürece bir ortamda test edilen kodun başka bir ortamda aynı şekilde çalıştığından emin olmak için sürümlenir.

Çıkışları kaydetmeyin

Derlemelerinizden ve testlerinizden ikili, günlük, izleme çıktısı veya tanılama verisini göndermeyin. Bunlar, kaynak kodun kendisinden değil, kodunuzdan alınan çıkışlardır. iş öğesi izleme araçları veya ekip dosya paylaşımı aracılığıyla günlükleri ve izleme bilgilerini ekibinizle paylaşın.

Git'te küçük, seyrek güncelleştirilen ikili kaynakları depolama

Seyrek güncelleştirilen ikili kaynak dosyalarında nispeten az sayıda sürüm işlenmiştir. Dosya boyutları küçükse çok fazla yer kaplamazlar. Web görüntüleri, simgeler ve diğer küçük resim varlıkları bu kategoriye girilebilir. Ekibinizin tutarlı bir iş akışı kullanabilmesi için bu dosyaları git'te kaynağınızın geri kalanıyla birlikte depolamak daha iyidir.

Önemli

Küçük ikili kodlar bile sık güncellenirse sorunlara neden olabilir. Örneğin, 100 KB ikili dosyada yapılan 100 değişiklik, 1 MB ikili dosyada 10 değişiklik kadar depolama alanı kullanır. Güncelleştirmelerin sıklığı nedeniyle, küçük ikili büyük ikiliden daha sık dallanma performansını yavaşlatır.

Büyük, sık güncelleştirilen ikili varlıkları işlemeyin

Git bir dosyanın ana sürümünü yönetir ve ardından deltificationolarak bilinen bir işlemde bu sürümden yalnızca farkları depolar. Ltifikasyon ve dosya sıkıştırma, Git'in kod geçmişinizin tamamını yerel deponuzda depolamasına olanak sağlar. Büyük ikili dosyalar çoğunlukla sürümler arasında tamamen değişir ve genellikle zaten sıkıştırılmıştır. Sürümler arasındaki farklar büyük olduğundan Git'in bu dosyaları yönetmesi zordur.

Git, dosyanın her sürümünün tüm içeriğini depolamalıdır ve deltifikasyon ve sıkıştırma yoluyla alandan tasarruf etmekte zorlanır. Bu dosyaların tam sürümlerinin depolanması, depo boyutunun zaman içinde artmasına neden olur. Artan depo boyutu dallanma performansını azaltır, kopyalama sürelerini artırır ve depolama gereksinimlerini genişletir.

Büyük ikili kaynak dosyalarıyla çalışma stratejileri

  • Sıkıştırılmış veri arşivlerini işlemeyin. Dosyaların sıkıştırmasını açmak ve fark edilebilir kaynakları işlemek daha iyidir. Git'in deponuzdaki verileri sıkıştırmayı işlemesine izin verin.
  • Derlenmiş kodu ve diğer ikili bağımlılıkları işlemekten kaçının. Kaynağı işleyin ve bağımlılıkları oluşturun veya bu dosyaları sürüme alıp sisteminize sağlamak için bir paket yönetimi çözümü kullanın.
  • Yapılandırmayı ve diğer yapılandırılmış verileri JSON gibi fark edilebilir düz metin biçimlerinde depolayın.

Git LFS nedir?

Sürümler ve sık güncelleştirmeler arasında büyük farklara sahip kaynak dosyalarınız varsa, bu dosya türlerini yönetmek için Git Büyük Dosya Depolama (LFS) kullanabilirsiniz. Git LFS, deponuza yönelik bir işlemedeki büyük dosyaları açıklayan veriler sağlayan bir Git uzantısıdır. İkili dosya içeriğini ayrı bir uzak depolamada depolar.

Deponuzdaki dalları kopyaladığınızda ve değiştirdiğinizde, Git LFS doğru sürümü söz konusu uzak depolamadan indirir. Yerel geliştirme araçlarınız dosyalarla doğrudan deponuza kaydedilmiş gibi saydam bir şekilde çalışır.

Fayda -ları

Git LFS'nin avantajlarından biri, ekibinizin hangi dosyaları oluşturduğundan bağımsız olarak tanıdık uçtan uca Git iş akışını kullanabilmesidir. LFS, büyük dosyaları işleyerek bunların genel depoyu olumsuz etkilemesini önler. Ek olarak, 2.0 sürümünden itibaren Git LFS, ekibinizin videolar, sesler ve oyun haritaları gibi büyük, değiştirilemez varlıklar üzerinde çalışmasına yardımcı olmak için dosya kilitlemeyi destekler.

Git LFS , Azure DevOps Services'detam olarak desteklenir ve ücretsizdir. Visual Studio ile LFS'yi kullanmak için Visual Studio 2015 Güncelleştirme 2 veya sonrası gerekir. yönergeleri izleyerek istemciyükleyin, yerel deponuzdaki dosyalar için LFS izlemesini ayarlayın ve değişikliklerinizi Azure Repos'a gönderin.

Sınırlamalar

Git LFS'nin benimsemeden önce göz önünde bulundurmanız gereken bazı dezavantajları vardır:

  • Ekibinizin kullandığı her Git istemcisiNin Git LFS istemcisini yüklemesi ve izleme yapılandırmasınıanlaması gerekir.
  • Git LFS istemcisi yüklü ve doğru yapılandırılmamışsa, deponuzu kopyaladığınızda Git LFS aracılığıyla işlenen ikili dosyaları görmezsiniz. Git, ikili dosyayı değil, Git LFS'nin depoya işlediği büyük dosyayı açıklayan verileri indirir. Git LFS istemcisi yüklü değilken büyük ikili dosyalar işlendiğinde, ikili dosya deponuza gönderilir.
  • İkili dosyanın iki farklı sürümünün üst öğesi aynı olsa bile Git bu iki farklı sürümdeki değişiklikleri birleştiremez. İki kişi aynı anda aynı dosya üzerinde çalışıyorsa, bir kişinin diğerinin çalışmasının üzerine yazmasını önlemek için birlikte çalışmaları ve değişikliklerini mutabık kılmaları gerekir. Git LFS bu konuda yardımcı olmak için dosya kilitleme sağlar. Kullanıcılar yine de çalışmaya başlamadan önce ikili dosya varlığının en son kopyasını çekmeye özen göstermelidir.
  • Azure Repos şu anda Git LFS izlenen dosyalarıyla depolarda Secure Shell (SSH) kullanmayı desteklememektedir.
  • Kullanıcı, web arabirimi aracılığıyla Git LFS için yapılandırılmış bir depoya bir ikili dosya sürüklerse, ikili dosya Git LFS istemcisi aracılığıyla işlenecek işaretçiler yerine doğrudan depoya commitlenir.
  • Katı bir dosya boyutu kısıtlaması olmasa da, sunucunun kullanılabilir boş alanı ve geçerli iş yükü performansı ve işlevselliği kısıtlayabilir.
  • Bir dosya karşıya yükleme için süre sınırı bir saattir.

Dosya biçimi

Git LFS izlenen dosyası için deponuza yazılan dosyanın her satırda bir anahtar/değer çifti olan birkaç satırı vardır:

version https://git-lfs.github.com/spec/v1
oid a747cfbbef63fc0a3f5ffca332ae486ee7bf77c1d1b9b2de02e261ef97d085fe
size 4923023

Uyarı

Sürüm değeri için eklenen GitHub URL'si yalnızca LFS işaretçisi dosya türünü tanımlar. Bu, ikili dosyanızın bir bağlantısı değildir.

Bilinen sorunlar

Azure DevOps Server ile LFS'nin 2.4.0'dan önceki bir sürümünü kullanıyorsanız, Kerberos yerine NTLM aracılığıyla kimlik doğrulamasıiçin ek bir kurulum adımı gerekir. LFS 2.4.0 itibarıyla bu adım artık gerekli değildir ve yükseltmenizi kesinlikle öneririz.