Issues ve Proje Yönetimi
Giriş — Kod Yazmak İşin Yarısı
Bir yazılım projesi sadece kod yazmaktan ibaret değil. Bir bug keşfettiğinde, yeni bir özellik fikrin olduğunda, bir refactoring planladığında ya da kullanıcıdan bir geri bildirim geldiğinde — bunları bir yere kaydetmen gerekir. Aksi halde hafızana güvenmek zorundasın ve hafıza, yazılım projelerinde en güvenilmez araçtır.
GitHub Issues, bir projedeki tüm görevleri, bug'ları, önerileri ve tartışmaları tek bir yerde toplayan bir görev yönetim sistemidir. Jira, Trello, Asana gibi araçların yaptığını GitHub'ın içinden, kodunla iç içe yapar.
Issue Nedir?
Analoji — Post-it Panosu
Bir ofis düşün. Duvarda büyük bir beyaz tahta var. Üzerinde renkli Post-it'ler yapıştırılmış:
🔴 Kırmızı: "Login sayfası çöküyor — ACİL!"
🟡 Sarı: "Kullanıcı profil sayfası tasarlanacak"
🟢 Yeşil: "API dokümantasyonu güncellenmeli"
🔵 Mavi: "Performans optimizasyonu araştırılacak"
Her Post-it'in üzerinde kimin sorumlu olduğu, ne zaman yapılacağı, hangi sürüme dahil olduğu yazıyor. İnsanlar geldikçe Post-it alıyor, yapıyor, tamamlandı bölümüne taşıyor.
İşte GitHub Issues tam olarak bu Post-it panosunun dijital hali. Ama çok daha güçlü: aranabilir, filtrelenebilir, otomatize edilebilir ve kod commit'leriyle doğrudan bağlantılı.
Post-it → GitHub Issue
Renk → Label (etiket)
"Sprint 3'e ait" → Milestone
Pano bölümleri → Projects (Kanban board)
Yapıştıran kişi → Issue author
Sorumlu kişi → AssigneeIssue Oluşturma
Web Arayüzünden
Repo sayfasında Issues sekmesine git → New issue butonuna tıkla:
Title: Login sayfası 500 hatası veriyor
Body:
## 🐛 Bug Açıklaması
Login sayfasına geçersiz e-posta girildiğinde 500 Internal Server Error alıyorum.
## Tekrarlama Adımları
1. `/login` sayfasına git
2. E-posta alanına "invalid-email" yaz
3. Şifre alanına herhangi bir şey yaz
4. "Giriş Yap" butonuna tıkla
## Beklenen Davranış
"Geçersiz e-posta formatı" hata mesajı gösterilmeli.
## Gerçekleşen Davranış
500 Internal Server Error sayfası gösteriliyor.
## Ortam
- Tarayıcı: Chrome 120
- İşletim Sistemi: macOS 14.2
- API Sürümü: v2.3.1
## Ekran Görüntüsü

## Ek Bilgi
Server loglarında `TypeError: Cannot read property 'validate' of undefined` hatası görünüyor.
---
Assignees: @backend-dev
Labels: bug, priority:high, backend
Milestone: v2.4GitHub CLI ile Issue Oluşturma
# Basit issue
gh issue create --title "Login 500 hatası" --body "Detaylı açıklama burada"
# Detaylı issue
gh issue create \
--title "Login sayfası 500 hatası veriyor" \
--body "## Bug
Geçersiz e-posta girilince 500 hatası alınıyor.
## Adımlar
1. /login'e git
2. Geçersiz e-posta gir
3. Submit et" \
--assignee backend-dev \
--label "bug,priority:high" \
--milestone "v2.4"
# İnteraktif mod
gh issue create? Title: Login sayfası 500 hatası
? Body: <Received>
? What's next? Submit
https://github.com/username/project/issues/42Issue Yönetimi (CLI)
# Issue'ları listele
gh issue list
gh issue list --state open
gh issue list --state closed
gh issue list --label "bug"
gh issue list --assignee @me
gh issue list --milestone "v2.4"
# Issue detayını gör
gh issue view 42
gh issue view 42 --web # Tarayıcıda aç
# Issue'yu kapat
gh issue close 42
gh issue close 42 --comment "PR #47 ile çözüldü"
# Issue'yu yeniden aç
gh issue reopen 42
# Issue'ya yorum ekle
gh issue comment 42 --body "Bu sorunu tekrarlayabildim, çözüm üzerinde çalışıyorum"
# Issue'yu düzenle
gh issue edit 42 --add-label "in-progress" --add-assignee @meLabels — Renkli Etiketler
Labels, issue'ları kategorize etmenin en temel yoludur. Her label'ın bir adı, rengi ve (isteğe bağlı) açıklaması vardır.
Varsayılan Labels
GitHub her yeni repository'ye şu label'ları otomatik ekler:
┌──────────────────┬────────┬─────────────────────────────────┐
│ Label │ Renk │ Açıklama │
├──────────────────┼────────┼─────────────────────────────────┤
│ bug │ 🔴 │ Bir şey doğru çalışmıyor │
│ documentation │ 🔵 │ Dokümantasyonla ilgili │
│ duplicate │ ⚪ │ Zaten var olan bir issue │
│ enhancement │ 🟢 │ Yeni özellik veya iyileştirme │
│ good first issue │ 🟣 │ Yeni katkıcılar için uygun │
│ help wanted │ 🟡 │ Yardım aranıyor │
│ invalid │ ⚪ │ Geçerli görünmüyor │
│ question │ 🟠 │ Bilgi isteniyor │
│ wontfix │ ⚪ │ Düzeltilmeyecek │
└──────────────────┴────────┴─────────────────────────────────┘Özel Label Sistemi Oluşturma
Profesyonel ekipler kendi label sistemlerini oluşturur. İşte önerilen bir yapı:
TÜR (Type):
🔴 bug → Hata
✨ feature → Yeni özellik
♻️ refactor → Kod iyileştirme
📝 docs → Dokümantasyon
🎨 design → Tasarım
⚡ performance → Performans
🔒 security → Güvenlik
ÖNCELİK (Priority):
🔴 priority:critical → Üretimi etkiliyor, hemen düzelt
🟠 priority:high → Bu sprint'te çözülmeli
🟡 priority:medium → Planlanmalı
🟢 priority:low → Zaman oldukça
DURUM (Status):
📋 status:backlog → Beklemede
🔄 status:in-progress→ Üzerinde çalışılıyor
👀 status:review → İncelemede
✅ status:done → Tamamlandı
ALAN (Area):
🖥️ area:frontend → Frontend ile ilgili
⚙️ area:backend → Backend ile ilgili
🗄️ area:database → Veritabanı ile ilgili
🚀 area:devops → CI/CD, deployment
📱 area:mobile → Mobil uygulama
DİĞER:
🆘 help wanted → Yardım aranıyor
👶 good first issue → Yeni başlayanlar için
🚫 wontfix → Düzeltilmeyecek
🔁 duplicate → Tekrar
❓ needs-triage → SınıflandırılmamışLabel Oluşturma
# Web arayüzünde:
# Issues → Labels → New label
# GitHub CLI ile (gh api kullanarak):
gh label create "priority:critical" --color "B60205" --description "Üretimi etkiliyor"
gh label create "priority:high" --color "D93F0B" --description "Bu sprint'te çözülmeli"
gh label create "priority:medium" --color "FBCA04" --description "Planlanmalı"
gh label create "priority:low" --color "0E8A16" --description "Zaman oldukça"
gh label create "area:frontend" --color "1D76DB" --description "Frontend ile ilgili"
gh label create "area:backend" --color "5319E7" --description "Backend ile ilgili"💡 İpucu: Label'ları repo'lar arasında taşımak için
github-label-syncgibi araçlar veya GitHub API kullanabilirsin. Bir kere iyi bir label sistemi oluşturup tüm projelerinde kullanabilirsin.
Milestones — Hedef Noktaları
Milestone, bir grup issue'yu belirli bir hedefe veya sürüme bağlamanı sağlar. "Bu issue'lar tamamlanırsa v2.0 çıkar" demektir.
Analoji — Yol Haritası
Bir yolculuğa çıkıyorsun. Hedefin İstanbul → Ankara. Yol boyunca kilometre taşları var: Bolu, Düzce, Eskişehir... Her taşa ulaştığında ne kadar ilerlediğini görebilirsin.
Milestone'lar da yazılım projesindeki kilometre taşlarıdır:
v1.0 (MVP) v1.1 (Stabilizasyon) v2.0 (Büyük Güncelleme)
├── #1 Login ✅ ├── #12 Bug fix ✅ ├── #20 Dark mode
├── #2 Register ✅ ├── #13 Performans ├── #21 API v2
├── #3 Dashboard ├── #14 Docs ✅ ├── #22 Mobile app
├── #4 Profile ✅ └── #15 Security ├── #23 Notifications
└── #5 Settings └── #24 Analytics
75% complete 50% complete 0% complete
████████░░ █████░░░░░ ░░░░░░░░░░Milestone Oluşturma
# Web arayüzünde:
# Issues → Milestones → New milestone
# Title: v2.0
# Due date: 2025-06-30
# Description: Büyük güncelleme. Dark mode, API v2, mobil uygulama.Milestone detay sayfasında şunları görürsün:
v2.0 — Büyük Güncelleme
Due by June 30, 2025
Progress: ████████░░░░░░░░░░░░ 40%
Open (6) Closed (4)
✅ #20 Dark mode implementation
✅ #21 API v2 design document
✅ #22 Mobile app wireframes
✅ #23 Push notification service
#24 Analytics dashboard
#25 Export functionality
#26 User onboarding flow
#27 Performance optimization
#28 Documentation update
#29 Security auditMilestone Best Practices
Tarihi belirle — Due date olmadan milestone anlamsızlaşır
Küçük tut — Bir milestone'da 10-20 issue ideal
Sürüm tabanlı düşün — v1.0, v1.1, v2.0 gibi semver ile uyumlu
İlerlemeyi takip et — Düzenli olarak milestone sayfasını kontrol et
Issue Templates — Standart Formlar
Farklı türdeki issue'lar için farklı şablonlar oluşturabilirsin. Bu sayede kullanıcılar doğru bilgiyi doğru formatta verir.
Bug Report Template
mkdir -p .github/ISSUE_TEMPLATE
cat > .github/ISSUE_TEMPLATE/bug_report.md << 'EOF'
---
name: 🐛 Bug Report
about: Bir hata bildirin
title: '[BUG] '
labels: bug, needs-triage
assignees: ''
---
## 🐛 Bug Açıklaması
<!-- Hatayı kısaca açıklayın -->
## 📋 Tekrarlama Adımları
1. '...' sayfasına git
2. '...' butonuna tıkla
3. '...' alanına gir
4. Hatayı gör
## ✅ Beklenen Davranış
<!-- Ne olması gerekiyordu? -->
## ❌ Gerçekleşen Davranış
<!-- Ne oldu? -->
## 📸 Ekran Görüntüsü
<!-- Varsa ekleyin -->
## 🖥️ Ortam
- İşletim Sistemi: [ör. macOS 14, Windows 11]
- Tarayıcı: [ör. Chrome 120, Firefox 121]
- Sürüm: [ör. v2.3.1]
## 📝 Ek Bilgi
<!-- Başka bir şey eklemek ister misiniz? -->
EOFFeature Request Template
cat > .github/ISSUE_TEMPLATE/feature_request.md << 'EOF'
---
name: ✨ Feature Request
about: Yeni bir özellik önerin
title: '[FEATURE] '
labels: enhancement, needs-triage
assignees: ''
---
## 🎯 Problem
<!-- Hangi sorunu çözecek? Neden bu özellik gerekli? -->
## 💡 Çözüm Önerisi
<!-- Nasıl çalışmasını istiyorsunuz? -->
## 🔄 Alternatifler
<!-- Başka çözüm düşündünüz mü? -->
## 📸 Mockup / Örnek
<!-- Varsa görsel veya örnek ekleyin -->
## 📝 Ek Bilgi
<!-- Başka bir şey eklemek ister misiniz? -->
EOFYAML Tabanlı Issue Forms (Daha Modern)
GitHub artık Markdown yerine YAML tabanlı form templates de destekliyor:
cat > .github/ISSUE_TEMPLATE/bug_report.yml << 'EOF'
name: 🐛 Bug Report
description: Bir hata bildirin
title: "[BUG]: "
labels: ["bug", "needs-triage"]
body:
- type: markdown
attributes:
value: |
Bug bildirimi için teşekkürler! Lütfen aşağıdaki alanları doldurun.
- type: textarea
id: description
attributes:
label: Bug Açıklaması
description: Hatayı kısaca açıklayın
placeholder: Login butonuna tıklayınca sayfa çöküyor...
validations:
required: true
- type: textarea
id: steps
attributes:
label: Tekrarlama Adımları
description: Hatayı nasıl tekrarlayabiliriz?
value: |
1.
2.
3.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Beklenen Davranış
description: Ne olması gerekiyordu?
validations:
required: true
- type: dropdown
id: severity
attributes:
label: Ciddiyet
options:
- Kritik (Uygulama çöküyor)
- Yüksek (Özellik çalışmıyor)
- Orta (Geçici çözüm var)
- Düşük (Kozmetik)
validations:
required: true
- type: dropdown
id: browser
attributes:
label: Tarayıcı
multiple: true
options:
- Chrome
- Firefox
- Safari
- Edge
- Diğer
- type: textarea
id: screenshots
attributes:
label: Ekran Görüntüsü
description: Varsa sürükle-bırak ile ekleyin
EOFBu YAML form'unu kullanıcı açtığında şöyle bir form görür — düz metin yerine dropdown, checkbox, textarea gibi form elemanları gelir. Bu, özellikle açık kaynak projelerde bilgi kalitesini çok artırır.
Template Chooser
Birden fazla template varsa, kullanıcıya seçim ekranı gösterilir:
cat > .github/ISSUE_TEMPLATE/config.yml << 'EOF'
blank_issues_enabled: false # Boş issue açmayı kapat (template kullanmak zorunlu)
contact_links:
- name: 💬 Soru Sorun
url: https://github.com/username/project/discussions
about: Sorularınız için Discussions kullanın
- name: 📖 Dokümantasyon
url: https://docs.example.com
about: Belki cevap dokümantasyonda vardır
EOFBu yapılandırma ile "New issue" butonuna basıldığında:
┌─────────────────────────────────────────────────┐
│ Choose an issue template │
├─────────────────────────────────────────────────┤
│ │
│ 🐛 Bug Report [Get started] │
│ Bir hata bildirin │
│ │
│ ✨ Feature Request [Get started] │
│ Yeni bir özellik önerin │
│ │
│ 💬 Soru Sorun [Open →] │
│ Sorularınız için Discussions kullanın │
│ │
│ 📖 Dokümantasyon [Open →] │
│ Belki cevap dokümantasyonda vardır │
│ │
└─────────────────────────────────────────────────┘GitHub Projects — Kanban Board
GitHub Projects, issue'ları görsel bir panoda yönetmeni sağlar. Trello veya Jira'daki board'lar gibi düşün.
Projects v2 (Yeni Nesil)
GitHub'ın yeni Projects sistemi çok güçlü:
┌─────────────────────────────────────────────────────────────────┐
│ 📋 Project: E-Commerce v2.0 │
│ Views: Board | Table | Roadmap │
├──────────────┬──────────────┬──────────────┬───────────────────┤
│ 📋 Backlog │ 🔄 In Progress│ 👀 Review │ ✅ Done │
│ │ │ │ │
│ ┌────────┐ │ ┌────────┐ │ ┌────────┐ │ ┌────────┐ │
│ │ #30 │ │ │ #25 │ │ │ #22 │ │ │ #20 │ │
│ │ Search │ │ │ Cart │ │ │ Payment│ │ │ Auth │ │
│ │ 🟡 med │ │ │ 🟠 high│ │ │ 🔴 crit│ │ │ ✅ │ │
│ │ @ayse │ │ │ @ahmet │ │ │ @ali │ │ │ @ahmet │ │
│ └────────┘ │ └────────┘ │ └────────┘ │ └────────┘ │
│ │ │ │ │
│ ┌────────┐ │ ┌────────┐ │ │ ┌────────┐ │
│ │ #31 │ │ │ #27 │ │ │ │ #21 │ │
│ │ Filter │ │ │ Stock │ │ │ │ User │ │
│ │ 🟢 low │ │ │ 🟠 high│ │ │ │ ✅ │ │
│ └────────┘ │ └────────┘ │ │ └────────┘ │
│ │ │ │ │
│ ┌────────┐ │ │ │ ┌────────┐ │
│ │ #32 │ │ │ │ │ #19 │ │
│ │ Export │ │ │ │ │ Setup │ │
│ │ 🟢 low │ │ │ │ │ ✅ │ │
│ └────────┘ │ │ │ └────────┘ │
│ │ │ │ │
│ 3 items │ 2 items │ 1 item │ 3 items │
└──────────────┴──────────────┴──────────────┴───────────────────┘Project Oluşturma
Profil sayfanda veya organizasyon sayfasında Projects sekmesine git
New project butonuna tıkla
Template seç veya boş başla:
Templates:
📋 Board → Kanban tarzı (Backlog → In Progress → Done)
📊 Table → Spreadsheet tarzı (Excel gibi)
🗺️ Roadmap → Zaman çizelgesi (Gantt chart benzeri)
📋 Team Backlog → Ekip backlog yönetimiCustom Fields (Özel Alanlar)
Projects v2'de özel alanlar ekleyebilirsin:
Field Name Type Options
───────────── ──────── ───────────────────────
Status Single select Backlog, In Progress, Review, Done
Priority Single select 🔴 Critical, 🟠 High, 🟡 Medium, 🟢 Low
Sprint Iteration Sprint 1, Sprint 2, Sprint 3...
Estimate Number Story points (1, 2, 3, 5, 8, 13)
Start Date Date
Due Date Date
Team Single select Frontend, Backend, DevOps, DesignViews (Görünümler)
Aynı projeyi farklı açılardan görüntüleyebilirsin:
Board View: Kanban paneli — sürükle-bırak ile durum değiştir
Table View: Tablo — filtrele, sırala, grupla
Roadmap View: Zaman çizelgesi — start/end date'e göre timelineHer view'da farklı filtreler ve gruplamalar uygulayabilirsin:
View: "Backend Sprint 3"
Filter: label:area:backend AND milestone:Sprint-3
Group by: Priority
Sort by: Due date (ascending)Automation (Otomasyon)
GitHub Projects'te bazı otomasyonlar hazır gelir:
┌──────────────────────────────────────────────────────────┐
│ Otomasyonlar │
├──────────────────────────────────────────────────────────┤
│ │
│ ☑ Yeni eklenen item → "Backlog" durumuna al │
│ ☑ Issue kapandığında → "Done" durumuna taşı │
│ ☑ PR merge edildiğinde → "Done" durumuna taşı │
│ ☑ PR açıldığında → "In Progress" durumuna taşı │
│ │
└──────────────────────────────────────────────────────────┘Daha karmaşık otomasyonlar için GitHub Actions kullanabilirsin (Bölüm 8'de göreceğiz).
Issue Bağlantıları ve Referanslar
Issue'lar Arası Referans
# Aynı repo'da
Bu issue #42 ile ilişkili.
Bkz. #42
# Farklı repo'da
Bkz. username/other-repo#15
# Commit'ten issue'ya
# Commit mesajında:
git commit -m "Fix login validation, ref #42"Issue'yu Commit ile Kapatma
Commit mesajında belirli anahtar kelimeler kullanarak issue'yu otomatik kapatabilirsin:
# Bu anahtar kelimeler issue'yu kapatır:
git commit -m "Fix login bug, closes #42"
git commit -m "Resolve validation error, fixes #42"
git commit -m "Handle edge case, resolves #42"
# Birden fazla issue
git commit -m "Refactor auth module, closes #42, closes #43"💡 İpucu: Bu otomatik kapatma sadece varsayılan branch'e (main/master) merge edildiğinde çalışır. Feature branch'e push etmek issue'yu kapatmaz — PR merge edildiğinde kapanır.
Tasklist (Görev Listesi)
Issue içinde alt görevler oluşturabilirsin:
## Görevler
- [x] Veritabanı şemasını tasarla
- [x] API endpoint'lerini yaz
- [ ] Frontend formu oluştur
- [ ] Unit testleri yaz
- [ ] Dokümantasyonu güncelle
Progress: 2/5 (40%)GitHub bu checkboxları interaktif hale getirir — tıklayarak işaretleyebilirsin. Ve issue listesinde ilerleme çubuğu olarak görünür:
#42 E-Commerce checkout flow ████░░░░░░ 2/5 @ahmetIssue'yu PR ile İlişkilendirme
Issue #42 ◄──── linked ────► PR #47
Bağlantı yöntemleri:
1. PR açıklamasında "Closes #42" yaz
2. PR'ın sağ panelinde "Linked issues" bölümünden bağla
3. Issue sayfasında "Development" bölümünden PR oluşturIssue Arama ve Filtreleme
GitHub'ın güçlü arama sözdizimi ile issue'ları filtreleyebilirsin:
# Temel filtreler
is:open # Açık issue'lar
is:closed # Kapalı issue'lar
is:issue # Sadece issue'lar (PR hariç)
is:pr # Sadece PR'lar
# Label filtresi
label:bug # "bug" label'ı olan
label:"priority:high" # "priority:high" label'ı olan
-label:wontfix # "wontfix" label'ı OLMAYAN
# Kişi filtresi
author:ahmet # ahmet'in oluşturduğu
assignee:ayse # ayse'ye atanmış
mentions:ali # ali'den bahseden
involves:veli # veli'nin dahil olduğu (author/assignee/mention)
# Milestone filtresi
milestone:"v2.0" # v2.0 milestone'ına ait
no:milestone # Milestone'ı olmayan
# Tarih filtresi
created:>2025-01-01 # 2025'ten sonra oluşturulan
updated:<2024-06-01 # 6 aydan önce güncellenen
closed:2025-01-01..2025-01-31 # Ocak'ta kapanan
# Birleşik filtre
is:open label:bug assignee:@me sort:created-desc💡 İpucu: Sık kullandığın filtreleri URL olarak kaydet. Örneğin:
https://github.com/username/project/issues?q=is:open+label:bug+assignee:@me— bu URL'yi bookmark yapabilirsin.
Issue Best Practices
İyi Bir Issue Nasıl Yazılır?
1. AÇIK VE SPESIFIK BAŞLIK
❌ "Bug var"
❌ "Çalışmıyor"
✅ "Login sayfası: geçersiz e-posta girilince 500 hatası"
✅ "Dashboard: grafik verileri 24 saatten eski gösteriyor"
2. TEKRARLANABILIR ADIMLAR (Bug için)
❌ "Bazen çöküyor"
✅ "1. Login ol 2. Dashboard'a git 3. 'Export' tıkla 4. Çöküyor"
3. BEKLENEN vs GERÇEKLEŞEN
Ne olması gerekiyordu? Ne oldu? Aradaki farkı net yaz.
4. ORTAM BİLGİSİ
Tarayıcı, OS, uygulama sürümü, ekran boyutu...
5. EKRAN GÖRÜNTÜSÜ / LOG
"Bir resim bin kelimeye bedel" — özellikle UI bug'ları için
6. BİR ISSUE = BİR KONU
❌ "Login bozuk, ayrıca dashboard yavaş, bir de şu butonu değiştirelim"
✅ Her konu için ayrı issue açIssue Triage (Sınıflandırma)
Yeni gelen issue'ları sınıflandırma süreci:
Yeni Issue Geldi
│
▼
Geçerli mi? ──── Hayır ──► invalid/duplicate label → kapat
│
Evet
▼
Tür ne? ──── Bug ──────► bug label + öncelik belirle
│ Feature ──► enhancement label
│ Soru ────► question label (veya Discussions'a yönlendir)
│
▼
Öncelik? ──── Critical ──► Hemen ata
│ High ──────► Bu sprint'e ekle
│ Medium ────► Backlog'a al
│ Low ───────► Backlog'a al, zaman oldukça
│
▼
Kime ait? ──► Assignee ata, milestone belirle
│
▼
needs-triage label'ını kaldır ✅Discussions — Tartışma Alanı
GitHub Issues belirli görevler (bug, feature) için idealdir. Ama bazen daha genel tartışmalar, sorular, fikirler için bir alan gerekir. İşte Discussions bunun için var.
Issues → Spesifik, aksiyonlanabilir görevler
"Login butonu çalışmıyor" → Bug fix → Kapat
Discussions → Genel tartışmalar, sorular, fikirler
"Hangi state management kütüphanesini kullanalım?"
"Yeni logo tasarımları hakkında fikirleriniz?"Discussion Kategorileri
📣 Announcements → Duyurular (sadece maintainer'lar açabilir)
💬 General → Genel tartışma
💡 Ideas → Fikirler ve öneriler
🙏 Q&A → Soru-cevap (cevap işaretlenebilir)
🗳️ Polls → Oylama
🙌 Show and Tell → Projelerini göster💡 İpucu: Açık kaynak projeler için Discussions'ı etkinleştir. Issue tracker'ı temiz tutar — gerçek bug'lar ve feature request'ler issue olarak kalır, sorular ve tartışmalar Discussions'a yönlendirilir.
Pratik: Proje Yönetim Sistemi Kurma
Tüm öğrendiklerini bir araya getirerek bir proje yönetim sistemi kuralım:
# 1. Issue template'leri oluştur
mkdir -p .github/ISSUE_TEMPLATE
# Bug report template (zaten yukarıda yazdık)
# Feature request template (zaten yukarıda yazdık)
# 2. Config dosyası
cat > .github/ISSUE_TEMPLATE/config.yml << 'EOF'
blank_issues_enabled: false
contact_links:
- name: 💬 Soru Sorun
url: https://github.com/username/project/discussions
about: Sorularınız için Discussions kullanın
EOF
# 3. Label'ları oluştur
gh label create "priority:critical" --color "B60205" --description "Üretimi etkiliyor"
gh label create "priority:high" --color "D93F0B" --description "Bu sprint'te çözülmeli"
gh label create "priority:medium" --color "FBCA04" --description "Planlanmalı"
gh label create "priority:low" --color "0E8A16" --description "Zaman oldukça"
gh label create "area:frontend" --color "1D76DB" --description "Frontend"
gh label create "area:backend" --color "5319E7" --description "Backend"
gh label create "status:in-progress" --color "0075CA" --description "Üzerinde çalışılıyor"
gh label create "needs-triage" --color "D876E3" --description "Sınıflandırılmamış"
# 4. Milestone oluştur (web arayüzünden)
# v1.0 MVP — Due: 2025-03-31
# v1.1 Stabilizasyon — Due: 2025-04-30
# 5. Birkaç issue oluştur
gh issue create \
--title "[FEATURE] Kullanıcı kayıt sistemi" \
--body "JWT tabanlı auth sistemi gerekli" \
--label "enhancement,area:backend,priority:high" \
--milestone "v1.0"
gh issue create \
--title "[BUG] Anasayfa yükleme süresi çok uzun" \
--body "3 saniyeden fazla sürüyor, optimize edilmeli" \
--label "bug,area:frontend,priority:medium" \
--milestone "v1.1"
# 6. Project oluştur (web arayüzünden)
# Board view: Backlog → In Progress → Review → Done
# Issue'ları sürükle-bırak ile taşı
# 7. Commit'lerle issue'ları kapat
git commit -m "feat: add user registration, closes #1"Özet
Bu derste GitHub'ın proje yönetim araçlarını derinlemesine öğrendik:
Issues, projedeki bug'ları, özellik isteklerini ve görevleri takip etmenin temel yoludur — her issue bir görev, bir konuşma ve bir tarihçedir
Labels ile issue'ları kategorize edersin: tür (bug, feature), öncelik (critical, high), alan (frontend, backend) — renkli etiketler görsel organizasyon sağlar
Milestones ile issue'ları sürümlere veya hedeflere bağlarsın — v1.0'a ne kadar yakınsın bir bakışta görürsün
Issue Templates ile kullanıcılardan doğru bilgiyi doğru formatta alırsın — YAML forms ile dropdown ve checkbox bile ekleyebilirsin
GitHub Projects (Kanban) ile issue'ları görsel panoda yönetirsin — Board, Table ve Roadmap view'ları ile farklı perspektiflerden bakarsın
Discussions genel tartışmalar için ayrı bir alan sağlar — issue tracker'ı temiz tutar
Bir sonraki derste kod kalitesini artıran en önemli pratiklerden birini göreceğiz: Code Review.
AI Asistan
Sorularını yanıtlamaya hazır