Git, evrimleştiği kadar tasarlanmamıştır .
Kendinize bir bakın. Resmi git deposunu klonlayın , açın gitk
(veya en sevdiğiniz grafik git günlük görüntüleyicisini) ve en eski revizyonlarına bakın.
Başlangıçta sadece en temel işlevlere (nesne veritabanı ve dizin) sahip olduğunu göreceksiniz. Diğer her şey elle yapıldı . Bununla birlikte, bu küçük çekirdek kabuk komut dosyası oluşturma yoluyla kolayca otomatikleştirilecek şekilde tasarlanmıştır. Git'in ilk kullanıcıları, ortak görevleri otomatikleştirmek için kendi kabuk komut dosyalarını yazdılar; yavaş yavaş bu betikler git dağılımına dahil edildi (önceki örnek 839a7a0'a bakın ). Her yeni ihtiyaç olduğunda, komut dosyaları buna izin verecek şekilde uyarlandı. Daha sonra, bu senaryoların birçoğu C'de yeniden yazılacaktır.
Üzerinde organik olarak büyüyen bir üst tabaka ile temiz, dik bir çekirdeğin (eğer ihtiyacınız varsa hala doğrudan kullanabilirsiniz) bu kombinasyonu git gücünü verir. Tabii ki, ona çok sayıda garip adlandırılmış komut ve seçenek veren de budur.
Sıkıştırma, grafikler, revizyon numaralarından kurtulma, dallanma, saklanma, uzaktan kumandaların vurgulanması ... Hepsi nereden geldi?
Bunların çoğu başlangıçta yoktu.
Her nesne ayrı ayrı sıkıştırılmış ve yinelemeleri adlandırmalarından kaçınılmış olsa da, git'te görmeye alışkın olduğumuz yüksek sıkıştırmadan sorumlu olan "paket" dosyaları yoktu. Başlangıçta felsefe "disk alanı ucuz" idi.
"Grafikler" ile grafik izleyicileri seviyorsanız gitk
, daha sonra ortaya çıktılar (AFAIK, birincisi gitk
). AFAIK, BitKeeper'ın grafiksel bir tarih görüntüleyicisi de vardı.
Sürüm numaralarından kurtulmak, aslında git'in nesneleri depolamak için içeriğe yönelik bir dosya sistemi kullanma temel konsepti, çoğunlukla monotondan geldi . O zaman, monoton yavaştı; durum böyle olmasaydı, Linus git oluşturmak yerine onu kullanmış olabilirdi.
Her bir klon ayrı bir dal olarak hareket ettiğinden, dallanmanın vurgulanması dağıtılmış bir versiyon kontrol sisteminde bir şekilde kaçınılmazdır.
Stashing ( git stash
), IIRC, oldukça yenidir. Kullandığı refloglar başlangıçta orada değildi.
Uzaktan kumandalar bile başlangıçta yoktu. Başlangıçta, nesneleri kullanarak el ile kopyaladınız rsync
.
Bu özelliklerin her biri tek tek eklendi. Hepsi - belki de çoğu - Linus tarafından yazılmadı. Git'in yerine getirmediği bir ihtiyaç hissettiğinde, git'in çekirdek "sıhhi tesisat" katmanı üzerinde yeni bir özellik yaratılabilir ve dahil edilmesi önerilebilir. Eğer iyiyse, git'in faydasını (ve komut satırı karmaşıklığını) daha da geliştirerek muhtemelen kabul edilecektir.