İletişim

Git Nedir?

Kısa tanım

Git, dosyalarda yapılan değişiklikleri commit adı verilen anlık görüntüler halinde kaydeden, dağıtık ve açık kaynaklı bir sürüm kontrol sistemidir. 2005'te Linus Torvalds ve Linux çekirdeği topluluğu tarafından geliştirildi. Her kopyada projenin tüm geçmişi bulunur; böylece kimin neyi ne zaman ve neden değiştirdiği görülebilir, hatalı bir değişiklik geri alınabilir ve bir ekip aynı kod üzerinde paralel çalışabilir.

Diğer adları: sürüm kontrol sistemi, version control, versiyon kontrolü, commit, git commit

Git'te değişikliklerin çalışma alanından hazırlık alanına, oradan yerel depoya ve uzak depoya add, commit ve push ile taşındığı katmanlar

Sürüm kontrolü hangi sorunu çözer?

Sürüm kontrolü olmayan bir projede tanıdık tablo şudur: site_son.zip, site_son_v2.zip, ortak klasörde birbirinin değişikliğini ezen iki geliştirici ve “bu satırı kim, neden değiştirdi?” sorusuna kimsenin cevap verememesi. Git bu sorunları üç şekilde çözer: her değişikliği kimin yaptığı ve açıklamasıyla birlikte saklar, birden fazla kişinin aynı anda ayrı hatlarda çalışmasına izin verir ve projeyi geçmişteki herhangi bir ana döndürebilir.

Git, 2005'te Linux çekirdeği geliştiricilerinin kullandığı ticari araçla yolları ayrılınca Linus Torvalds ve çekirdek topluluğu tarafından yazıldı. Hız, dağıtık çalışma ve binlerce paralel dalı kaldırabilme, baştan beri tasarım hedefleriydi. Bugün yazılım ekiplerinin ezici çoğunluğunun varsayılan aracıdır.

Commit: Git'in yapı taşı

Commit, projenin belirli bir andaki halinin kaydıdır. Her commit; yazarını, tarihini, bir açıklama mesajını ve kendinden önceki commit'e (parent) bir işaretçiyi içerir ve içeriğinden üretilen bir hash değeriyle tanımlanır. Bu hash zinciri sayesinde geçmişte bir şeyin sessizce değiştirilmesi fark edilir.

Git'te dosyalar üç alandan geçer: üzerinde çalıştığınız çalışma dizini, bir sonraki commit'e girecek değişikliklerin toplandığı staging alanı (index) ve kalıcı geçmişin tutulduğu repository.

git status                      # neler değişti?
git add src/iletisim-formu.ts   # değişikliği staging alanına al
git commit -m "İletişim formuna telefon doğrulaması ekle"
git log --oneline -3            # son üç commit

İyi bir commit tek bir mantıksal değişikliği içerir ve mesajı “ne” kadar “neden” sorusunu da cevaplar. “Düzeltmeler” başlıklı, otuz dosyaya dokunan bir commit, aylar sonra bir hatanın kaynağını ararken neredeyse hiçbir işe yaramaz.

Dağıtık olmak ne anlama gelir?

Eski merkezi sistemlerde geçmiş tek bir sunucuda dururdu. Git'te ise her klon, tüm commit geçmişini içeren tam bir kopyadır. Geliştirici internete bağlı olmadan commit atabilir, geçmişi inceleyebilir, dal açabilir; ekiple paylaşmak istediğinde değişikliklerini git push ile uzak repository'ye gönderir, başkalarınınkini git pull veya git fetch ile alır.

Sık karıştırılan bir nokta: Git ile GitHub aynı şey değildir. Git, bilgisayarınızda çalışan açık kaynaklı programdır. GitHub, GitLab ve Bitbucket ise Git repository'lerini barındıran, üzerine kod incelemesi, iş takibi ve otomasyon ekleyen hizmetlerdir.

Ekip iş akışındaki yeri

Gündelik akışta her iş, ana koddan ayrılan bir branch'te yapılır, bir pull request ile incelemeye açılır ve onaylanınca ana dala birleştirilir. Ana dala yapılan her push, CI/CD hattını tetikleyerek testleri çalıştırabilir ve yeni sürümü yayına alabilir. Sorunlu bir sürüm çıktığında git revert ile ilgili commit'in tersini içeren yeni bir commit oluşturmak, temiz bir rollback yolunun parçasıdır; etiketler (tag) de hangi kodun hangi sürüm olarak yayınlandığını işaretler.

Repository'ye girmemesi gerekenler

  • Gizli bilgiler: API anahtarları, veritabanı parolaları ve .env dosyaları. Bunlar ortam değişkenleri veya bir gizli bilgi yöneticisi aracılığıyla verilmelidir.
  • Yeniden üretilebilen dosyalar: node_modules, derleme çıktıları, önbellek klasörleri. .gitignore dosyası bunları dışarıda tutar.
  • Büyük ikili dosyalar: Video ve büyük tasarım dosyaları geçmişi şişirir; gerekiyorsa Git LFS gibi bir eklentiyle ayrı tutulur.

Yanlışlıkla commit edilmiş bir parolayı sonraki bir commit'te silmek yetmez; değer geçmişte ve tüm klonlarda durmaya devam eder. Doğru tepki, o parolayı veya anahtarı derhal geçersiz kılıp yenisini üretmektir.

İlgili terimler

← Sözlüğe dön