here'a baktım ama merak ettiğim şeyleri tam olarak anlayamadım: git push
veya git pull
, diğer tarafta hangi nesnelerin eksik olduğunu nasıl anlıyor?Git, depolar arasında hangi nesnelerin gönderilmesi gerektiğini nasıl belirler?
en aşağıdaki kaydedilmesini içeren bir depo var diyelim:
a -> e -> f -> g
:
a -> b -> c -> d
uzaktan (d
refs/heads/master
olduğunu, mektuplar SHA-1 kimlikleri için durmak), aksine, bu vardır
Git belgesine göre, uzaktan kumanda bize refs/heads/master
'un g
adresinde olduğunu söyler, ancak bu işlemi bilmediğimizden, aslında bize hiçbir şey söylemez. Eksik verileri anlamaya ne dersiniz?
belirtiliyor: “istemek” Bu noktada
getirme paketi süreci içinde olanı nesneleri bakar ve göndererek ihtiyacı nesneler ile yanıt ve sonra istediği SHA-1. ,'un sahip olduğu tüm nesneleri “sahip” ve sonra SHA-1 ile gönderir. Bu listenin sonunda, ihtiyacı olan verilerin packfile göndermeye başlamak için yükleme paketi işlemini başlatmak için “bitti” yazıyor:
bu uzak göndermek için hangi verileri belirlemek, ama gitmeyeceklerini nasıl açıklıyor
Bu etki, birçok nesnenin bulunduğu depolardaki performansı artırır mı? Aksi halde, metinde aslında ne anlama geliyor?
Görünüşe göre, veri aktarımının yönü, yöne bağlı olarak çok farklıdır (çekime karşı itme). Bu tasarım seçiminde karşılaşılan zorluklar neler ve nasıl oluyor ve belgede açıklamalarını nasıl anlarım?
Cevabınız harika, teşekkür ederim! Eğer sakıncası yoksa, özellikle çok sayıda turdan kaçınmakla ilgileniyorum. Bu sadece hevesle gönderen bir mesele mi?50 kareye kadar (<1kb), ya da bir taahhüt biliniyorsa daha hızlı tespit edebilecek daha teorik, algoritmik bir mekanizma var mı? –
Ayrıca, cevabınız için herhangi bir kaynakınız varsa, bunlar harika olur. Benim endişem daha çok "git benzeri bir senkronizasyon mekanizması" uyguluyordu, bu yüzden tamamen tatmin oldum, ancak "git git senkronizasyonunun ayrıntılı olarak nasıl uygulandığı" nı arayan gelecekteki bir okuyucu bunu takdir edebilir. –
@SillyFreak Daha fazla ayrıntı için birkaç referans ekledim. Konuşma örneği kavramsal olarak nasıl öğrettiğimi, Pro Git'in ne dediğini ["The Dumb Protocol"] (http://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols#The-Dumb- Protokol). Daha verimli bir örnek için ["Akıllı Protokol"] 'e (http://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols#The-Smart-Protocol) göz atmak istersiniz. – Schwern