"Değişir." Normal gelişim takibi için hayır. Bununla birlikte, bulut ve DevOps dağıtımları için genellikle kullanışlı veya hatta gereklidir.
Çoğu zaman,
@ptyx doğrudur . Gerçekten de, onun "hayır" ı biraz daha vurgulu olarak ifade edilebilirdi. "Hayır, hayır! Aman Tanrım! "
Küçültülmüş veya sıkıştırılmış varlıkları neden Git gibi kaynak kontrol sisteminde depolamıyorsunuz?
Kaynak kodundan anında inşa süreciniz tarafından neredeyse önemsiz bir şekilde yeniden oluşturulabilirler. Sıkıştırılmış varlıkları depolamak temel olarak aynı mantıksal içeriği iki kez depolamaktır. "Kendinizi tekrarlama" (aka KURU ) ilkesini ihlal eder .
Daha az felsefi ancak daha pratik bir neden, minimize edilmiş / optimize edilmiş varlıkların Git'te depolandığında çok düşük sıkıştırılabilirliğe sahip olmasıdır. Kaynak kontrol sistemleri, depolanan her dosyanın farklı sürümleri arasındaki değişiklikleri ("deltalar") tanıyarak çalışır. Bunu yapmak için, en son dosyayı bir önceki sürümle "farklılaştırırlar" ve bu deltaları dosyanın her sürümünün tam bir kopyasını saklamaktan kaçınırlar. Ancak küçült / optimize et adımında yapılan dönüşümler genellikle diff / delta algoritmalarının kullandığı benzerlikleri ve geçiş noktalarını kaldırır . En önemsiz örnek satır sonlarını ve diğer boşlukları kaldırmaktır; ortaya çıkan varlık genellikle sadece bir uzun satırdır. Web oluşturma sürecinin birçok bölümü - Babel , UglifyJS , Browserify ,Daha az ve Sass / SCSS - varlıkları agresif bir şekilde dönüştürün. Çıktıları rahatsız edici; küçük girdi değişiklikleri çıktıda büyük değişikliklere yol açabilir. Sonuç olarak, fark algoritması her seferinde neredeyse tamamen farklı bir dosya gördüğüne inanır. Sonuç olarak depolarınız daha hızlı büyüyecektir. Diskleriniz yeterince büyük olabilir ve ağlarınız büyük bir endişe yaratmayacak kadar hızlı olabilir, özellikle de küçültülmüş / optimize edilmiş varlıkları iki kez depolamanın bir değeri olsaydı - 1. noktaya dayanmasına rağmen, ekstra kopyalar sadece% 100 anlamsız olabilir kabartmak.
Ancak bunun büyük bir istisnası vardır: DevOps / bulut dağıtımları. Bir dizi bulut satıcısı ve DevOps ekibi Git'i ve benzerlerini yalnızca geliştirme güncellemelerini izlemek için değil, aynı zamanda uygulamalarını ve varlıklarını test ve üretim sunucularına aktif olarak dağıtmak için de kullanır. Bu rolde Git'in "hangi dosyalar değişti?" "her bir dosyada ne değişti?" Git, minimize edilmiş / optimize edilmiş varlıklar için neredeyse tam bir dosya kopyası yapmak zorundaysa, aksi halde olduğundan biraz daha uzun sürer, ancak her birinde "projedeki her dosyanın" bir kopyasını önlemeye yardımcı olan mükemmel bir iş olmadığı için önemli değildir. dağıtım döngüsü.
Git'i dağıtım motoru olarak kullanıyorsanız, küçültülmüş / optimize edilmiş öğelerin Git'te depolanması "hayır!" arzu edilir. Gerçekten de, konuşlandırdığınız sunucularda / hizmetlerde sağlam oluşturma / sonradan işleme fırsatlarına sahip değilseniz gerekli olabilir. (Bu durumda geliştirme ve dağıtım varlıklarının nasıl bölüneceği ayrı bir solucan kutucuğudur. Şimdilik, tek bir birleşik depo, birden çok dal, alt depo veya hatta birden çok örtüşen depo da dahil olmak üzere çeşitli yollarla yönetilebileceğini bilmek yeterlidir. )
/dev/null
.