Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Git ve GitHub Nedir? Sürüm Kontrolüne Giriş
Sürüm kontrolü neden var, merkezi ve dağıtık araçlar arasındaki fark ne, Git ile GitHub neden aynı şey değil? Sunucusu silinen bir repo'da geçmişe bakıp commit atarak dağıtık çalışmayı deniyor, Git'in kısa tarihçesini, DevOps'taki yerini ve serinin kurgusunu görüyoruz.
Git Remote ve Clone: origin, fetch, push ve Upstream
Remote'un ne olduğunu, GitHub yerine yerel bir bare repo ile git remote add, push -u ve upstream ayarını, origin/main gibi remote-tracking branch'leri, git clone'un yaptığı işleri, fetch ile merge'ün ayrımını, yeni bir branch'i paylaşmayı, git remote show/rename'i ve reddedilen push'u gerçek çıktılarla görüyoruz.
GitHub Hesabına Bağlanmak: HTTPS, Personal Access Token ve SSH
GitHub'da repo açmaktan ilk push'a: 2021'den beri parolanın neden çalışmadığı, fine-grained ve classic personal access token farkı, credential helper'ın nasıl çalıştığı, ed25519 SSH anahtarı, gh auth login ve token'ı URL'ye gömmeyi yakalayan transfer.credentialsInUrl.
GitHub ile Pull Request: GitHub Flow, Review ve Merge Yöntemleri
Branch, commit, push ve pull request: GitHub flow'un altı adımı, draft PR, review'a yeni push'larla cevap vermek, merge commit, squash ve rebase yöntemlerinin geçmişe etkisi, squash sonrası branch silmenin tuzağı ve fork ile upstream'i senkron tutmak.
Git ile Ekip Çalışması: Branch Stratejileri, Rulesets ve Conventional Commits
Bir force push'un ekip arkadaşının commit'ini nasıl sildiğinden yola çıkarak GitHub flow, Git flow ve trunk-based development'ı karşılaştırıyoruz; branch protection ile rulesets farkı, receive.denyNonFastForwards ile sunucu tarafı koruma, CODEOWNERS ve Conventional Commits.
Git Interactive Rebase ve Squash: PR Öncesi Geçmişi Toparlamak
Dağınık bir feature branch'ini git rebase -i ile üç temiz commit'e indiriyoruz: todo listesi, pick, reword, edit, squash, fixup, drop ve sıra değiştirme, commit --fixup ile --autosquash akışı, GitHub'ın squash merge'ü ile farkı ve Git 2.54'teki deneysel git history reword.
Git Tag ve Release: Sürümleri İşaretlemek, git describe ve GitHub Releases
Sürümleri git tag ile işaretliyoruz: lightweight ve annotated tag farkı, tag object'i, semver, push'un neden tag göndermediği, --tags ile --follow-tags, git describe çıktısını okumak, GitHub Releases, tag silmek ve yayınlanmış bir tag'i taşımanın neden tehlikeli olduğu.
Git Hook'ları ve Commit İmzalama: pre-commit'ten SSH İmzasına
pre-commit ve commit-msg hook'larını gerçek çıktılarla yazıyor, core.hooksPath ile ekiple paylaşıyor, Git 2.54'ün config tabanlı hook'larını ve git hook list'i deniyoruz. Ardından commit'leri SSH anahtarıyla imzalıyor, allowed signers ile doğruluyor ve GitHub'daki Verified rozetinin şartlarını görüyoruz.