Bölüm 18 / 33
Git ve Yazılım Yaşam Döngüsü
Kaynak kod sürümleme, branch stratejileri, pull request, code review ve CI/CD süreçleri.
3 canlı örnek — seçerek incele
İlgili kavramlar: Branch, Pull Request, Merge
Git branch akışı
Dosya değişikliklerini tarihçe ve kullanıcı bilgisiyle takip eden sistem.
- GitT
Dağıtık sürüm kontrol sistemi.
Proje dosyaları ile commit geçmişinin saklandığı depo.
Geliştiricinin üzerinde çalıştığı mevcut dosya durumu.
Commit, branch ve repository metadata'sını tutan .git klasörü.
Bir sonraki commit'e girecek değişikliklerin hazırlandığı alan.
Git'in staging area için kullandığı teknik veri yapısı.
Git tarafından henüz takip edilmeyen dosya.
Git geçmişine alınmış ve değişiklikleri izlenen dosya.
Son commit'e göre içeriği değişmiş dosya.
Bir sonraki commit için staging area'ya eklenmiş değişiklik.
Belirli değişikliklerin mesaj, yazar ve tarih ile kaydedilmiş sürümü.
Commit'i benzersiz tanımlayan kriptografik özet.
Değişikliğin ne ve neden yapıldığını açıklayan metin.
Tek mantıksal değişikliği kapsayan küçük ve bağımsız commit.
feat, fix ve chore gibi standart prefix kullanan commit mesajı sözleşmesi.
Commit geçmişi üzerinde hareket eden bağımsız geliştirme işaretçisi.
Production'a hazır kabul edilen ana kod hattı.
Belirli özellik için ana hattan ayrılan geçici branch.
Bir hata düzeltmesi için oluşturulan branch.
Canlı sistemdeki acil hata için production hattından açılan branch.
Yeni sürümü test ve düzeltme için hazırlayan branch.
Belirli branch veya commit durumuna geçme işlemi.
Branch değiştirmek için kullanılan modern Git komutu.
Bir branch'teki commit değişikliklerini başka branch'e birleştirme.
Hedef branch ayrışmamışsa işaretçiyi doğrudan ileri taşıyan merge.
İki ayrı commit geçmişini birleştiren özel commit.
Aynı satır veya yapıda uyumsuz değişikliklerin otomatik birleştirilememesi.
Çakışan dosyalarda doğru içeriği seçip commit etme işlemi.
Bir branch'in commit'lerini başka tabanın üzerine yeniden oynatma.
Commit sırasını değiştirme, birleştirme veya mesaj düzeltme işlemi.
Birden fazla commit'i tek commit hâlinde birleştirme.
Belirli commit değişikliğini başka branch'e uygulama.
Önceki commit'in etkisini yeni ters commit oluşturarak geri alma.
Branch ve staging durumunu belirli commit'e taşıma.
Commit'i geri alıp değişiklikleri staged bırakır.
Commit'i geri alıp değişiklikleri working tree'de unstaged bırakır.
Commit ve yerel dosya değişikliklerini silerek geri döner.
Dosya veya staged değişikliği belirli kaynaktan geri yükler.
Tamamlanmamış yerel değişiklikleri geçici olarak saklar.
- TagT
Belirli commit'e sürüm veya yayın adı veren sabit işaretçi.
Mesaj, tarih ve imza metadata'sı taşıyan Git tag'i.
GitHub veya GitLab gibi başka repository kopyasının adı ve adresi.
Clone edilen varsayılan remote için yaygın ad.
Uzak repository'nin dosya ve geçmişini yerel makineye kopyalar.
Remote commit ve branch bilgilerini yerel repository'ye indirir, çalışma branch'ini değiştirmez.
- PullT
Remote değişiklikleri fetch edip mevcut branch'e merge veya rebase ile entegre eder.
- PushT
Yerel commit ve referansları remote repository'ye gönderir.
Yerel branch'in varsayılan fetch/push ve karşılaştırma yaptığı remote branch.
origin/main gibi remote branch'in yerel takip referansı.
- ForkT
Başka repository'nin kendi hesabında bağımsız kopyasını oluşturma.
Bir branch değişikliğini inceleme ve hedef branch'e birleştirme talebi.
GitLab'da pull request ile aynı işlevi gören değişiklik talebi.
Kod değişikliklerinin doğruluk, güvenlik ve bakım açısından ekipçe incelenmesi.
Pull request değişikliklerini inceleyen kişi.
Belirli kod satırı veya genel değişiklik hakkında geri bildirim.
Reviewer'ın değişikliğin merge edilmesine onay vermesi.
Merge öncesi düzeltilmesi gereken konuların işaretlenmesi.
Bir yorum etrafındaki soru, yanıt ve çözüm konuşması.
Review yorumunun ele alındığını ve kapatıldığını işaretleme.
Henüz merge'e hazır olmayan ancak görünür geri bildirim istenen PR.
Değişiklik özeti, test ve kontrol bilgilerini standartlaştıran şablon.
Hata, görev veya özellik talebinin repository içindeki kaydı.
Hata veya talep kaydında gerekli bilgileri standartlaştıran form.
Issue ve PR'ları hedef sürüm veya tarihte gruplandırır.
Belirli tag'e ait sürüm notu ve dağıtılabilir dosyaların yayınlanması.
Yeni sürümdeki özellik, düzeltme ve kırıcı değişikliklerin açıklaması.
Major, minor ve patch sürüm numarası standardı.
Eski kullanım biçimleriyle uyumsuz değişiklik.
Sürümler arasında yapılan değişikliklerin kronolojik kaydı.
Git tarafından takip edilmemesi gereken dosya desenlerini belirtir.
Satır sonu, diff ve merge davranışlarını dosya bazında ayarlar.
Commit veya push gibi Git olaylarında otomatik script çalıştırır.
Commit oluşturulmadan lint veya test çalıştıran hook.
Push öncesinde kontrol çalıştıran hook.
Repository geçmişinde parola ve API anahtarı desenlerini arar.
Commit'in belirli anahtar sahibi tarafından oluşturulduğunu doğrulayan imza.
Doğrudan push, force push veya onaysız merge'i kısıtlayan branch.
Review, test ve kullanıcı kurallarıyla branch'i koruyan politika.
PR merge edilmeden belirli CI işlerinin başarılı olmasını zorunlu kılar.
Dosya yollarına göre zorunlu veya önerilen reviewer'ları tanımlar.
Kısa ömürlü branch'lerle sık ana dala entegrasyon yaklaşımı.
Feature, develop, release ve hotfix branch'leri kullanan branch modeli.
Main ve kısa feature branch'leriyle PR tabanlı basit iş akışı.
Onaylı PR'ları güncel main üzerinde sırayla test edip birleştiren sistem.
Birden fazla uygulama veya paketin tek repository'de tutulması.
Her servis veya projenin ayrı repository'de tutulması.
Başka Git repository'sini belirli commit ile alt klasöre bağlama.
Büyük binary dosyaları Git geçmişi dışında özel depoda tutma sistemi.
- CIT
Her değişiklikte otomatik build, lint ve test çalıştırma süreci.
Kod değişikliklerini sık birleştirip otomatik doğrulama yaklaşımı.
- CDO
Doğrulanan değişiklikleri staging veya production'a otomatik teslim/dağıtma süreci.
Kodun her an yayınlanabilir durumda tutulması, production yayınının kontrollü olması.
Başarılı değişikliklerin insan onayı olmadan production'a dağıtılması.
Build, test, package ve deploy aşamalarından oluşan otomasyon akışı.
- JobT
CI pipeline içinde belirli runner'da çalışan komut grubu.
- StepT
Bir CI job içindeki tek komut veya action.
CI job'larını çalıştıran makine veya container.
Build sonucu oluşan paket, test raporu veya dağıtım dosyası.
CI bağımlılıklarını tekrar indirmemek için saklanan dosyalar.
Development, preview, staging veya production dağıtım hedefi.
Her PR için geçici erişilebilir uygulama ortamı.
Uygulama sürümünü hedef ortama yayınlama işlemi.
Sorunlu yayından önceki çalışan sürüme geri dönme.
Eski ve yeni production ortamlarını paralel tutup trafiği yeniye çevirme.
Yeni sürümü önce küçük kullanıcı yüzdesine yayınlayıp ölçme.
Instance'ları sırayla yeni sürüme geçirerek kesintiyi azaltma.
Kod deploy edilmiş olsa da özelliği kontrollü açıp kapatma.
Sürüm hazırlığı için ana geliştirme hattından ayrı branch kullanma.
Aynı doğrulanmış artifact'i devden staging ve production'a ilerletme.
Her ortamda yeniden build yerine aynı artifact'i farklı yapılandırmayla dağıtma.
Sunucu ve altyapı ayarlarını sürümlenebilir kodla tanımlama.
Production job'ının yetkili kullanıcı onayı beklemesi.
Production değişikliklerini risk, onay ve kayıt süreçleriyle yönetme.
Arıza sonrası neden, etki ve kalıcı aksiyonları suçlamadan belgeleyen rapor.
| Kavram | Seviye | Kısa açıklama |
|---|---|---|
| Version Control | T | Dosya değişikliklerini tarihçe ve kullanıcı bilgisiyle takip eden sistem. |
| Git | T | Dağıtık sürüm kontrol sistemi. |
| Repository | T | Proje dosyaları ile commit geçmişinin saklandığı depo. |
| Working Tree | T | Geliştiricinin üzerinde çalıştığı mevcut dosya durumu. |
| Git Directory | O | Commit, branch ve repository metadata'sını tutan .git klasörü. |
| Staging Area | T | Bir sonraki commit'e girecek değişikliklerin hazırlandığı alan. |
| Index | O | Git'in staging area için kullandığı teknik veri yapısı. |
| Untracked File | T | Git tarafından henüz takip edilmeyen dosya. |
| Tracked File | T | Git geçmişine alınmış ve değişiklikleri izlenen dosya. |
| Modified | T | Son commit'e göre içeriği değişmiş dosya. |
| Staged | T | Bir sonraki commit için staging area'ya eklenmiş değişiklik. |
| Commit | T | Belirli değişikliklerin mesaj, yazar ve tarih ile kaydedilmiş sürümü. |
| Commit Hash | T | Commit'i benzersiz tanımlayan kriptografik özet. |
| Commit Message | T | Değişikliğin ne ve neden yapıldığını açıklayan metin. |
| Atomic Commit | O | Tek mantıksal değişikliği kapsayan küçük ve bağımsız commit. |
| Conventional Commits | O | feat, fix ve chore gibi standart prefix kullanan commit mesajı sözleşmesi. |
| Branch | T | Commit geçmişi üzerinde hareket eden bağımsız geliştirme işaretçisi. |
| Main Branch | T | Production'a hazır kabul edilen ana kod hattı. |
| Feature Branch | T | Belirli özellik için ana hattan ayrılan geçici branch. |
| Bugfix Branch | T | Bir hata düzeltmesi için oluşturulan branch. |
| Hotfix Branch | O | Canlı sistemdeki acil hata için production hattından açılan branch. |
| Release Branch | O | Yeni sürümü test ve düzeltme için hazırlayan branch. |
| Checkout | T | Belirli branch veya commit durumuna geçme işlemi. |
| Switch | T | Branch değiştirmek için kullanılan modern Git komutu. |
| Merge | T | Bir branch'teki commit değişikliklerini başka branch'e birleştirme. |
| Fast-forward Merge | O | Hedef branch ayrışmamışsa işaretçiyi doğrudan ileri taşıyan merge. |
| Merge Commit | O | İki ayrı commit geçmişini birleştiren özel commit. |
| Merge Conflict | T | Aynı satır veya yapıda uyumsuz değişikliklerin otomatik birleştirilememesi. |
| Conflict Resolution | T | Çakışan dosyalarda doğru içeriği seçip commit etme işlemi. |
| Rebase | O | Bir branch'in commit'lerini başka tabanın üzerine yeniden oynatma. |
| Interactive Rebase | İ | Commit sırasını değiştirme, birleştirme veya mesaj düzeltme işlemi. |
| Squash | O | Birden fazla commit'i tek commit hâlinde birleştirme. |
| Cherry-pick | O | Belirli commit değişikliğini başka branch'e uygulama. |
| Revert | T | Önceki commit'in etkisini yeni ters commit oluşturarak geri alma. |
| Reset | O | Branch ve staging durumunu belirli commit'e taşıma. |
| Soft Reset | O | Commit'i geri alıp değişiklikleri staged bırakır. |
| Mixed Reset | O | Commit'i geri alıp değişiklikleri working tree'de unstaged bırakır. |
| Hard Reset | O | Commit ve yerel dosya değişikliklerini silerek geri döner. |
| Restore | T | Dosya veya staged değişikliği belirli kaynaktan geri yükler. |
| Stash | T | Tamamlanmamış yerel değişiklikleri geçici olarak saklar. |
| Tag | T | Belirli commit'e sürüm veya yayın adı veren sabit işaretçi. |
| Annotated Tag | O | Mesaj, tarih ve imza metadata'sı taşıyan Git tag'i. |
| Remote | T | GitHub veya GitLab gibi başka repository kopyasının adı ve adresi. |
| origin | T | Clone edilen varsayılan remote için yaygın ad. |
| Clone | T | Uzak repository'nin dosya ve geçmişini yerel makineye kopyalar. |
| Fetch | T | Remote commit ve branch bilgilerini yerel repository'ye indirir, çalışma branch'ini değiştirmez. |
| Pull | T | Remote değişiklikleri fetch edip mevcut branch'e merge veya rebase ile entegre eder. |
| Push | T | Yerel commit ve referansları remote repository'ye gönderir. |
| Upstream Branch | O | Yerel branch'in varsayılan fetch/push ve karşılaştırma yaptığı remote branch. |
| Remote-tracking Branch | O | origin/main gibi remote branch'in yerel takip referansı. |
| Fork | T | Başka repository'nin kendi hesabında bağımsız kopyasını oluşturma. |
| Pull Request | T | Bir branch değişikliğini inceleme ve hedef branch'e birleştirme talebi. |
| Merge Request | T | GitLab'da pull request ile aynı işlevi gören değişiklik talebi. |
| Code Review | T | Kod değişikliklerinin doğruluk, güvenlik ve bakım açısından ekipçe incelenmesi. |
| Reviewer | T | Pull request değişikliklerini inceleyen kişi. |
| Review Comment | T | Belirli kod satırı veya genel değişiklik hakkında geri bildirim. |
| Approval | T | Reviewer'ın değişikliğin merge edilmesine onay vermesi. |
| Requested Changes | T | Merge öncesi düzeltilmesi gereken konuların işaretlenmesi. |
| Review Thread | T | Bir yorum etrafındaki soru, yanıt ve çözüm konuşması. |
| Resolve Conversation | T | Review yorumunun ele alındığını ve kapatıldığını işaretleme. |
| Draft Pull Request | T | Henüz merge'e hazır olmayan ancak görünür geri bildirim istenen PR. |
| PR Template | T | Değişiklik özeti, test ve kontrol bilgilerini standartlaştıran şablon. |
| Issue | T | Hata, görev veya özellik talebinin repository içindeki kaydı. |
| Issue Template | T | Hata veya talep kaydında gerekli bilgileri standartlaştıran form. |
| Milestone | T | Issue ve PR'ları hedef sürüm veya tarihte gruplandırır. |
| Release | T | Belirli tag'e ait sürüm notu ve dağıtılabilir dosyaların yayınlanması. |
| Release Notes | T | Yeni sürümdeki özellik, düzeltme ve kırıcı değişikliklerin açıklaması. |
| Semantic Versioning | O | Major, minor ve patch sürüm numarası standardı. |
| Breaking Change | T | Eski kullanım biçimleriyle uyumsuz değişiklik. |
| Changelog | T | Sürümler arasında yapılan değişikliklerin kronolojik kaydı. |
| .gitignore | T | Git tarafından takip edilmemesi gereken dosya desenlerini belirtir. |
| .gitattributes | O | Satır sonu, diff ve merge davranışlarını dosya bazında ayarlar. |
| Git Hook | O | Commit veya push gibi Git olaylarında otomatik script çalıştırır. |
| pre-commit Hook | O | Commit oluşturulmadan lint veya test çalıştıran hook. |
| pre-push Hook | O | Push öncesinde kontrol çalıştıran hook. |
| Secret Scanning | O | Repository geçmişinde parola ve API anahtarı desenlerini arar. |
| Signed Commit | O | Commit'in belirli anahtar sahibi tarafından oluşturulduğunu doğrulayan imza. |
| Protected Branch | O | Doğrudan push, force push veya onaysız merge'i kısıtlayan branch. |
| Branch Protection Rule | O | Review, test ve kullanıcı kurallarıyla branch'i koruyan politika. |
| Required Status Check | O | PR merge edilmeden belirli CI işlerinin başarılı olmasını zorunlu kılar. |
| CODEOWNERS | O | Dosya yollarına göre zorunlu veya önerilen reviewer'ları tanımlar. |
| Trunk-based Development | O | Kısa ömürlü branch'lerle sık ana dala entegrasyon yaklaşımı. |
| Git Flow | O | Feature, develop, release ve hotfix branch'leri kullanan branch modeli. |
| GitHub Flow | O | Main ve kısa feature branch'leriyle PR tabanlı basit iş akışı. |
| Merge Queue | O | Onaylı PR'ları güncel main üzerinde sırayla test edip birleştiren sistem. |
| Monorepo | O | Birden fazla uygulama veya paketin tek repository'de tutulması. |
| Polyrepo | O | Her servis veya projenin ayrı repository'de tutulması. |
| Submodule | İ | Başka Git repository'sini belirli commit ile alt klasöre bağlama. |
| Git LFS | O | Büyük binary dosyaları Git geçmişi dışında özel depoda tutma sistemi. |
| CI | T | Her değişiklikte otomatik build, lint ve test çalıştırma süreci. |
| Continuous Integration | T | Kod değişikliklerini sık birleştirip otomatik doğrulama yaklaşımı. |
| CD | O | Doğrulanan değişiklikleri staging veya production'a otomatik teslim/dağıtma süreci. |
| Continuous Delivery | O | Kodun her an yayınlanabilir durumda tutulması, production yayınının kontrollü olması. |
| Continuous Deployment | O | Başarılı değişikliklerin insan onayı olmadan production'a dağıtılması. |
| Pipeline | T | Build, test, package ve deploy aşamalarından oluşan otomasyon akışı. |
| Job | T | CI pipeline içinde belirli runner'da çalışan komut grubu. |
| Step | T | Bir CI job içindeki tek komut veya action. |
| Runner | T | CI job'larını çalıştıran makine veya container. |
| Artifact | T | Build sonucu oluşan paket, test raporu veya dağıtım dosyası. |
| Cache | O | CI bağımlılıklarını tekrar indirmemek için saklanan dosyalar. |
| Environment | T | Development, preview, staging veya production dağıtım hedefi. |
| Preview Deployment | O | Her PR için geçici erişilebilir uygulama ortamı. |
| Deployment | T | Uygulama sürümünü hedef ortama yayınlama işlemi. |
| Rollback | T | Sorunlu yayından önceki çalışan sürüme geri dönme. |
| Blue-green Deployment | İ | Eski ve yeni production ortamlarını paralel tutup trafiği yeniye çevirme. |
| Canary Deployment | İ | Yeni sürümü önce küçük kullanıcı yüzdesine yayınlayıp ölçme. |
| Rolling Deployment | İ | Instance'ları sırayla yeni sürüme geçirerek kesintiyi azaltma. |
| Feature Flag | O | Kod deploy edilmiş olsa da özelliği kontrollü açıp kapatma. |
| Release Branching | O | Sürüm hazırlığı için ana geliştirme hattından ayrı branch kullanma. |
| Environment Promotion | O | Aynı doğrulanmış artifact'i devden staging ve production'a ilerletme. |
| Build Once Deploy Many | O | Her ortamda yeniden build yerine aynı artifact'i farklı yapılandırmayla dağıtma. |
| Infrastructure as Code | O | Sunucu ve altyapı ayarlarını sürümlenebilir kodla tanımlama. |
| Deployment Approval | O | Production job'ının yetkili kullanıcı onayı beklemesi. |
| Change Management | O | Production değişikliklerini risk, onay ve kayıt süreçleriyle yönetme. |
| Postmortem | O | Arıza sonrası neden, etki ve kalıcı aksiyonları suçlamadan belgeleyen rapor. |
Bölüm uygulamaları
Bu bölümü bitirmeden önce şunları deneyin veya açıklayın.
- Stajyer ekip için branch isimlendirme, commit standardı, PR şablonu ve code review kontrol listesi hazırlayın.
- Feature branch'te conflict, rebase, squash ve merge işlemlerini küçük bir demo repository üzerinde uygulayın.
- Lint → unit test → build → Docker image → staging deploy aşamalarından oluşan CI/CD pipeline tasarlayın.