Git ile Etkili Versiyon Kontrolü
Projelerinizde Git'i daha etkili kullanmak için ipuçları ve stratejiler.

Git ile Etkili Versiyon Kontrolü
Git, modern yazılım geliştirmede vazgeçilmez bir araçtır. Bu yazıda Git'i daha etkili kullanmak için stratejiler ve en iyi uygulamaları paylaşacağım.
Git'in Temelleri
Git, dağıtık versiyon kontrol sistemi olarak projelerinizin geçmişini takip eder ve değişiklikleri yönetir.
Temel Git Komutları
# Repository oluşturma
git init
git clone https://github.com/kullanici/proje.git
# Değişiklikleri takip etme
git add .
git add dosya.txt
git commit -m "Anlamlı commit mesajı"
# Remote repository ile çalışma
git push origin main
git pull origin main
git fetch origin
Etkili Branch Stratejileri
Git Flow Modeli
# Feature branch oluşturma
git checkout -b feature/yeni-ozellik
git checkout main
git merge feature/yeni-ozellik
# Release branch
git checkout -b release/v1.2.0
git checkout main
git merge release/v1.2.0
git tag v1.2.0
# Hotfix branch
git checkout -b hotfix/kritik-hata
git checkout main
git merge hotfix/kritik-hata
GitHub Flow (Daha Basit)
# Feature branch oluştur
git checkout -b feature-branch
# Değişiklikleri yap
git add .
git commit -m "Feature eklendi"
git push origin feature-branch
# Pull request oluştur
# Merge sonrası branch'i sil
git branch -d feature-branch
Commit En İyi Uygulamaları
Anlamlı Commit Mesajları
# ❌ Kötü commit mesajları
git commit -m "değişiklik"
git commit -m "bug fix"
git commit -m "update"
# ✅ İyi commit mesajları
git commit -m "feat: kullanıcı girişi özelliği eklendi"
git commit -m "fix: null pointer exception düzeltildi"
git commit -m "docs: README.md güncellendi"
git commit -m "refactor: authentication servisini optimize ettim"
Conventional Commits
# Format: <tip>(<kapsam>): <açıklama>
feat: yeni özellik eklendi
fix: hata düzeltildi
docs: dokümantasyon güncellendi
style: kod formatı düzenlendi
refactor: kod yapısı iyileştirildi
test: test eklendi
chore: build süreçleri güncellendi
Merge vs Rebase
Merge Kullanımı
git checkout main
git merge feature-branch
# Merge commit oluşturur
# Geçmiş korunur ama daha karmaşık görünür
Rebase Kullanımı
git checkout feature-branch
git rebase main
# Linear geçmiş oluşturur
# Daha temiz görünür ama geçmiş yeniden yazılır
İnteraktif Rebase
# Son 3 commit'i düzenle
git rebase -i HEAD~3
# Rebase seçenekleri:
# pick: commit'i olduğu gibi bırak
# reword: commit mesajını değiştir
# edit: commit'i düzenle
# squash: önceki commit ile birleştir
# drop: commit'i sil
Conflict Çözümü
Merge Conflict'ları
# Conflict oluştuğunda
git status # Conflicted dosyaları gör
# Dosyayı düzenle
<<<<<<< HEAD
mevcut kod
=======
gelen kod
>>>>>>> feature-branch
# Conflict çözüldükten sonra
git add resolved-file.txt
git commit -m "merge conflict çözüldü"
Merge Tool Kullanımı
# Visual merge tool
git config --global merge.tool vimdiff
git mergetool
# VS Code kullanımı
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'
Git Hooks ile Otomasyon
Pre-commit Hook
#!/bin/sh
# .git/hooks/pre-commit
# Linting kontrolü
npm run lint
if [ $? -ne 0 ]; then
echo "Linting hatası! Commit iptal edildi."
exit 1
fi
# Test çalıştırma
npm test
if [ $? -ne 0 ]; then
echo "Testler başarısız! Commit iptal edildi."
exit 1
fi
Pre-push Hook
#!/bin/sh
# .git/hooks/pre-push
# Build kontrolü
npm run build
if [ $? -ne 0 ]; then
echo "Build başarısız! Push iptal edildi."
exit 1
fi
Git Aliases ile Verimlilik
# ~/.gitconfig dosyasına ekle
[alias]
st = status
co = checkout
br = branch
ci = commit
unstage = reset HEAD --
last = log -1 HEAD
visual = !gitk
# Log görünümü
lg = log --oneline --graph --decorate --all
# Undo last commit (keep changes)
undo = reset HEAD~1 --mixed
# Quick commit
ac = !git add -A && git commit -m
# Delete merged branches
cleanup = !git branch --merged | grep -v '\\*' | xargs -n 1 git branch -d
.gitignore En İyi Uygulamaları
Node.js Projesi için
# Dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Production builds
/build
/dist
# Environment variables
.env
.env.local
.env.production
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# Logs
logs/
*.log
Python Projesi için
# Byte-compiled / optimized
__pycache__/
*.py[cod]
*$py.class
# Virtual environments
venv/
env/
ENV/
# IDE
.vscode/
.idea/
*.pyc
# Database
*.db
*.sqlite3
# Environment
.env
GitHub/GitLab İpuçları
Pull Request En İyi Uygulamaları
## PR Başlığı
feat: kullanıcı profil sayfası eklendi
## Açıklama
- Kullanıcı profil bilgilerini görüntüleme
- Profil fotoğrafı yükleme özelliği
- Kullanıcı bilgilerini düzenleme formu
## Test Edilenler
- [x] Profil sayfası yükleniyor
- [x] Fotoğraf yükleme çalışıyor
- [x] Form validasyonları doğru
## Screenshots

Issue Şablonları
## Bug Report
**Açıklama**
Kısa ve net bug açıklaması.
**Beklenen Davranış**
Ne olması gerekiyor?
**Mevcut Davranış**
Ne oluyor?
**Adımlar**
1. Şu sayfaya git
2. Şu butona tıkla
3. Hatayı gör
**Ortam**
- OS: Windows 10
- Browser: Chrome 96
- Version: v1.2.3
Git Güvenliği
Sensitive Data Protection
# Yanlışlıkla commit edilen secret'ları temizleme
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch secrets.txt' \
--prune-empty --tag-name-filter cat -- --all
# GitHub secret taraması
git secrets --install
git secrets --register-aws
git secrets --scan
GPG Signature
# GPG key oluşturma
gpg --gen-key
# Git'e GPG key'i tanıtma
git config --global user.signingkey [KEY_ID]
git config --global commit.gpgsign true
# Signed commit
git commit -S -m "signed commit"
Git Performans Optimizasyonu
Large File Management
# Git LFS kurulumu
git lfs install
# Large dosyaları track etme
git lfs track "*.psd"
git lfs track "*.zip"
git lfs track "*.mp4"
# .gitattributes dosyası
*.psd filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
Repository Temizliği
# Repository boyutunu küçültme
git gc --aggressive --prune=now
# Unused objects silme
git fsck --unreachable
git prune
# Repository istatistikleri
git count-objects -vH
Sonuç
Etkili Git kullanımı için:
- Anlamlı commit mesajları yazın
- Branch stratejisi belirleyin ve uygulayın
- Conflict'ları düzenli olarak çözün
- Hooks ile otomatik kontroller kurun
- Aliases ile işleri hızlandırın
- Security konularına dikkat edin
Git'i doğru kullanmak sadece kod geçmişinizi korumaz, aynı zamanda takım çalışmasını da kolaylaştırır.



