Geliştirici topluluğundaki milyonlardan biriyseniz, muhtemelen sürüm kontrolü kavramını duymuşsunuzdur. Dosyalarınızı, belgelerinizi ve projenizle ilgili diğer bilgi topluluğunu hızlı bir şekilde taşımanızı sağlayan, işinize dikkat etmenize yardımcı olan güçlü bir araç veya sistemdir. Ve piyasada bu tür işler için hem özel hem de açık kaynaklı çok sayıda araç var. Git, bugün dünyanın en popüler ve yaygın olarak kullanılan sürüm kontrol sistemlerinden biridir ve şaşırtıcı sayıda proje sürüm kontrolü için Git'e güvenmektedir. Git, yazılım geliştirme sırasında kaynak kodundaki değişiklikleri izlemek için tasarlanmış ücretsiz ve açık kaynaklı dağıtılmış bir sürüm kontrol sistemidir.
Git projesi, kuruluşundan bu yana proje ile ilgili tüm bilgiler dahil olmak üzere, proje ile ilgili tüm bilgilerin saklandığı depo adı verilen bir veri yapısı ile temsil edilir. Zaman içinde dosyalarda yapılan tüm değişiklikleri izler ve projeye devam ederken bir zaman çizelgesi oluşturur. Buna karşılık bir depo, taahhütlerin adı verilen bir dizi proje içeriğinin (dosya ve havuzların toplanması) oluşan anlık görüntülerinden oluşur. Projenizin gelişimini dünyayla paylaşmak istediğinizde, projeyi yazma erişimine sahip olduğunuz bir uzaktan kumandaya doğru itmeniz gerekir. Yerel şubeleriniz uzak depolarla otomatik olarak senkronize edilmez - paylaşmak istediğiniz dalları açıkça itmeniz gerekir.
Git, verilerini daha çok bir mini dosya sistemi veya commits adlı bir projenin sürümleri gibi bir dizi anlık görüntü gibi değerlendirir. Projenizin durumunu her taahhüt ettiğinizde veya her kaydettiğinizde, Git temelde şu anda dosyalarınızın nasıl göründüğünün bir anlık görüntüsünü alır ve bu anlık görüntüye bir referans depolar. Bir taahhüt nesnesi, depoda yapılan her değişiklik için yazar, değiştirici, teslim tarihi ve günlük mesajı dahil olmak üzere meta verileri tutar. Her bir kesinleştirme, kesinliğin gerçekleştirildiği anda havuzun durumunu yakalayan bir ağaç nesnesine işaret eder, hepsi de tam bir anlık görüntüde. Kodda yol boyunca değişiklik yaparken, bir avuç taahhüt yaratırsınız - yaptığınız her değişiklik için ayrı bir taahhüt. Git her bir işleme, yaptığınız değişikliklerin ne, ne zaman ve kimin olduğunu izleyen benzersiz bir kimlik atar.
Her geliştiricinin değişikliklerini izlemek için kendi özel deposu vardır. Değişikliklerinizi yerel olarak yaparsınız ve diğer geliştiricilerle paylaşmaya hazır olduğunuzda, bunları hepinizin paylaştığı depoya geri itersiniz. Taahhüt, yaptığınız değişiklikleri yalnızca yerel depoya kaydeder, uzak depoya kaydetmez. Taahhütleriniz otomatik olarak uzak depoyla senkronize edilmez - paylaşmak istediğiniz taahhütleri açıkça itmeniz gerekir. Push komutunu kullandığınızda, değişikliklerinizi yukarı akış deposuna uygularsınız. Her açık kaynaklı projenin değişiklikleri kabul etmek için kendi yolu vardır. Bazı projeler, yalnızca bir kişinin ana depodaki değişiklikleri gönderebildiği tam olarak dağıtılmış bir sürüm kontrol sistemi kullanırken, tüm geliştiricilerin paylaşılan bir depoya gönderebileceği paylaşılan bir havuz modeli vardır..
- İtme işlendikten sonra gelir. Git kesinleştirme işlemi, her bir kesinleştirme noktasıyla birlikte depodaki değişiklikleri kaydeder ve her bir tam anlık görüntüde, işlemin gerçekleştirildiği anda deponun durumunu yakalayan bir ağaç nesnesine işaret eder. Ancak taahhütler değişiklikleri sadece yerel depoya kaydeder, uzak depoya kaydetmez. Git push taahhütlü değişikliklerinizi günceller ve tüm geliştiricilerin bunlara erişebileceği uzak depoya göndermenizi sağlar. Push komutunu kullandığınızda, yukarı akış deposundaki değişikliklerinizi günceller.
- Git komutları yereldir, yalnızca işlemlerin gerçekte gerçekleştiği makineye kaydedilirler. “Git kesinleştirme” komutu Git'e yerel depodaki değişikliklerinizi kaydetmesini bildirmek için kullanılır ve özellikle Git'e “git kesinleştirme” komutunu kullanmadan önce bir işleme dahil etmek istediğiniz değişiklikleri bildirmeniz gerekir. Yerel depodaki taahhütleri uzak bir depoya göndermek için “git push” komutunu kullanabilirsiniz. “Push” komutu uzak sunucudaki yeni yerel taahhütleri günceller. Push iki argüman alır: uzak ad (kaynak) ve dal adı (ana).
Özetle, taahhüt Git'teki temel değişim birimidir. Diğer merkezi sürüm kontrol modellerinden farklı olarak Git, verilerini daha çok taahhüt adı verilen bir dizi anlık görüntü gibi görür. Proje ile ilgili tüm bilgiler ve içerik zaman içinde geliştikçe bu depo durumunun diğer kayıtlı durumlarla ilişkisi ile birlikte tüm depo içeriğinin anlık görüntüsü gibidirler. Bir taahhüt nesnesi, depoda yapılan her değişiklik için yazar, değiştirici, teslim tarihi ve günlük mesajı dahil olmak üzere meta verileri tutar. Ancak taahhüt, değişiklikleri yalnızca yerel depoya kaydeder, uzak depoya kaydetmez. Git push taahhütlü değişikliklerinizi günceller ve tüm geliştiricilerin bunlara erişebileceği uzak depoya göndermenizi sağlar.