Git dizini aracılığıyla derinlemesine anlayış

Git güçlü bir araçtır, ancak kullanımı pek kolay değildir. Programcılar Git'in bileşimini gerçekten anlamak için zaman ayırabilirlerse, birçok gereksiz sorundan kaçınacaktır.

Yazar | Pierre de Wulf

Çevirmen | Ay gibi Mingming, sorumlu editör | Guo Rui

Aşağıdaki çeviridir:

Git öğrenmek, yabancı bir ülkeye gelen yerel dili anlamayan bir insan gibidir - nerede olduğunuzu ve nereye gideceğinizi biliyorsanız sorun değil. Bir kez kaybolduktan sonra, sorun büyük olacak.

İnternette temel Git komutlarını öğrenmeyle ilgili birçok makale var, ancak bu makale bu kategoriye ait değil. Burada farklı bir öğrenme fikri sağlamaya çalışacağım.

Yeni başlayanlar genellikle Git'ten korkar ve korkmaması zordur. Hiç şüphe yok ki Git güçlü bir araçtır, ancak çok kullanıcı dostu değildir. Git'i kullanırken anlaşılması gereken birçok yeni kavram vardır: Dosyaları parametreler olarak değil komut parametreleri olarak kullanmanın anlamı oldukça farklıdır.

Bence bu zorlukların üstesinden gelmek için sadece Git commit ve push kullanımını öğrenmek gerekli değil. Git'in bileşimini gerçekten anlamak için zaman ayırabilirsek, birçok gereksiz sorundan kaçınacağız.

.Git dizinini inceleyin

Tamam, şimdi başlayalım.

Git init aracılığıyla bir git deposu oluşturduğunuzda, git bir .git dizini oluşturur. Bu dizin, git'in düzgün çalışması için gereken tüm bilgileri içerir. Açıkça söylemek gerekirse, projenizde git kullanmaya devam etmek istemiyorsanız, sadece .git dizinini silin ve proje dosyalarını saklayın. Ama bu neden doğru?

İlk kaydetmenizden sonra .git klasörü şöyle görünür:

KAFA şubeler yapılandırma açıklama kancalar pre-commit.sample önceden itme. Örnek ... bilgi hariç tut nesneler bilgi paketi referanslar kafalar etiketler
  • KAFA

    Bunun hakkında daha sonra konuşacağım.

  • config (konfigürasyon)

    Bu dosya, uzak url, e-posta adresiniz ve kullanıcı adınız gibi depo yapılandırmanızı içerir. Konsolda git config ... her kullandığınızda, bunu etkileyecektir.
  • açıklama

    Gitweb (github'ın öncülü) tarafından deponun açıklamasını görüntülemek için kullanılır.

  • kancalar (kancalar)

    Bu ilginç bir özellik. Git, her anlamlı Git aşamasında otomatik olarak çalıştırılabilen bir dizi komut dosyası sağlar. Hook olarak adlandırılan bu komut dosyaları, commit, rebase ve pull işlemlerinden önce ve sonra çalıştırılabilir. Komut dosyası komutu, yürütme zamanlamasını belirtir. Örneğin, kodu itmeden önce kontrol etmek için bir kanca olarak ön itme yazabiliriz.

  • bilgi (bilgi)

    Git tarafından yönetilmesini istemediğiniz dosyaları .gitignore dosyasına kaydedebilirsiniz. Bir dosyayı hariç tutmak, bu dosyayı paylaşmak istemediğiniz anlamına gelir. Örneğin, IDE özel yapılandırmanızı paylaşmak istemiyorsanız, bunu .gitignore dosyasına eklemeniz yeterlidir.

Bir gönderime neler dahildir?

Her dosya oluşturduğunuzda ve izlediğinizde git, dosyayı sıkıştıracak ve kendi veri yapısında saklayacaktır. Sıkıştırılmış nesnenin benzersiz bir adı ve karma değeri olacak ve nesne dizininde saklanacaktır.

Nesne dizinini incelemeden önce, bir gönderinin anlamını anlamalıyız. Bir yürütmenin mevcut çalışma dizininin anlık görüntüsü olduğunu söyleyebilirsiniz, ancak gerçek bundan çok daha fazlasıdır.

Aslında, kaydettiğinizde git, aşağıdaki iki adımda çalışma dizininizin bir anlık görüntüsünü oluşturur:

  • Hiçbir şey değişmediyse, git sıkıştırılmış dosyayı (hash değeri) anlık görüntüye ekler.

  • Dosya değişirse, git onu sıkıştıracak ve nesne klasöründe saklayacaktır. Son olarak, bu sıkıştırılmış dosyanın adı (hash değeri) anlık görüntüye eklenir.

İşte basitleştirilmiş bir süreç, aslında, tüm süreç biraz karmaşık ve ilerideki bir makalede ayrıntılı bir giriş yapılacaktır.

Anlık görüntü oluşturulduktan sonra sıkıştırılacak ve karma değerinin adını alacaktır. Peki bu sıkıştırılmış nesneler nerede var? Nesne klasöründe saklanırlar.

4c f44f1e3fe4fb7f8aa42138c324f63f5ac85828 // karma 86 550c31847e518e1927f95991c949fc14efc711 // karma e6 9de29bb2d1d6434b8b29ae775ad8c2e48c5391 // karma bilgi // bunu görmezden gelelim paket // bunu da görmezden gelelim

Boş bir 1.txt dosyası oluşturup gönderdikten sonra nesne klasörü böyle görünüyor. Dosyanızın karma değeri "4cf44f1e ..." ise, git'in onu "4c" alt dizininde saklayacağını ve "f44f1 ..." olarak adlandıracağını lütfen unutmayın. Bu küçük numara, / objects dizinlerinin sayısını 255'ten daha aza indirir.

Hatırlamanız gereken şey, bir sunumun 4 bölümden oluştuğudur:

  • Çalışma dizini anlık görüntüsünün adı (bir karma değeri).

  • Bir yorum / not.

  • Gönderen bilgileri.

  • Ebeveyn tarafından gönderilen karma değer.

  • Gönderilen dosyayı açarsak:

    // Gönderim geçmişini görüntüleyerek, gönderilen hash değerini kolayca sorgulayabilirsiniz // Tam hash değer dizesini kopyalamanıza gerek yok, // Karma değerin benzersizliğini garanti edebilecek önceki paragrafı kopyalayın. git kedi-dosyası -p 4cf44f1e3fe4fb7f8aa42138c324f63f5ac85828

    Aşağıdaki içeriği alın:

    ağaç 86550c31847e518e1927f95991c949fc14efc711 yazar Pierre De Wulf < test (mailto: pierredewulf31@gmail.com) > 1455775173 -0500 komisyoncu Pierre De Wulf < (mailto: pierredewulf31@gmail.com) > 1455775173 -0500 işlemek A

    Beklendiği gibi, anlık görüntünün karma değerini, yazar bilgilerini ve gönderilen yorumları gördük.

    Çok önemli iki şey var:

    • Beklendiği gibi, anlık görüntü karması "86550 ..." de bir nesnedir ve bunu nesne klasöründe bulabilirsiniz.

    • Bu ilk gönderim olduğu için, üst gönderinin karma değeri yoktur.

    Peki anlık görüntüde neler saklanır?

    git kedi-dosyası -p 86550c31847e518e1927f95991c949fc14efc711100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file_1.txt

    Daha önce depolanan son nesneyi bulduk, bu da anlık görüntümüzdeki tek nesne. Bu bir damla nesnesidir, burada tartışılmayan başka bir bilgi noktasıdır.

    Dallar, etiketler ve HEAD hepsi aynı

    Artık git'teki her şeyin doğru hash değeri ile elde edilebileceğini öğrendiniz. Şimdi HEAD'e odaklanalım. Peki HEAD nedir?

    kedi KAFA ref: refs / head / master

    HEAD bir hash değildir, HEAD kullandığınız dalın tepesine bir işaretçi olarak anlaşılabilir. Şimdi refs / head / master'a bakalım:

    kedi referansları / kafaları / usta 4cf44f1e3fe4fb7f8aa42138c324f63f5ac85828

    Tanıdık geliyor mu? Bu, ilk kez gönderdiğimiz hash değeriyle aynı. Bu, dalların ve etiketlerin kaydetme işaretlerinden başka bir şey olmadığını gösterir. Bu, silmek istediğiniz dalı ve etiketi silseniz bile, işaret ettikleri kayıtların hala orada olduğu, ancak silme işleminden sonra bu taahhütleri almanın daha zor olduğu anlamına gelir. Daha detaylı içerik öğrenmek istiyorsanız git kitap üzerinden öğrenebilirsiniz.

    Sonuna yaz

    Bu yüzden, bunu öğrendikten sonra, git commit'nin mevcut çalışma dizininizdeki dosyaları "sıkıştırmak" ve sonra bunları diğer bilgilerle birlikte nesne klasöründe saklamak olduğunu anlamalısınız. Git'e yeterince aşina iseniz, commit'e hangi dosyaların dahil edileceğini ve hangi dosyaların kaydedilmeyeceğini bileceksiniz.

    Burada bahsettiğim işlem, çalışma dizininizin anlık görüntüsü değil, göndermek istediğiniz dosyanın anlık görüntüsüdür. Gerçek yürütmeden önce git, göndermek istediğiniz dosyaları nerede saklayacak? Bunları bir dizin dosyasında saklar. Ancak, şimdilik onu derinlemesine incelemeyi düşünmüyoruz. Gerçekten ilgileniyorsanız, buradan daha fazla bilgi edinebilirsiniz (https://github.com/git/git/blob/master/Documentation/technical/index-format.txt).

    Okuduğunuz için teşekkürler! Umarım bu makaleyi okuyarak değerli içerikler öğrenebilirsiniz. Umarım bu makale git'i daha kolay kullanmanıza yardımcı olur.

    Orijinal: https://www.daolf.com/posts/git-series-part-1/

    Çevirmen: Mingmingruyue, tanınmış bir İnternet şirketi Java kıdemli geliştirme mühendisi, CSDN blog uzmanı.

    Bu makale bir CSDN çevirisidir, lütfen yeniden basımın kaynağını belirtin.

    App Store listesinin başında, DingTalk mı geliyor?

    Uzak ofis 4 büyük çukur, çukurlar "ölümcül"!

    GitHub TOP listesinde listelendikten sonra, Çinli geliştiriciler iş başında!

    Evde çalışan Ali, Tencent ve ByteDance arasındaki farkı keşfedin

    Derinlemesine iyi metin! Sina Weibo mimarları, Weibo bulut yerel teknolojisinin düşünce ve uygulamasını analiz ediyor

    2020'de blok zinciri ve dağıtılmış defter teknolojisinin 5 ana eğilimi

    Chenzhou: Su Xian Sağlık ve Sağlık Sisteminin Gençleri, "salgına" karşı savaşta gençliğin şarkısını söylüyor
    önceki
    Bilim adamları, uzaydaki yaşamın gözler üzerindeki etkisini ortaya koyuyor
    Sonraki
    Blok zincirindeki ve dağıtılmış defterlerdeki en son trendleri gösterecek 5 cümle
    İki çalışma, büyük miktarda yeraltı suyunun periyodik olarak yüzeye yükseldiğini kanıtladı.
    Çince versiyonu açık kaynak! Bu, en klasik Python programlama ders kitabı olabilir
    Yeni keşif! Europa'nın buzunun altındaki okyanus tuz açısından zengin olabilir
    Uzak ofis 4 büyük çukur, çukurlar "ölümcül"
    Neden kırmızı Mars öldü ve mavi dünya hayat dolu
    Dokuzuncu gezegen yoksa, tespit edilen garip olaylar dizisi nasıl açıklanır?
    İnanılmaz! Uber'in lüks açık kaynak derin öğrenme "aile paketi"
    App Store listesinin en üstüne, DingTalk mı geliyor?
    Boeingin ikinci uzay aracı bir çarpışmaya neden olmuş olabilir
    OPPO, maske üretmek için "işi düzgün yapmayın" cevabını verdi; eski iPhone yavaşlaması nedeniyle 25 milyon euro para cezasına çarptırıldı; Angular 9.0.0 yayınlandı | Geek Headlines
    Düzenleme algoritmasının tamamını tek bir makalede okuyun
    To Top