25 puan yazan GN⁺ 2025-04-09 | 6 yorum | WhatsApp'ta paylaş
  • Git, 20 yıl önce Linus Torvalds’ın ilk commit’iyle başlayan bir sürüm kontrol sistemidir.
  • Başlangıçta basit bir kişisel projeydi, ancak daha sonra dünya genelinde en yaygın kullanılan sürüm kontrol sistemi haline geldi.
  • Yazar, GitHub’ın kurucu ortaklarından biridir ve Git ile ilgili kitaplar ve topluluklar oluşturarak Git’in gelişiminde derin biçimde yer aldı.
  • İlk zamanlarda basit bir dizin içeriği yönetim aracıydı, ancak bugün yazılım geliştirmenin şeklini değiştiren temel bir araç haline geldi.

Git’in felsefesi ve neden gerekli olduğu

  • Git, Linux çekirdeği topluluğunda mevcut sürüm kontrol araçlarının sınırlamalarına duyulan memnuniyetsizlikten doğdu.
  • O dönemdeki işbirliği yöntemi, mailing list’ler ile tarball ve patch dosyaları üzerinden yürüyen dağıtık ve yerel tabanlı bir işbirliğiydi.
  • O zamanki SCM araçları yavaş, merkezi ve verimsizdi; bu yüzden tarball/patch tabanlı yaklaşım daha iyiydi.
  • Bitkeeper adlı araç bir alternatifti, ancak lisans sorunları nedeniyle Git’in geliştirilmesine başlandı.
  • Git, en başından bir "sürüm kontrol sistemi" olarak değil, patch ve tarball’ları daha iyi işlemek için tasarlanmış bir veri yapısı olarak kurgulandı.

Git’in ilk commit’i

  • İlk commit, son derece temel bir dizin içeriği izleme aracıydı.
  • O dönemki araçlar git commit gibi komutlar değil, write-tree, commit-tree gibi düşük seviyeli veritabanı araçlarıydı.
  • Git daha en başından şu yeteneklere sahipti:
    • Çalışma dizinini önbelleğe kaydetmek (update-cache) ve onu bir ağaç nesnesine dönüştürerek (write-tree) veritabanına yazmak
    • Değişiklikleri commit biçiminde saklamak (commit-tree) ve geçmiş oluşturmak
    • Veritabanı nesnelerini cat-file, read-tree, show-diff ile okumak ve karşılaştırmak
  • Linus, Git’i yalnızca bir arka uç "plumbing" aracı olarak görüyor, kullanıcı arayüzünün ise dışarıdan yapılmasını istiyordu.

Git ile içerik dağıtımına bir örnek

  • Yazar, 2005 yılında Reactrix adlı bir startup’ta dijital reklam içeriği dağıtmak için Git kullandı.
  • Yüzlerce dijital ekranın her birinin farklı reklam kombinasyonlarına sahip olması gerekiyordu ve Git’in content-addressing özelliği bunu verimli biçimde çözdü.
  • Bu, Git’in kod yönetimi için değil, içerik dağıtım aracı olarak kullanıldığı yaratıcı bir örnekti.
  • İlk Git projesinin başlıca katkıcılarından Nick Hengeveld, SSL, paralel HTTP aktarımı gibi özellikler ekledi.
  • Bu deneyim, Git ile ilgili dokümantasyon, web siteleri ve kitaplar hazırlamanın çıkış noktası oldu; oradan da GitHub’a uzandı.

Git komutları ve kullanıcı araçlarının evrimi

  • Git’in ilk dönem komutlarının tamamı düşük seviyeli, betik tabanlı araçlardı ve bugünkünden oldukça farklıydı.
  • git log, git rebase, git commit gibi komutlar da başlangıçta basit shell script’lerdi; zamanla gelişerek bugünkü biçimlerine kavuştular.

git logun ilk sürümü

  • git log, git-rev-list --pretty HEAD | less biçiminde basit bir betikti.
  • rev-list, bugün de varlığını sürdüren, commit ID’lerini çıktılamak için kullanılan bir araçtır.

git rebasein ortaya çıkışı

  • rebase kavramı, 2005 yılında Linus ile Junio Hamano arasındaki bir e-posta konuşmasında doğdu.
  • Junio’nun çalışma biçimi, mevcut HEAD’i bırakıp yeni bir HEAD’i temel alarak çalışmayı sürdürmekti ve bunu "rebase" olarak ifade etti.
  • Bu yaklaşım, bugün bildiğimiz git rebase komutuna dönüştü.

Octocat’in kökeni

  • GitHub’ın simgesi Octocat, Git’teki "octopus merge" stratejisinden ilham aldı.
  • Birden fazla branch’i aynı anda birleştiren bu stratejiye "octopus" deniyordu; GitHub’ın ilk dönemlerinde de bu kelimeden esinlenilerek Octocat karakteri ortaya çıktı.

Git’in bugünü ve geleceği

  • Yazar, Git’i hâlâ orijinal amacına uygun biçimde, "stupid content tracker" olarak kullanıyor.
  • GitButler projesi, Git’i bir projenin geçmişini izleme ve kaydetme yöntemi olarak kullanıyor.
  • Git hâlâ güçlü bir içerik izleme ve dağıtık sistem; gelecekte de çok farklı biçimlerde kullanılma potansiyeline sahip.
  • Doğum günün kutlu olsun, Git. Hâlâ tuhaf, hâlâ harika bir araç

6 yorum

 
aobamisaki 2025-04-13

Git'in 20. yaş gününü kutlarız.

 
bobross0 2025-04-10

Tebrikler

 
girr311 2025-04-10

Doğum günün kutlu olsun. Büyüğünün sözünü dinleyip uzun uzun sağlıklı yaşamalısın.

 
kaistj 2025-04-09

Doğum günün kutlu olsun ^^

 
crawler 2025-04-09

Garip şekilde insanı gaza getiren bir paylaşım bu.

 
GN⁺ 2025-04-09
Hacker News görüşleri
  • Git'in kökenine dair anlatılar, Linus'u peygamber gibi tasvir etme eğiliminde

    • Blog yazısı, Linus'un insani yönünü vurguluyor ve ilk deneme-yanılmaları anıyor
    • Mercurial da önemli bir rol oynadı ama çoğu zaman göz ardı ediliyor
    • Mercurial en başından beri bir UI'a sahipti ve Subversion'a benzer arayüzüyle kullanıcı dostuydu
    • Git'in veri yapısı büyük dosyalar için uygun değil
    • Git'in kaçınılmaz olduğunu düşünmüyorum; yeni alternatiflerin çıkmasını umuyorum
  • 2002 civarında projenin her parçasını benzersiz bir hash koduyla etiketleme fikrine sahiptim

    • Bunu bir yazılım şirketine önerdim ama ilgi görmedi
  • Git'i ClearCase'e alternatif olarak kullanmaya başladım

    • Yaklaşık 2007'den itibaren Git kullanmaya başladım ve ClearCase'in hantallığını aşmak için script'ler yazdım
    • 2008'de Git'e patch göndermeye başladım ve açık kaynak katkıları hakkında çok şey öğrendim
    • Git'in karmaşık CLI'ına rağmen kullanırken zorlanmadım
    • Sonraki işimde Chromium'un bir fork'u üzerinde çalıştım ve Git'le merge conflict çözmede ustalaştım
    • GitHub'ın Git için başlıca code review aracı haline gelmesi hayal kırıklığı yarattı ama Mercurial yerine Git'in daha iyi seçim olduğunu düşünüyorum
  • Git'in sadece 20 yaşında olması şaşırtıcı

    • GitHub'ın 20 yaşından küçük olması şaşırtıcı değil ama Git'in 2005'ten önce var olmaması sarsıcı
    • Başka kaynak kontrol seçeneklerini hiç kullanmadım; ileride kullanıp kullanmayacağımı merak ediyorum
  • Tarihsel bağlamı öğrenmek ilginçti

    • ClearCase de "rebase" terimini kullanıyordu ve bunun 1999'dan beri kullanıldığını doğrulayabilirsiniz
    • ClearCase'teki rebase uzun sürerdi ama Git'teki anlık rebase şaşırtıcıydı
  • Amaç, verimli bir tarball geçmiş veritabanı aracı yapmaktı; bir sürüm kontrol sistemi geliştirme niyeti yoktu

  • Commit'lerin ssh anahtarıyla imzalanabildiğini öğrendim

    • OpenBSD'deki bir sorunu çözmek için ssh ile imzalama yöntemini kullandım
    • CVS'den Git'e iş kalemleri taşıyalı 20 yıl olmuş gibi gelmiyor
  • Faydalı makale için teşekkürler; Git'in iç yapısına giriş de içeren bir depoyu öneriyorum

  • Mailing list üzerinden iş birliğine dair bir blog yazısı yazma fikri ilginç

  • Çeşitli kaynak kontrol sistemleri arasında Git kullanılabilirliği en kötü ama en sevdiğim sistem