Git Nedir? GitHub ve GitLab Nedir, Farkları Ne?
Git'in nasıl çalıştığını, temel komutlarını, GitHub ile GitLab farkını, branch stratejilerini, repository güvenliğini ve GitOps'u anlattık.

Kısa cevap: Git, bir projedeki dosyaların bütün değişiklik geçmişini tutan ücretsiz, açık kaynak ve dağıtık bir sürüm kontrol sistemidir. Her geliştiricinin bilgisayarında projenin geçmişiyle birlikte tam bir kopyası (repository) bulunur; değişiklikler commit olarak kaydedilir, paralel işler branch'lerde yürür ve merge ile birleşir. GitHub ve GitLab, Git repository'lerini barındıran ve üstüne pull request (GitLab'da merge request), kod incelemesi ve CI/CD ekleyen platformlardır. İkisinin de kendi sunucunuza kurulabilen sürümü var: GitHub Enterprise Server ve GitLab Self-Managed.
Git nedir?
git-scm.com'a göre Git, küçükten çok büyüğe projeleri hızlı ve verimli yönetmek için tasarlanmış, ücretsiz ve açık kaynak, dağıtık bir sürüm kontrol sistemidir. Pro Git kitabının tanımıyla sürüm kontrolü, dosyalardaki değişiklikleri zaman içinde kaydedip belirli bir sürüme sonradan dönmeyi sağlar. Subversion gibi merkezî sistemlerde sunucu tek hata noktasıdır; Git'te ise her kopya (clone) projenin bütün geçmişini taşır.
Git veriyi farklar olarak değil, anlık görüntüler (snapshot) olarak tutar ve işlemlerin çoğunu ağa çıkmadan yapar. Her şey saklanmadan önce SHA-1 ile özetlenir ve bu 40 karakterlik değerle (checksum) anılır. Projenin planına göre Git 3.0'da yeni repository'lerin varsayılan hash'i SHA-256, varsayılan branch adı main olacak; sürümün henüz tarihi yok.
Git nasıl doğdu?
Git'in tarihçesine göre Linux çekirdeği projesi 2002'den beri BitKeeper adlı kapalı kaynak bir dağıtık sürüm kontrol sistemi kullanıyordu. 2005'te çekirdeği geliştiren topluluk ile BitKeeper'ı geliştiren şirket arasındaki ilişki bozuldu ve aracın ücretsiz kullanım hakkı kaldırıldı. Bunun üzerine başta Linus Torvalds olmak üzere Linux geliştirici topluluğu kendi aracını yazdı. Hedefler hız, basit tasarım, binlerce paralel branch'i destekleyen doğrusal olmayan geliştirme, tam dağıtık yapı ve Linux çekirdeği büyüklüğündeki projeleri verimli yönetebilmekti.
Temel kavramlar: repository, commit, branch, merge
- Repository (depo): Projenin dosyaları ve bütün geçmişi; meta veri ve nesne veritabanı .git dizininde durur.
- Commit: Değişikliğin kaydı. Dosya önce değiştirilir (modified),
git addile sonraki commit'e işaretlenir (staged), commit'le yerel veritabanına yazılır (committed). - Branch: Pro Git'e göre bir commit'i gösteren hafif ve taşınabilir bir işaretçi; oluşturmak bir dosyaya 41 bayt yazmak kadar ucuz.
- Merge: İki ya da daha fazla geliştirme geçmişini birleştirir. Mevcut branch, birleştirilen commit'in atasıysa Git ayrı bir merge commit'i oluşturmadan işaretçiyi ileri alır (fast-forward).
- Rebase: Commit'leri başka bir başlangıç noktasının üzerine yeniden uygular ve daha temiz bir geçmiş bırakır. Pro Git'in kuralına göre başkalarının üzerine iş kurmuş olabileceği, repository dışına çıkmış commit'ler rebase edilmez.
- Remote: Ağda barındırılan proje kopyası; klonlanan sunucunun varsayılan adı origin.
- Pull request ve merge request: GitHub'a göre pull request, kod değişikliklerini projeye birleştirme önerisidir; değişiklik birleştirilmeden önce tartışılır ve incelenir. GitLab'daki karşılığı merge request.
Temel Git komutları
Bir projede günlük akış şöyle ilerler:
git init # yeni proje: boş repository oluşturur
git clone https://git.example.com/ornek/proje.git # projeyi kopyalar
git switch -c ozellik/arama # yeni branch açıp ona geçer
git add arama.py # değişikliği staging area'ya alır
git commit -m "Arama kutusu eklendi"
git push -u origin ozellik/arama # branch'i remote'a gönderir
git switch main
git pull # main'in son hâlini alır
git merge ozellik/arama # branch'teki işi main'e birleştirirgit push yerel commit'leri remote repository'ye gönderir. git pull ise önce git fetch ile değişiklikleri indirir, sonra mevcut branch'e merge ya da rebase eder. git branch branch'leri listeler, oluşturur ve siler; git switch branch değiştirir.
GitHub ve GitLab nedir, farkları ne?
Git bir araç, GitHub ve GitLab ise Git repository'lerini barındıran platformlar:
- GitHub: Belgelerine göre açık kaynak Git'in üzerine kurulu; repository'leri bulutta barındırır, issue ile işin planlanmasını ve pull request ile kod incelemesini destekler. 4 Haziran 2018'de duyurulan satın almayla Microsoft'a geçti. GitHub Enterprise Server, GitHub'ın kendi sunucunuzda çalışan sürümü: şirket içindeki sanallaştırma platformuna ya da AWS, Google Cloud veya Azure'a kurulur, güncel tutmak da yöneticiye düşer.
- GitLab: Belgeleri Git'in yanında planlama, CI/CD, uygulama güvenliği, dağıtım ve izlemeyi kapsıyor. Community Edition MIT lisanslı, Enterprise Edition ise GitLab'ın daha kısıtlayıcı kendi lisansıyla geliyor. Üç seçeneği var: SaaS olarak GitLab.com, kendi kurup işlettiğiniz GitLab Self-Managed ve tek kiracılı GitLab Dedicated.
Adlandırma da farklı: GitHub'daki pull request GitLab'da merge request, GitHub Actions'ın karşılığı GitLab CI/CD. Stack Overflow'un 29 Mayıs-23 Haziran 2025'te yaptığı Geliştirici Anketi'nde iş birliği ve kod dokümantasyonu araçları sorusunu yanıtlayan 30.065 kişinin %81,1'i GitHub'ı, %35,6'sı GitLab'ı geçen yıl düzenli kullandığını söyledi.
Branch stratejileri: trunk-based development ve Git Flow
DORA'ya göre trunk-based development'ta her geliştirici işini küçük parçalara böler ve en az günde bir kez ana branch'e (trunk) birleştirir. Araştırmaya dayanan ölçütler şunlar: en fazla üç aktif branch, en az günde bir merge, kod dondurma ve entegrasyon evresi olmaması. Bu pratikleri izleyen ekipler daha yüksek yazılım teslim ve operasyon performansına ulaşıyor.
Vincent Driessen'in 5 Ocak 2010'da yayımladığı Git Flow ise master ve develop ana branch'leri ile feature, release ve hotfix branch'lerine dayanır. Driessen'in 5 Mart 2020'de eklediği notta sürekli teslimat yapan ekiplere GitHub flow gibi çok daha basit bir akış öneriliyor. Git Flow ise ona göre açıkça sürümlenen ve sahada birden fazla sürümü desteklenen yazılımlarda hâlâ uygun olabilir.
Git güvenliği: sızan parolalar, imzalı commit ve korumalı branch
Commit edilen bir parola, sonraki commit'te silinse de geçmişte kalır; Pro Git'e göre Git'teki işlemlerin neredeyse hepsi yalnızca veri ekler. GitHub'a göre ilk adım o sırrı iptal etmek ya da değiştirmek; geçmiş yeniden yazılsa bile başkalarının klonlarındaki kopya silinemez. Sızıntıyı yakalayan araçlar şunlar:
- GitHub secret scanning: Bütün branch'lerdeki Git geçmişini API anahtarı, parola ve token için tarar; public repository'lerde ücretsiz çalışır. Push protection sırrın repository'ye ulaşmasını baştan engeller.
- GitLab secret detection: Secret push protection push sırasında commit'leri tarar ve sır bulursa push'u durdurur; pipeline secret detection CI/CD pipeline'ında çalışır.
NIST'in Şubat 2022 tarihli SSDF'inde (SP 800-218, sürüm 1.1) PS.1 uygulaması, kodu yetkisiz erişime ve kurcalamaya karşı korumayı istiyor. Örnekleri arasında kodu en az yetkiyle erişilen bir repository'de tutmak (IAM yazımız), her değişikliği bir hesaba bağlamak, commit imzalamak ve değişiklikleri kod sahibinin onaylaması var. Git'te git commit -S commit'i imzalar; GitHub da GPG, SSH ya da S/MIME ile imzalanmış commit'leri "Verified" diye işaretler. Korumalı branch kuralları birleştirmeden önce onaylı inceleme, başarılı durum kontrolü ve imzalı commit isteyebilir; GitLab'da varsayılan branch baştan korumalıdır.
Git, CI/CD ve GitOps
Git'teki bir push ya da pull request, otomasyonu başlatan olay olabilir. GitHub Actions, commit ya da tag push edildiğinde veya bir pull request'te hareket olduğunda workflow çalıştırabilir; workflow'lar repository'deki YAML dosyalarıyla tanımlanır. GitLab'da pipeline'lar .gitlab-ci.yml dosyasında yazılır ve branch'e push, merge request ya da zamanlamayla başlar. Pipeline aşamalarını CI/CD yazımızda, DevOps yaklaşımını DevOps yazımızda anlattık.
OpenGitOps'un 1.0.0 sürümlü ilkeleri aynı fikri sistemlerin işletimine taşır: istenen durum bildirimsel (declarative) yazılır, değiştirilemez ve sürümlü biçimde bütün geçmişiyle saklanır. Yazılım ajanları bu tanımı kaynaktan otomatik çeker, gerçek durumu sürekli izleyip istenen duruma getirmeye çalışır. IaC ve sürüklenme (drift) sorununu Terraform ve Ansible yazımızda, istenen durum döngüsünü Kubernetes yazımızda anlattık. Pipeline kurulumunu DevOps & CI/CD Enablement, günlük işletimi DevOps çözümleri hizmetimizde ele alıyoruz.
Sık sorulan sorular
GitHub nedir? Git repository'lerini bulutta barındıran ve issue, pull request ve GitHub Actions ile yazılım geliştirmeyi destekleyen platformdur. Microsoft'a aittir.
Git ile GitHub arasındaki fark nedir? Git, bilgisayarınızda çalışan sürüm kontrol sistemidir; GitHub ise Git repository'lerini barındırıp üstüne iş birliği araçları ekleyen bir hizmettir. Git, GitHub olmadan da kullanılabilir.
GitLab nedir? Git repository'lerinin yanında planlama, CI/CD ve güvenlik taramasını sunan bir yazılım geliştirme platformudur; GitLab.com olarak bulutta ya da Self-Managed olarak kendi sunucunuzda çalışır.
Temel Git komutları nelerdir? git init ve git clone repository oluşturur ya da kopyalar; git add ve git commit değişikliği kaydeder. git push ve git pull remote ile eşitleme yapar, git branch ve git merge paralel işleri yönetir.
Pull request ile merge request arasındaki fark nedir? İkisi de kod değişikliğini birleştirmeden önce inceleme için açılan öneridir; GitHub pull request, GitLab merge request adını kullanır.
Kaynaklar
- Git, git-scm.com: Git'in tanımı
- Pro Git, About Version Control ve What is Git?: sürüm kontrolü, merkezî ve dağıtık sistemler, snapshot, SHA-1 ve üç durum
- Git, BreakingChanges: Git 3.0'da varsayılan hash ve branch adı
- Pro Git, A Short History of Git: BitKeeper, 2005 ve tasarım hedefleri
- Pro Git, Branches in a Nutshell, Rebasing ve Working with Remotes: branch, rebase kuralı ve origin
- Git Reference, git-merge, git-push, git-pull, git-branch, git-switch ve git-commit: komutların resmî tanımları, fast-forward ve imzalı commit
- GitHub Docs, About pull requests: pull request tanımı
- GitLab Docs, Merge requests: merge request
- GitHub Docs, About GitHub and Git: GitHub'ın Git ile ilişkisi, issue ve pull request
- Microsoft, Microsoft to acquire GitHub for $7.5 billion ve Microsoft completes GitHub acquisition: satın alma duyurusu (4 Haziran 2018) ve tamamlanması
- GitHub Docs, About GitHub Enterprise Server: kendi sunucunuzda çalışan sürüm, kurulum seçenekleri ve güncelleme sorumluluğu
- GitLab Docs, Getting started, GitLab Licensing and Compatibility ve Choose a subscription: kapsam, CE ve EE lisansı, GitLab.com, Self-Managed ve Dedicated
- Stack Overflow, 2025 Developer Survey: Technology ve Methodology: GitHub ve GitLab kullanım oranları (anket 29 Mayıs-23 Haziran 2025, 49.009 yanıt; soruyu 30.065 kişi yanıtladı)
- DORA, Trunk-based development: tanım, ölçütler ve performansla ilişkisi
- Vincent Driessen, A successful Git branching model: Git Flow (5 Ocak 2010; 5 Mart 2020 tarihli değerlendirme notuyla)
- GitHub Docs, GitHub flow: branch tabanlı hafif akış
- GitHub Docs, Removing sensitive data from a repository: sızan sırrın önce iptal edilmesi, klonlar ve fork'lar
- GitHub Docs, About secret scanning ve About push protection: tarama kapsamı ve push protection
- GitLab Docs, Secret detection: secret push protection ve pipeline secret detection
- NIST, SP 800-218 Secure Software Development Framework (SSDF) Version 1.1 ve tam metni: PS.1 uygulaması ve örnekleri (Şubat 2022)
- GitHub Docs, About commit signature verification: GPG, SSH ve S/MIME imzaları
- GitHub Docs, About protected branches ve GitLab Docs, Protected branches: korumalı branch kuralları
- GitHub Docs, Events that trigger workflows ve Understanding GitHub Actions: push ve pull_request olayları, YAML workflow'lar
- GitLab Docs, CI/CD pipelines: .gitlab-ci.yml ve pipeline'ların tetiklenmesi
- OpenGitOps, GitOps Principles v1.0.0: dört GitOps ilkesi
- Bu katmanı nasıl işlettiğimiz: DevOps & CI/CD Enablement