CodeBlanks Logo Icon CodeBlanks

Internals

nesne veritabanını inceleyip packfile yapısını doğrularsın.

Git Nesne Veritabanı ve Packfile

Git nesneleri (blob, tree, commit, tag) .git/objects altında SHA-1 karmalarıyla saklanır. Başlangıçta gevşek (loose) olan bu nesneler, git gc veya git repack çalıştığında sıkıştırılarak .pack ve .idx dosyalarından oluşan paket dosyalarına (packfile) dönüştürülür. git verify-pack komutu paket dosyalarının bütünlüğünü ve içindeki nesneleri doğrular.

git verify-pack -v .git/objects/pack/*.idx
git cat-file -t <hash>

Uygulama Nesne Türünü İncele

hello.txt dosyasını git hash-object -w ile nesne veritabanına ekle. Ardından nesnenin SHA karmasını git cat-file -t ile kontrol ederek türünü terminale yazdır.

Başlangıç kodu

terminal
git init -q
echo "CodeBlanks" > hello.txt

# hash-object ile veritabanına yaz ve türü cat-file ile yazdır

Örnek çözüm

terminal
git init -q
echo "CodeBlanks" > hello.txt
HASH=$(git hash-object -w hello.txt)
git cat-file -t $HASH

Beklenen çıktı

blob

Uygulama Nesneleri Paketle ve Doğrula

Depoda git repack -a -d -q komutunu çalıştırarak tüm gevşek nesneleri paketle. Ardından paket dosyasını git verify-pack ile doğrula ve başarılı olursa terminale PACK OK yazdır.

Başlangıç kodu

terminal
git init -q
git config user.name "Dev"
git config user.email "dev@example.com"
echo "v1" > app.txt
git add app.txt
git commit -m "feat" -q

# repack ile paketle ve verify-pack sonrasında PACK OK yazdır

Örnek çözüm

terminal
git init -q
git config user.name "Dev"
git config user.email "dev@example.com"
echo "v1" > app.txt
git add app.txt
git commit -m "feat" -q
git repack -a -d -q
git verify-pack .git/objects/pack/*.idx >/dev/null && echo "PACK OK"

Beklenen çıktı

PACK OK

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Packfile (.pack) dosyalarının depodaki temel amacı nedir?

  • Depoyu uzaktaki sunucuya otomatik olarak dağıtmak
  • Gevşek nesneleri sıkıştırıp disk alanından ve ağ bant genişliğinden tasarruf etmek Doğru cevap
  • Commit mesajlarını şifreleyerek yetkisiz okumayı engellemek
  • Silinen dalların kurtarılması için reflog kayıtlarını yedeklemek

Açıklama: Git gevşek nesneleri tek tek saklamak yerine paketleyip delta sıkıştırması uygular, bu sayede disk alanı ve aktarım süresi büyük ölçüde azalır.

2 Paket Dosyası Doğrulama

Soru
git verify-pack ____-v .git/objects/pack/pack-demo.idx
Cevap
git verify-pack v-v .git/objects/pack/pack-demo.idx

Açıklama: -v (verbose) bayrağı, paket içindeki her nesnenin SHA karmasını, türünü ve boyutunu ayrıntılı listeler.

3 Git İç Yapıları

Kavram Anlamı
blob Dosya içeriğini tutar
tree Dizin yapısını tutar
packfile Sıkıştırılmış nesne paketi
.idx Paket nesne dizini

Uzman bölümündeki tüm dersler