Git
Chapters ▾ 2nd Edition

1.3 Başlangıç - Git Nedir?

Git Nedir?

Özetle Git nedir? Bu, özümsemesi gerekli ve önemli olan bir bölümdür. Çünkü eğer Git’in ne olduğunu, temellerini ve nasıl çalıştığını iyi anlarsanız, Git’i etkili bir şekilde kullanmak da muhtemelen sizin için çok daha kolay olacaktır. Git’i öğrenirken, mümkün olduğunca diğer Sürüm Denetim Sistemleri’nden (CVS, Subversion veya Perforce gibi) bildiklerinizi aklınızdan çıkarmaya gayret edin ki Git’i daha berrak ve doğru şekilde öğrenip kullanabilesiniz. Git’in kullanıcı arayüzü diğer Sürüm Denetim Sistemleri’ne epey benzese de Git, bilgileri diğerlerinden çok daha farklı bir şekilde depolar ve bu bilgiler hakkında daha farklı düşünür. Bu yüzden bunun gibi farklılıkları anlamak Git’i kullanırken kafanızın karışmasını engeller.SubversionPerforce

Farklılıklar Değil, Anlık Pozlar

Git’in diğer herhangi bir VCS’den (Subversion ve benzerleri dahil olmak üzere) en büyük farkı, Git’in veriler hakkında düşünme şeklidir. Diğer çoğu sistem bilgileri dosya-bazlı değişim listesi şeklinde saklar. Bu diğer sistemler (CVS, Subversion, Perforce, Bazaar vd.) bilgileri dosya setleri ve o dosyalara zaman içinde yapılan değişiklikler şeklinde saklar (Bu genellikle delta-bazlı sürüm denetimi şeklinde tanımlanır).

Verileri her dosyanın baz halini referans alarak
Görsel 4. Verileri her dosyanın baz halini referans alarak, yapılan değişiklikler şeklinde saklamak.

Git, veriler hakkında bu şekilde düşünmez ve onları bu şekilde saklamaz. Bunun yerine Git, verilerini daha çok minyatür dosya sistemlerinin anlık görüntüler serisi şeklinde düşünür ve o şekilde saklar. Git’le her katkı (katkı) işlediğinizde ya da projenizin durumunu kaydettiğinizde, Git kısaca tüm dosyalarınızın o an nasıl göründüğünün fotoğrafını çeker ve o anlık görünümün referansını saklar. Verimli olmak adına, eğer dosyalar değişmemişse Git o dosyaları tekrar saklamaz, onun yerine o dosyaların halihazırda saklandığı referansa bağlantı verir. Yani Git, verilerini daha çok anlık görüntü akışı (poz) olarak görür.

Git zaman geçtikçe veriyi projenin pozları olarak saklar.
Görsel 5. Veriyi projenin pozları olarak saklamak.

Bu Git ve neredeyse diğer tüm VCS’leri arasındaki en büyük ayrımdır. Bu da Git’i, diğer sistemlerin kendilerinden önceki nesilden kopyaladıkları sürüm denetimi mirasını her yönünü yeniden değerlendirmesini sağlar. Böylelikle Git, basit bir VCS’dense, inanılmaz güçlü araçlarla donatılmış minyatür bir dosya sistemi olmuştur. Git’deki dallanmayı anlatırken verileriniz hakkında bu şekilde düşünmenin getirilerini keşfedeceğiz. Git Dalları

Neredeyse Her İşlem Yereldir

Git’deki çoğu işlem çalışmak için yalnızca yerel dosyalara ve kaynaklara ihtiyaç duyar. Genel olarak başka bir bilgisayardan sizin ağınıza bilgi gelmesine ihtiyacınız yoktur. Eğer çoğu işlemin ağ gecikme yüküne sahip olduğu bir CVCS’ye (Merkezî Versiyon Kontrol Sistemi) alışkınsanız; Git’in bu yönü size, Git’in Allah tarafından ilahi bir hız yeteneğiyle kutsadığını düşündürtecektir. Çünkü projenizin tüm tarihçesi tam olarak yerel diskinizdedir, ve çoğu işlem de neredeyse anında gerçekleşir.

Örneğin, projenin tarihçesine göz atmak için Git’in sunucuya girip, tarihçeye erişip size göstermesine gerek yoktur, onun yerine hızlıca sizin yerel veritabanınızdan okur. Bu da proje tarihçesini neredeyse anında görebildiğiniz anlamına gelir. Eğer bir dosyanın mevcut sürümü ve bir ay önceki sürümü arasındaki değişiklikleri görmek isterseniz, Git, uzaktaki bir sunucuya bu işlemi yapması için başvurmak ya da dosyanın eski versiyonunu uzaktaki sunucudan çekip yerel diskte hesaplamak yerine, dosyanın bir ay önceki haline hızlıca göz atıp yerel bir farklılık hesaplaması yapar.

Bu da çevrim dışı ya da VPN’sizseniz bile yapamayacağınız çok az şey olduğu anlamına geliyor. Eğer uçak ya da trenle seyahat ederken biraz çalışmak isterseniz, yerel ortamınızda çalışıp commitleyebilir (yerel kopyanıza) ve internet bağlantısı edindiğinizde de onu internete yükleyebilirsiniz. Eğer eve giderseniz ve VPN istemciniz düzgün bir şekilde çalışmazsa bile hâlâ yerel ortamınızda çalışabilirsiniz. Diğer çoğu sistemde ise bunları yapmak ya imkânsız ya da çok sancılıdır. Örneğin Perforce’de, eğer sunucuya bağlı değilseniz pek bir şey yapamazsınız. Subversion ve CVS’de ise dosyaları düzenleyebilir ama sunucuya commitleyemezsiniz (Çünkü sunucunuz çevrim dışıdır). Bu size şu an çok da önemli bir özellikmiş gibi gelmeyebilir ama Git’i öğrendikçe ve kullandıkça bunun ne kadar büyük bir fayda sağladığını bizzat göreceksiniz.

Git’in Entegrasyonu Vardır

Git’deki her şeyin saklanmadan önce sağlaması yapılır ve ondan sonra da o sağlamayla referans gösterilir. Bu da dosyaların ya da klasörlerin içeriğini Git’in haberi olmadan değiştirmenin imkânsız olduğu anlamına gelir. Bu işlev Git’in temelinde gömülü halde gelir ve Git felsefesinin ayrılmaz bir parçasıdır. Aktarım yaparken bilgi kaybetmezsiniz. Aynı şekilde Git farkına varmadan bir dosya da bozulmaz.

Git’in sağlama yapmak için kullandığı bu mekanizmanın adı SHA-1 özetidir. Bu, on altılık karakterlerden (0-9 ve a–f) oluşan ve Git’deki bir dosya veya dizin yapısının içeriğine göre hesaplanan 40 karakterlik bir karakter dizisidir. Bir SHA-1 özeti şuna benzer:

24b9da6552252987aa493b52f8696cd6d3b00373

Bu özet değerlerini Git’in çoğu yerinde göreceksiniz çünkü Git onu sık sık kullanır. Hatta Git, sunucusundaki her şeyi dosya isimleriyle değil, içeriklerinin özet değeriyle saklar.

Git Genel Olarak Sadece Veri Ekler

Git’de bir şeyler yaptığınızda neredeyse hepsi sadece Git’in veritabanına veri ekler. Sistemin geri alınamayan bir şey yapmasını veya verileri herhangi bir şekilde silmesini sağlamak zordur. Tüm VCS’lerde olduğu gibi, henüz işlemediğiniz değişiklikleri kaybedebilir veya karman çorman yapabilirsiniz, ancak Git’e bir anlık görünüm verdikten sonra (özellikle veritabanınızı düzenli olarak başka bir repoya yollarsanız) kaybetmek çok zordur.

Bu da Git’i kullanmayı keyifli kılar, çünkü ortalığı batırma tehlikesi olmadan istediğimiz gibi denemeler yapabileceğimizi biliriz. Git’in verilerini nasıl sakladığını ve kaybolmuş gibi görünen dosyaları nasıl geri alabileceğinizi daha detaylı bir şekilde öğrenmek için: Değişiklikleri Geri Alma

Üç Durum

Eğer Git’i öğrenme sürecinizin sorunsuz olmasını istiyorsanız, şimdi dikkatinizi verin. Git hakkında akılda tutulacak ana şey şudur, Git’in dosyalarınızın içinde bulunabileceği üç ana durum vardır: modified, staged, and committed:

  • Modified: dosyayı değiştirdiğinizi ama henüz veritabanına katkılamadığınızı (commit) gösterir.

  • Staged: değiştirilmiş bir dosyayı bir sonraki katkı pozunda (snapshot) işlenecek şekilde işaretlediğinizi gösterir.

  • Committed: dosyanın güvenli bir şekilde yerel veritabanınızda saklandığını gösterir.

Bu da bizi bir Git projesinin üç ana bölümüne getirir: the working tree (çalışma ağacı), the staging area (izleme alanı), ve Git klasörü.

çalışma ağacı, izleme alanı ve Git klasörü
Görsel 6. çalışma ağacı, izleme alanı ve Git klasörü.

Çalışma ağacı (working tree), checkout komutunun projenin bir sürümünde çalıştırılmasıdır. Bu dosyalar Git dizinindeki sıkıştırılmış veritabanından çıkarılır ve sizin modifiye edebilmeniz veya kullanabilmeniz için diskinize yerleştirilir.

İzleme alanı (staging area) bir dosyadır, genel olarak Git klasörünüzün içindedir ve bir sonraki katkıya hangi bilgilerin işleneceğini depolar. Git terminolojisindeki teknik adı ``index``dir, ama ``izleme alanı`` ifadesi de iş görür.

Git klasörü ise Git’in projenize ait tüm üstverileri ve nesne veritabanını sakladığı yerdir. Bu Git’in en önemli bölümüdür; aynı zamanda da başka bir repodan klon kopyaladığınızda kopyalanan şeyin de ta kendisidir.

Git’in iş akışı basitçe şöyledir:

  1. Çalışma ağacında dosyaları düzenlersiniz.

  2. ``git add …​`` komutuyla bir sonraki katkıya işlenecek olan değişiklikleri seçersiniz.

  3. ``git commit …​`` komutuyla bir katkı işlersiniz, izleme alanındaki (stage) dosyaların pozlaını (snapshot) çeker ve Git klasörünüzde kalıcı olarak saklarsınız.

Eğer bir dosyanın belli bir sürümü Git klasöründeyse, o dosya katkılanmış sayılır (commited). Eğer düzenlenmiş ve izleme alanına eklenmişse, izlem'e alınmıştır (staged). Eğer son denetlenmesinden sonra değiştirilmişse ama işlenmemişse, o halde değiştirilmiş durumdadır (modified). Git Temelleri bölümünde bu durumlar hakkında daha fazla şey öğrenecek ve bu durumların avantajını kullanmayı ya da izlem (stage) kısmını tamamen es geçmeyi öğreneceksiniz:

scroll-to-top