Büyük ikili dosyalar içeren bir git repoyu optimize edin


21

Projemiz yaklaşık 11GB, 10'u ikili veridir (.png görüntüleri). Sonuç olarak, a git diffveya git statusoperasyonlar bir dakikadan fazla sürüyor. Neyse ki tüm veri dosyaları harika bir isimle bir klasöre ayrılmıştır data. Atama “İkili dosyalar üzerinde sıkıştırma, farklılaştırma ve diğer pahalı işlemleri yapmaktan kaçının” şeklindedir.

  • Projenin iki depoya bölündüğü kabul edildi. Ardından data, ana kaynak kod repo tarafından kontrol edilen harici bir repo olur. Depoları senkronize etmenin ek yükünün, özellikle veri dosyaları ile çalışan sanatçılar için çok fazla olacağına karar verildi.

  • Açıkça bu dosyalar ikili olan git'e anlatıcılığını , diffs dosyaları hariç kabul edildi, ancak bu soruya sadece kısmi bir çözüm gibi görünüyor.

Git özelliklerinin çözüm olduğunu düşünüyorum, ama nasıl? Yoksa yekpare bir depodan daha iyi bir mimari var mı?


1
Buradaki ilk büyük soru, bu veri dosyalarının ne kadar önemli olduğu. Programınız , faydalı bir şey yapmak için mevcut tüm bu görüntülere ihtiyaç duyuyor mu , yoksa tipik geliştirme / test sırasında küçük bir alt kümeden kurtulabilir mi?
Ixrec

@Ixrec, resimler kaynak kodundan daha önemlidir. Hepsi mevcut olmalı ve .png sağlama toplamı her zaman bozuk dosyalar için denetlenir.
Vorac

1
Neden bu soru yığın taşması ile ilgili değil? Q. tam olarak buna uygun görünüyor.
spirc

@ spirc bu soru, SO'da konuyla ilgilenen "yazılım aracıyla yardım" ve burada konuyla ilgilenen "sürüm kontrol stratejisi" arasındaki çizgiyi saptar. Bir şeyi yapmak için hangi git komutunun çalıştırılacağını sormadığından, çizginin SO tarafında net değil, bu yüzden onu burada açık bırakmak için oy kullandım.

@Snowman yanıtınız için teşekkürler. Konu listesindeki hangi öğeye uyuyor? programmers.stackexchange.com/help/on-topic
spirc 21.03

Yanıtlar:


18

Sen kullanabilirsiniz git-HİA veya benzeri araçları (git-yağ, git-ek, vs.). Bu araçlar temel olarak repo'nuzdaki ikili dosyaları karma olan küçük metin dosyasıyla değiştirir ve gerçek ikili verileri bir ağ paylaşımı gibi gitmeyecek şekilde saklar.

Sadece hash'lerin karşılaştırılmasıyla farkları ve her şeyi süper hızlı kılar ve - en azından git-lfs için - kullanıcıya karşı şeffaftır (bir kez kurduktan sonra).

Afaik git-lfs, github, gitlab, VisualStudio tarafından desteklenir ve açık kaynak kodludur.


2
git-lfsKarma geliştirici / sanatçı ekibiyle birçok gigabaytlık varlık içeren bir projeyi kullanmayı denediniz mi? İnsanların oyun ve animasyon gibi projeler için git-lfs kullanıp kullanmadığını bilmek istiyorum. Yazma sırasında hala oldukça yeni. Kendi tecrübelerime göre daha az teknik kullanıcı için git'e giriş engeli çoktan çok yüksek olduğu için, üstünde dosya yönetimi için fazladan bir katman olması - insanların zaten git ile rahat hissetmedikleri sürece kullanması zor olabilir.
ideasman42

Yalnızca ~ 1GB'a kadar veri için üzgünüm. Ancak git-lfs, son kullanıcılar için ek adım eklememeli, tamamen saydam olmalıdır.
kat0r

Bu doğru cevap gibi gözüküyor, eğer entegrasyon sırasında bazı problemler ortaya çıkarsa, burada rapor edeceğim. Bu nedenle, kurulum prosedürünün her sunucuda değil, sunucuda yalnızca bir kez yapılması gerekiyor mu?
Vorac

Afaik'te küçük bir istemci eklentisi kurmanız gerekiyorsa, github sayfasını da kontrol edin. Ancak bunun, herhangi bir alternatiften daha basit / daha basit bir grup politikası ile ortaya çıkması kolay olmalıdır.
kat0r

1

Her iki GIT ve SVN deposunu kullanın

İkili dosyalar kaynaktan mantıksal olarak ayrılabilirse, metin dosyaları için git ve ikili dosyalar için subversion gibi DVCS kullanmamaya karar verebilirsiniz.

Üzerinde çalıştığım bir proje, derlenmiş kitaplıklar için (OSX / Win32 bağımlılıkları için) çok fazla GB'miz olduğundan, sürümlerini korumamız gereken bir şey.


Diğer yandan teknik olmayan kullanıcılarınız varsa, iki versiyonlu kontrol sistemlerinin kullanılması problemli olabilir. Bununla birlikte, sanatçılar kod üzerinde çalışmıyorsa, güncellemeyi gerçekleştirmek için bir komut dosyası sağlayabilir ve ikili varlıklar gerçekleştirmek için alt sürüm kullanabilirler.

SVN kullan (ile git svn)

Bu takas, normal git kullanmaya alışmış geliştiriciler için her zaman çok hoş olmasa da, ana depo için SVN'yi kullanabilirsiniz ve geliştiriciler araç kullanabilir git svn.

Bu, git'i kullanan geliştiriciler için biraz daha fazla çalışma yapar, ancak DVCS (veya genel olarak VCS) ile aşina olmayan herkes için anlamına gelir - SVN'nin basit modelini çoklu karmaşık sürüm kontrol sistemleri kullanmak zorunda kalmadan kullanabilirler .


git-lfs de bir seçenek ama ben kullanmadım, bu yüzden ne kadar iyi çalıştığını konuşamıyorum.

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.