Git Nedir? Basit Bir Rehber ve Anlatım

Nisan 25, 2024
Git Nedir? Basit Bir Rehber ve Anlatım

Version kontrol sistemleri, yazılım geliştirme dünyasının olmazsa olmazıdır.

Git, kaynak kod yönetiminde dominant, dağıtık bir version kontrol sistemidir; değişikliklerin kronolojik bir zaman çizelgesi üzerindeki evrimini takip edebilir ve geri dönebilirsiniz.

Geliştiriciler arasındaki iş birliğini maksimum seviyeye çıkaran Git, her kullanıcının kendi yerel deposuna projenin tam bir kopyasını alması prensibiyle çalışır; böylece ağ bağlantısı olmadan bile çalışmalarınıza devam edebilirsiniz.

Git; esnek, güvenilir ve verimlidir.

Git’in Temelleri

Git, Linus Torvalds tarafından 2005 yılında geliştirilmiş bir açık kaynak kodlu dağıtık versiyon kontrol sistemidir. Yazılım projelerinin versiyon kontrolünü sağlar, çeşitli geliştirme süreçlerinde karşılaşılan karmaşıklıkları yönetmeye yardımcı olur.

Projeler üzerinde yapılan çalışmalar, “değişiklik setleri” veya “commit’ler” olarak bilinen yapılar içerisinde saklanır. Bu değişiklik setleri, projenin önceki haline göre yapılan yenilikleri, düzeltmeleri ya da herhangi bir değişikliği içerir ve projenin birçok versiyonunun tutulmasını mümkün kılar.

Her bir commit, Git’in kendine özgü SHA-1 hash algoritması ile benzersiz bir kimlik değerine (ID) sahip olur. Bu kimlik sayesinde, projedeki herhangi bir versiyona hızlı ve güvenli bir şekilde erişilebilir.

Git’in Tanımı ve Tarihçesi

Git, kaynak kodun yönetimi ve geliştirilmesi için tasarlanmış dağıtık bir versiyon kontrol sistemidir.

Linus Torvalds tarafından ilk olarak 2005 yılında Linux çekirdeği geliştirme sürecinde kullanılmak üzere yaratıldı.

Bu sistem, değişikliklerin takibi ve kayıtların korunmasında, iş birliği içerisinde çalışan geliştiriciler için oldukça değerlidir. Güçlü dallandırma özellikleri ile projelerin farklı versiyonlarının geliştirilmesine imkan tanır, bu sayede esnek ve etkin bir çalışma ortamı sağlar.

Kaynak kod değişikliklerinin izlenmesi, birleştirilmesi ve geri alınması işlemlerinde Git kritik bir rol oynar. İşlevselliği ve güvenilir yapısı ile günümüzde dünya çapında milyonlarca geliştirici tarafından kullanılmaktadır.

Git’in Ana Özellikleri

Dağıtık Versiyon Kontrol Sistemi (DVCS) olarak Git, merkezi bir sunucuya bağlı olmadan çalışır. Böylece her geliştiricinin yerelinde tam bir proje tarihi bulunur.

Hız ve Performans açısından Git, dosya değişiklikleri üzerinde çalışır ve bu işlemleri oldukça hızlı gerçekleştirir.

Veri bütünlüğü ve güvenliği, Git’in en güçlü yanlarındandır. Her değişiklik, SHA-256 hash fonksiyonu ile benzersiz olarak imzalanır ve böylelikle herhangi bir değişiklik veya bozulma kolayca tespit edilebilir.

Etkili Dal Yönetimi (Branching) ve Birleştirme (Merging) yetenekleri sayesinde Git, karmaşık proje yönetim süreçlerinde esneklik sağlar. Geliştiricilere bağımsız çalışma alanları sunarak koordinasyonu kolaylaştırır ve çakışmaları azaltır. Dallar, düşük maliyetle oluşturulup birleştirilebilir, böylece inovasyon ve denemeler teşvik edilirken riskler asgariye indirilir.

Git ve Diğer Versiyon Kontrol Sistemleri

Versiyon kontrol sistemleri, yazılım geliştirme sürecinde değişikliklerin yönetilmesini sağlar. Git ise bunlar arasında benzersiz özelliklere sahip bir sistemdir.

  1. Merkezi Sistemlere Karşı Dağıtık Yapı: Git, her kullanıcının kendi yerelinde tüm versiyon geçmişini saklayabilmesine olanak tanır, bu da merkezi versiyon kontrol sistemlerinden (Subversion gibi) daha fazla bağımsızlık ve güvenilirlik sağlar.
  2. Dallandırma ve Birleştirme Kolaylığı: Git’in dallandırma (branching) ve birleştirme (merging) işlemleri, diğer sistemlere göre daha hızlı ve etkili bir şekilde gerçekleştirilir, bu da proje yönetimini ve takım çalışmasını kolaylaştırır.
  3. Değişikliklerin Güvenliği: Her commit, SHA-256 hash algoritmasıyla imzalanır ve böylelikle değişikliklerin bütünlüğü korunmuş olur. Git bu özelliğiyle, diğer sistemlerin aksine güvenlik ve veri bütünlüğü konusunda üst düzey bir standarda sahip olur.
    Git, performans ve verimlilik açısından da diğer sistemlerden ayrılır. Hızlı değişiklik kaydı ve veri bütünlüğü, büyük projelerde dahi etkin bir iş akışı sunar.

Özetle, Git’in sağladığı esneklik, hız ve güvenlik, diğer versiyon kontrol sistemlerine göre daha üstün bir çalışma deneyimi sağlar, özellikle büyük ve dağıtık ekipler için. Bu özellikler, Git’i yazılım endüstrisinde öne çıkartan temel etmenlerdir.

Bu konuda daha fazla bilgi için Siber Güvenlik Temelleri Eğitimi sayfamızı ziyaret edebilirsiniz.

Git Kurulumu ve Başlangıç Adımları

Git’in kurulumu, işletim sisteminize göre değişiklik gösterse de, çoğunlukla sade bir süreci takip eder. Öncelikle resmi Git web sitesinden (https://git-scm.com), işletim sisteminize uygun olan kurulum dosyasını indirin. İndirme işlemi tamamlandıktan sonra, dosyayı çalıştırarak kurulum sihirbazının adımlarını takip ederek Git’i bilgisayarınıza yükleyin.

Kurulum tamamlandığında, Git’i doğru şekilde yapılandırmanız gerekecek. İlk adım olarak, Git Bash ya da terminalinizi açıp, kişisel Kimlik Bilgilerinizi (isim ve e-posta adresi) tanımlamanız önerilir. Bu kimlik bilgileri her ‘git commit’ işlemiyle birlikte kaydedilir ve değişikliklerin kim tarafından yapıldığını belirlemek için kullanılır. Kişisel ayarlarınızı ‘git config’ komutu ile yapılandırabilirsiniz. Yapılandırma işlemleri sonrasında basit bir ‘git init’ komutu ile mevcut dizininizde yeni bir Git deposu (repository) oluşturabilir ve versiyon kontrolüne başlayabilirsiniz.

Git’in Yüklenmesi

Git, modern yazılım geliştirme süreçlerinin vazgeçilmez bir parçasıdır.

Git yazılımı, Linux, Windows ve macOS gibi farklı işletim sistemlerinde kullanılabilir. Her platform için resmi Git web sitesi aracılığıyla sağlanan farklı kurulum dosyaları vardır ve bu dosyalar, sistem özelliklerinize en uygun şekilde Git’i yüklemenize olanak tanır. Kurulum için öncelikli adım, bu dosyaların indirilmesidir.

İşletim sisteminize uygun olan dosyayı indirdikten sonra yükleyiniz.

Windows için kurulum, ‘Git for Windows’ dosyasını çalıştırarak başlar. Bu dosya, kurulum için gerekli tüm adımları içeren bir sihirbaz sunar ve genellikle varsayılan seçeneklerin seçimi, çoğu kullanıcı için idealdir. Buna karşılık, Linux ve macOS platformlarında genellikle komut satırı aracılığıyla paket yöneticileri kullanılır.

Git’in kurulumdan sonra gerektiğinde konfigürasyon ayarlarının yapılması önemlidir. Yapılandırma süreci kişisel bilgi ve tercihlerinize göre değişiklik gösterebilir; dolayısıyla Git komutlarını kullandığınızda bu ayarlar sizin için otomatik olarak uygulanacaktır. Özellikle özelleştirme ihtiyaçlarınız ve güvenlik önlemleri düşünüldüğünde, doğru yapılandırma, verimli bir Git deneyimi için kritik bir adımdır.

İlk Git Depo Yaratma ve Ayarlar

Git’i başarılı bir şekilde kurduktan sonra, ilk depo veya repository’nizi yaratma işlemine geçebilirsiniz. Yeni bir proje için bu adım esastır.

Bir klasör oluşturarak veya mevcut bir projenin klasörüne giterek başlayabilirsiniz. Klasör içerisine terminal veya komut satırı aracılığıyla ‘git ini’ komutunu yazarak Git deposu yaratılır. Bu komut, ilgili klasörü bir Git deposu olarak başlatır ve gerekli ‘.git’ dizinini oluşturur.

Depo başlatıldıktan sonra, Git ayarlarınızı kişiselleştirmek için ‘git config’ komutunu kullanmalısınız. Bu komut ile kullanıcı adınızı ‘–global user.name “Adınız”’ ve e-posta adresinizi ‘–global user.email “[email protected]”’ şeklinde ayarlayabilirsiniz.

Ayrıca, güvenlik ve iş birliği açısından önemli olan SSH anahtarları ve GPG imza gibi özellikleri de bu aşamada yapılandırabilirsiniz. ‘git config’ komutu ile yapılan tüm ayarlamalar ‘.gitconfig’ dosyasında saklanır ve her yeni Git komutu işletildiğinde bu yapılandırmalar dikkate alınır.

Depo yaratma ve ayarlar tamamlandığında, ‘git status’ komutu ile deponuzun durumunu kontrol edebilirsiniz. Bu komut, staging area’da olan değişiklikleri, commit edilmeyi bekleyen dosyaları ve daha fazlasını görüntülemenizi sağlar.

‘git commit -m “açıklama mesajınız”’ ise staged olan değişiklikleri deponuza kalıcı olarak eklemenizi sağlayan komuttur. Bu komutla birlikte verilen mesaj (“açıklama mesajınız”), yapılan değişikliklerin bir açıklamasını içerir ve projenin versiyon tarihçesinde referans noktası oluşturur. Örneğin, ‘git commit -m “açıklama mesajınız”’ komutuyla değişiklikleri depoya ekleyebilirsiniz.

Kodlama ve projelerinizi daha verimli hale getirmek için Python Eğitimi hakkındaki yazımıza göz atabilirsiniz.

Commit, Push ve Pull İşlemleri

Commit, değişiklikleri depoya kaydetme sürecidir.

Projelerde bir veya birden fazla dosyada yapılan değişikliklerin, versiyon kontrol sistemi üzerinde kalıcı bir kayıt oluşturulmasını sağlamak amacıyla, ‘git commit’ komutu kullanılmaktadır. Bu işlem, değişikliklerin açıklayıcı mesajlarla belgelenmesi ve deponuzun tarihçesinde bir nokta olarak kaydedilmesi anlamına gelir. İyi organize edilmiş commit mesajları, geliştirme takımının çalışmalarını rasyonelleştirmek adına hayati önem taşır.

‘git push’ komutu, yereldeki commit kayıtlarını, genellikle merkezi bir sunucuda bulunan uzak deponuza aktarmanızı sağlar. Bu işlem, kod değişikliklerinizin takım arkadaşlarınız veya işbirlikçileriniz tarafından erişilebilir hale gelmesi için gereklidir. Push işlemi, projenizi paylaşımda bulunacağınız ve işbirliği yapacağınız bir alan olan uzak depoya entegre etmekte kritik role sahiptir.

‘git pull’ komutu, uzak depoda yapılan değişikliklerin, yerel deponuza entegre edilmesini sağlayan bir işlemdir. Bu komut, uzak depo ile yerel deponun senkronize edilmesi ve son değişikliklerin çekilmesi için kullanılır. Pull işlemi özellikle takım çalışmasında, üyelerin en güncel kod sürümü ile çalışmalarını sağlamak için büyük önem arz eder.

Branch Oluşturma ve Yönetimi

Branch oluşturmak, projenizde farklı özellikler geliştirirken veya hataları düzeltirken ana kod tabanının dışında çalışmanıza izin verir. ‘git branch’ komutu ile yeni bir dal (branch) oluşturulur ve bu, kod tabanınızın bağımsız bir kopyasını temsil eder.

Dal oluşturduktan sonra, ‘git checkout’ komutu kullanılarak bu yeni dala geçiş yapılır veya ‘git switch’ komutu ile yeni Git versiyonlarında aynı işlem gerçekleştirilebilir. Çalışmalarınızı bu izole edilmiş alan üzerinde sürdürmek, mevcut ana kod (master veya main) ile çatışmaları önler ve test etmenize olanak tanır. Dalların birleştirilmesi (merge) veya çatışmaların çözülmesi (rebase) için git verimli araçlar sunar.

Dallar arasında geçiş yapmanın yanı sıra, ‘git merge’ komutu ile farklı dallardaki işleri tek bir kod tabanında birleştirebilirsiniz. Bu yöntem, bir feature’ın geliştirilmesi tamamlandığında veya bir hatanın düzeltilmesi sonrasında kullanılır. Dal birleştirme işlemi, genellikle ana dal (master/main) ile bir geliştirme dalının birleştirilmesi şeklinde yapılır ve bu kodun ana liniyaya dahil edilmesini sağlar.

Son olarak, branch yönetimi sırasında ‘git branch -d’ komutu ile kullanılmayan veya amaçlarına ulaşmış dalları silme işlemini gerçekleştirebilirsiniz. Branchlerin silinmesi, gereksiz dalların repository’den temizlenmesi ve dağınıklığın önlenmesi açısından önemlidir. Ayrıca, ‘git branch -l’ komutu ile mevcut dalların listesini görüntüleyebilir ve dallar arasındaki ilişkileri, yaşamlarını ve geçmişlerini kolayca takip edebilirsiniz.

Merge ve Rebase Nedir?

Merge, Git’in en temel işlemlerinden biridir, dallardaki değişiklikleri tek bir tarih çizelgesinde birleştirmeyi amaçlar. Bu süreçte, birden fazla dalda gerçekleşen değişiklikler ana dal (master/main) üzerinde kesişir ve tek bir commit altında toplanır. Böylece, farklı dallarda paralel geliştirilen özellikler veya düzeltmeler, ana kod tabanı ile entegre edilebilir.

Rebase işlemi ise, bir dalın commit geçmişini başka bir dalın üzerine ‘yeniden yazmayı’ hedefler. Yani, bir dalda yapılmış olan değişiklikleri alıp, hedef dalın en son commit’i üzerinde sıralayarak uygular. Bu süreç, projenin commit ağacını daha düzgün ve lineer tutmaya yarar. Rebase, genellikle dalın başlangıç noktasını güncellemek ve geçmişi daha anlaşılır bir seviyede düzenlemek için kullanılır.

Merge işleminin önemli bir özelliği, commit geçmişinde ana dalların birleştirildiği noktaları korumasıdır. Bu, dalların ne zaman ve nasıl birleştirildiğini açıkça gösterir ve takımların kod tabanının evrimini takip etmesini kolaylaştırır. Ancak, bu durum zamanla karmaşık bir commit ağacı oluşturabilir, özellikle çok miktarda dallanma ve birleştirme varsa.

Rebase işlemi ise, commit’lerin doğrusal bir sıralama elde etmesine odaklanır, böylece geçmiş daha okunabilir hale gelir. Bu, özellikle büyük ekiplerde veya uzun süredir devam eden projelerde takdir edilen bir özelliktir. Ancak, rebase kullanılırken dikkatli olmak gerekir; zira rebase sonrası oluşturulan yeni commit’ler, orijinal dallardan oluşanları değiştirebilir, bu da paylaşılan dallarda karmaşaya sebep olabilir ve ekip üyelerinin iş akışını sekteye uğratabilir.

Yaygın Kullanım Senaryoları ve İpuçları

Git, yazılım geliştirme sürecinin ayrılmaz bir parçası olarak çeşitli kullanım senaryolarına hizmet eder. Kaynak kod takibi ve versiyon kontrolü için başvurulan bu sistem, karmaşık yazılım projelerinin yönetimini kolaylaştırır. Takım çalışmasını destekleyen bu yapıda, branch oluşturma ve merge/rebase gibi işlemler sayesinde, birden fazla kişinin aynı kod üzerinde eş zamanlı olarak çalışabilmesine olanak tanınır. Kaliteli bir iş akışı için, düzenli commit yapmak ve açıklayıcı mesajlar bırakmak önemlidir; bu sayede değişikliklerin niyeti ve kapsamı net bir şekilde belgelenmiş olur. Ayrıca, pull request kullanımı, kod incelemelerini teşvik eder ve hata potansiyelini azaltır. Git hook‘ları ile otomatikleştirilmiş scriptler kullanmak, süreçlerin verimliliğini artırmaya ve tutarlılık sağlamaya yardımcı olur. Özetle, Git kullanırken belirli pratiklere ve standartlara bağlı kalmak, projenin sağlığı ve geliştirme ekibinin senkronizasyonu açısından ciddi yararlar sağlar.

Günlük Çalışma Akışında Git

Git’in günlük kullanımı, disiplin ve düzen gerektirir.

Yazılım geliştirme ekipleri, geliştirmekte oldukları projelerinin kaynak kodları üzerinde sürekli çalıştıkları için, değişikliklerinin kaydedilmesi ve versionlanması kritik bir öneme sahiptir. Bu bağlamda, Git; kod değişikliklerini takip etme, kayıt altına alma ve bu değişikliklerin merkezi repoya entegrasyonunu sağlayan işlevsel araçlardan biridir. Özellikle, çok sayıda geliştiricinin aynı kaynak kodları üzerinde çalıştığı durumlarda, çakışmaların yönetimi ve çözümlenmesi Git aracılığıyla etkin bir şekilde gerçekleştirilir.

Çalışmalarınızın esnekliğini artırın.

Geliştirici bir değişikliği tamamladığında commit yapar; bu işlem, kod üzerinde yapılan değişiklikleri tanımlayan bir anlık kopyadır. Büyük projelerde, bu commit’ler genellikle özel dallar (branches) üzerinde gerçekleşir ve sonrasında projenin ana dalıyla (master veya main) birleştirilir (merge). Bu iş akışı, kodun stabil kalmasını garanti altına alırken, aynı zamanda yeniliklerin veya düzeltmelerin sürekli ve kontrol altında projeye dahil edilmesine olanak tanır.

Verimliliği ve kaliteyi maksimize edin.

Özetle, Git, geliştirme sürecinin her aşamasında etkin bir kontrol sağlayarak, yazılım kalitesini ve ekip içi uyumu artırır. Buna ek olarak, Git’in sağladığı pull request mekanizması, kodun gözden geçirilmesi için bir fırsat sunar ve muhtemel hataların erken aşamada tespit edilmesine yardımcı olur. 2024 yılı itibarıyla, bu sistem, sektörde neredeyse vazgeçilmez bir araç haline gelmiştir ve yazılım geliştirme ekiplerinin rutin çalışma akışlarının temel taşlarından biridir.

Geri Alma ve Hata Düzeltmeleri

Git’in en güçlü özelliklerinden biri, yapılan değişikliklerin kolayca geri alınabilmesine olanak tanımasıdır. Checkout, revert, ve reset komutları ile önceki bir duruma dönüş yapabilir ve hataları düzeltmek için eski sürümlere geri dönebilirsiniz.

Özellikle büyük projelerde, farklı dallarda yapılan çalışmaların birleştirilmesi (merge) esnasında karşılaşılan çakışmalar (conflicts) ve hatalar gelişimin doğal bir parçasıdır. Git, bu hataların tespit edilip düzeltilmesi için gerekli araçları sağlar. Diff kullanarak yapılan değişiklikleri karşılaştırabilir, stash ile değişiklikleri geçici olarak saklayabilir ve branch mekanizması sayesinde farklı sürüm denemeleri yapabilirsiniz.

Aksaklıklarla karşılaştığınızda, git log komutu ile tüm commit geçmişini görüntüleyebilir ve herhangi bir commit noktasına geri dönme şansına sahip olursunuz. Bu, kod tabanındaki hatalı değişiklikleri saptamanızı ve onları kaldırmanızı sağlar. Ayrıca, checkout komutu ile belirli dosyaları veya dizinleri önceki durumlarına geri getirebilirsiniz.

En kritik anlarda dahi, Git sizi güvende tutar. Yapılan herhangi bir hata, öğrenme fırsatıdır ve Git, bu öğrenme sürecini destekler. Belirli bir hata düzeltilene dek eski sürüme dönmek, ekiplerin ilerlemesini kesintiye uğratmadan düzeltmeler yapabilmesini sağlar. İleri derecede Git komutları, hata düzeltme sürecini optimize etmek ve kod teslimlerinin kalitesini artırmak için hayati önem taşır.

Sistem ve ağ hatalarını düzeltmek için Linux Dosya Sistemi Analizi Kılavuzu başlıklı yazımıza bakabilirsiniz.

İş birliği için Git Kullanımı

Git, ekip içinde kod paylaşımını ve iş birliğini kolaylaştıran merkezi olmayan bir versiyon kontrol sistemidir. Kullanımı, projenin farklı evrelerinde ortak çalışmayı destekler ve eşzamanlı geliştirmeyi mümkün kılar.

Merkezi depoları (repository) kullanarak, ekip üyeleri kendi işlerini paralel şekilde yürütebilirler. Böylece, her birey kendi branşında özgürce değişiklik yapabilir.

Yüksek kalitede yazılım geliştirmenin temel taşlarından biri, değişikliklerin sürekli olarak gözden geçirilmesi ve entegre edilmesidir. Git, pull request adı verilen mekanizma ile değişiklik önerilerinin incelenmesini ve kod bazındaki birleştirmelerin yönetilmesini sağlar; bu da kalite kontrolü ve kod incelemesi (code review) süreçlerini merkezileştirir.

Uygulama yaşam döngüsünün kritik aşamalarında ve değişen iş yüklerinde, Git’in esnek yapılandırması ekiplerin iş akışlarını etkin bir şekilde sürdürmelerini destekler. Feature branching, tasarım desenleri ve continuous integration gibi ileri seviye uygulamalar, kod itegrasyonunu düzenli bir şekilde yürütmek için kullanılır. Git, bu süreçlerde dinamik olarak adaptasyon sağlayarak ekip çalışmasını güçlendirir ve sürekli teslimat (continuous delivery) prensibini uygulamaya imkan tanır.

Git hakkında daha fazla bilgi edinmek ve projelerinizi Github gibi platformlarda yönetmek için buraya tıklayabilirsiniz.

Git ile İlgili Sıkça Sorulan Sorular

Git nedir?

Git, bir versiyon kontrol sistemidir. Git, yazılım geliştirme sürecinde kullanılan bir araçtır. Bu araç, projenin tüm değişikliklerini takip etmeye ve geri almayı sağlar.

Git branch ne işe yarar?

Git branch, Git’in geliştirme sürecini kolaylaştıran ve organize eden bir özelliğidir. Bir Git deposunda birden fazla “branch” (dallanma) oluşturarak farklı bölümlerde çalışmayı mümkün kılar.

Git ile GitHub farkı nedir?

Git ile GitHub arasında bazı önemli farklar vardır. Git, dağıtık bir versiyon kontrol sistemi olarak kullanılırken, GitHub bir bulut tabanlı bir işbirliği platformudur.

Faruk Ulutaş

Faruk Ulutaş, siber güvenlik alanında derinlemesine bir uzmanlıkla donanmış bir bilgisayar mühendisidir. Kapsamlı programlama diline hakimiyeti ve geniş tecrübesi ile çeşitli siber güvenlik projelerinde yer alıp başarılı sonuçlar elde etmiştir. Çeşitli hackathon, kodlama maratonları ve Capture The Flag (CTF) yarışmalarında, hem yurt içinde hem de yurt dışında, gösterdiği üstün performansla sıkça ön plana çıkmıştır. Ayrıca, küresel ölçekte faaliyet gösteren bazı büyük şirketlerin siber güvenlik sistemlerinde kritik güvenlik açıklıklarını başarıyla belirlemiştir. Üstlendiği projelerde kullanıcı güvenliğini sağlamak ve siber saldırılara karşı koymak için çözüm üretme konusunda büyük bir yetenek sergilemiştir. Ulutaş, CyberSkillsHub üzerindeki rolü ile birlikte, öğrencilere kendi deneyimlerini ve bilgilerini aktararak siber güvenlik konusunda yeteneklerini geliştirmelerine yardımcı olmayı hedeflemektedir.