← Kursa Dön
📄 Text · 30 min

GitHub Nedir?

Giriş — Kod Neden Bir Eve İhtiyaç Duyar?

Git ile projelerini yerel bilgisayarında takip edebilirsin — commit'ler atarsın, branch'ler oluşturursun, tarihçeyi yönetirsin. Ama bir düşün: bilgisayarın bozulursa ne olacak? Ekibindeki bir geliştiriciyle aynı proje üzerinde çalışman gerekirse? Ya da dünyanın öbür ucundaki biri senin açık kaynak projene katkı yapmak isterse?

İşte tam burada uzak bir barınma noktasına — bir hosting platformuna — ihtiyaç duyarsın. Ve bu platformların en popüleri, en geniş topluluğa sahip olanı: GitHub.

Bu derste GitHub'ın ne olduğunu, rakiplerinden nasıl ayrıştığını, nasıl bir repository oluşturacağını ve her projenin olmazsa olmazları olan README ve LICENSE dosyalarını öğreneceksin.


GitHub: Git'in Sosyal Ağı

Analoji — Kütüphane ve Kütüphaneci

Git'i bir kişisel defter gibi düşün. İçine notlar alırsın, sayfaları düzenlersin, bazı sayfaları yırtıp yeniden yazarsın. Ama bu defter sadece sende.

GitHub ise bir kütüphane. Defterinin bir kopyasını buraya koyarsın. Herkes görebilir (public ise), okuyabilir, hatta "şu sayfayı şöyle değiştirsen daha iyi olur" diye öneri sunabilir. Kütüphaneci (GitHub) ise bu süreçleri kolaylaştırır: kimlerin ne değiştirdiğini takip eder, tartışma ortamı sağlar, otomatik kalite kontrolleri yapar.

Git = versiyon kontrol aracı (yerel). GitHub = Git repository'lerini barındıran, işbirliği ve proje yönetimi sağlayan web platformu.

GitHub Ne Sağlar?

GitHub, Git'in üzerine şu katmanları ekler:

ÖzellikGit (Tek Başına)GitHub (Platform)
Versiyon kontrolü
Uzak yedekleme
Ekip işbirliği✅ (PR, review, teams)
Issue takibi
CI/CD (otomasyon)✅ (GitHub Actions)
Sosyal özellikler✅ (star, fork, follow)
Web arayüzü
Paket barındırma✅ (GitHub Packages)
Güvenlik taraması✅ (Dependabot, secret scanning)

Kısa Tarihçe

  • 2008 — Tom Preston-Werner, Chris Wanstrath, PJ Hyett ve Scott Chacon tarafından kuruldu

  • 2008-2018 — Açık kaynak topluluğunun kalbi haline geldi

  • 2018 — Microsoft, GitHub'ı 7.5 milyar dolara satın aldı

  • 2020 — GitHub, npm'i bünyesine kattı

  • 2021 — GitHub Copilot duyuruldu (AI destekli kod yazma)

  • 2024 — 100 milyondan fazla geliştirici, 400 milyondan fazla repository

💡 Bilgi: Bugün neredeyse tüm büyük açık kaynak projeler (Linux kernel, React, VS Code, TensorFlow, Kubernetes…) GitHub üzerinde barınıyor.


GitHub vs GitLab vs Bitbucket

GitHub tek seçenek değil. Rakipleri de güçlü platformlar. Hangisini seçmen gerektiğini anlamak için karşılaştıralım:

Genel Karşılaştırma

┌─────────────────┬──────────────┬──────────────┬──────────────┐
│   Özellik       │   GitHub     │   GitLab     │  Bitbucket   │
├─────────────────┼──────────────┼──────────────┼──────────────┤
│ Kurucu          │ 2008         │ 2011         │ 2008         │
│ Sahip           │ Microsoft    │ GitLab Inc.  │ Atlassian    │
│ Topluluk        │ En büyük     │ Büyük        │ Orta         │
│ CI/CD           │ Actions      │ GitLab CI    │ Pipelines    │
│ Self-hosted     │ Enterprise   │ CE/EE (ücretsiz)│ Data Center│
│ Ücretsiz Plan   │ Cömert       │ Cömert       │ 5 kullanıcı  │
│ Entegrasyon     │ Geniş        │ Dahili       │ Jira/Trello  │
│ Açık Kaynak     │ Merkez       │ Güçlü        │ Zayıf        │
│ Container Reg.  │ ✅           │ ✅           │ ❌           │
│ Wiki            │ ✅           │ ✅           │ ✅           │
│ Paket Registry  │ ✅           │ ✅           │ ❌           │
└─────────────────┴──────────────┴──────────────┴──────────────┘

GitHub'ın Güçlü Yanları

  1. En büyük topluluk — Açık kaynak projelerin büyük çoğunluğu burada

  2. GitHub Actions — Güçlü ve esnek CI/CD

  3. GitHub Copilot — AI destekli geliştirme deneyimi

  4. Zengin entegrasyon — Binlerce 3rd party araçla uyumlu (Slack, Jira, Vercel, Netlify…)

  5. GitHub Pages — Ücretsiz statik site barındırma

  6. Marketplace — Hazır action'lar ve uygulamalar

GitLab'ın Güçlü Yanları

  1. Dahili DevOps — CI/CD, container registry, monitoring hepsi tek platformda

  2. Self-hosted (ücretsiz) — Community Edition ile kendi sunucunda çalıştırabilirsin

  3. DevSecOps — SAST, DAST, dependency scanning dahili

  4. Kubernetes entegrasyonu — Auto DevOps ile otomatik deploy

Bitbucket'ın Güçlü Yanları

  1. Atlassian ekosistemi — Jira, Confluence, Trello ile derin entegrasyon

  2. Bitbucket Pipelines — Basit CI/CD

  3. Kurumsal tercih — Zaten Jira kullanan şirketler için doğal seçim

Hangisini Seçmeli?

Açık kaynak proje?           → GitHub (topluluk en büyük)
Self-hosted istiyorsun?      → GitLab CE (ücretsiz, tam özellikli)
Jira kullanıyorsun?          → Bitbucket (doğal entegrasyon)
Startup / küçük ekip?        → GitHub veya GitLab (ikisi de cömert)
Enterprise / büyük şirket?   → Hepsi seçenek, ekosisteme bağlı
Portföy / kariyer?           → GitHub (recruiter'lar buraya bakar)

💡 İpucu: Bir geliştirici olarak en azından GitHub'ı bilmelisin. Sektörde fiili standart haline geldi. GitLab ise özellikle DevOps-yoğun ekiplerde çok tercih ediliyor.


GitHub Hesabı ve İlk Repository

Hesap Türleri

GitHub'da üç tür hesap var:

TürAçıklamaÜcret
FreeSınırsız public/private repo, 3 collaborator (private)Ücretsiz
ProCode review araçları, insights, wiki$4/ay
TeamOrganizasyon yönetimi, team review, advanced audit$4/kullanıcı/ay
EnterpriseSAML SSO, advanced security, compliance$21/kullanıcı/ay

💡 İpucu: Öğrenciysen GitHub Student Developer Pack ile Pro özellikleri ücretsiz alabilirsin. .edu uzantılı e-posta adresi yeterli.

Yeni Repository Oluşturma (Web Arayüzü)

GitHub'da yeni bir repo oluşturmak için:

  1. Sağ üst köşedeki + butonuna tıkla → New repository

  2. Ayarları doldur:

Repository name:    my-awesome-project
Description:        Harika projemin açıklaması
Visibility:         ◉ Public  ○ Private
                    
Initialize this repository with:
☑ Add a README file
☑ Add .gitignore    →  Node  (template seç)
☑ Choose a license  →  MIT License
  1. Create repository butonuna bas

Yeni Repository Oluşturma (Terminal)

Eğer projeyi önce yerelde oluşturup sonra GitHub'a göndermek istiyorsan:

# 1. Proje dizinini oluştur ve Git'i başlat
mkdir my-awesome-project
cd my-awesome-project
git init

# 2. İlk dosyaları oluştur
echo "# My Awesome Project" > README.md
echo "node_modules/" > .gitignore

# 3. İlk commit
git add .
git commit -m "Initial commit"

# 4. GitHub'da boş bir repo oluştur (web'den veya CLI ile)
# Sonra remote olarak ekle
git remote add origin git@github.com:username/my-awesome-project.git

# 5. Push et
git push -u origin main

Terminal çıktısı şöyle görünür:

Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 320 bytes | 320.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To github.com:username/my-awesome-project.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

GitHub CLI ile Repository Oluşturma

GitHub CLI (gh) ile terminal'den hiç web'e gitmeden repo oluşturabilirsin:

# GitHub CLI kurulumu (bir kez yapılır)
# macOS: brew install gh
# Ubuntu: sudo apt install gh
# Windows: winget install GitHub.cli

# Giriş yap
gh auth login

# Yeni repo oluştur (interaktif)
gh repo create my-awesome-project --public --clone

# Veya mevcut dizini GitHub'a yükle
cd existing-project
gh repo create --source=. --public --push

Interaktif modda gh repo create şöyle sorular sorar:

? What would you like to do?  Create a new repository on GitHub from scratch
? Repository name:            my-awesome-project
? Description:                Harika projem
? Visibility:                 Public
? Would you like to add a README file?    Yes
? Would you like to add a .gitignore?     Yes
? Choose a .gitignore template:           Node
? Would you like to add a license?        Yes
? Choose a license:                       MIT License
? This will create "my-awesome-project" as a public repository on GitHub. Continue?  Yes
✓ Created repository username/my-awesome-project on GitHub
✓ Cloned fork

💡 İpucu: gh CLI, GitHub'ın resmi komut satırı aracıdır. PR oluşturma, issue yönetimi, workflow tetikleme gibi birçok işlemi terminal'den yapabilirsin. İlerleyen derslerde sıkça kullanacağız.


Public vs Private Repository

Public Repository

  • Herkes görebilir ve klonlayabilir

  • Açık kaynak projeler için ideal

  • GitHub'ın ücretsiz planında sınırsız

  • Google gibi arama motorlarında çıkabilir

  • Portföy için harika

Private Repository

  • Sadece sen ve davet ettiğin kişiler görebilir

  • Şirket projeleri, kişisel deneysel çalışmalar için

  • Ücretsiz planda da sınırsız (eskiden sınırlıydı)

  • Collaborator ekleme ile ekip çalışması yapılabilir

Ne Zaman Public, Ne Zaman Private?

Public yapmalısın:
  ✅ Açık kaynak proje
  ✅ Portföy projesi (iş başvurularında göstermek için)
  ✅ Eğitim materyali, tutorial
  ✅ Kütüphane / framework

Private yapmalısın:
  🔒 Şirket kodu
  🔒 API anahtarları içeren yapılandırmalar
  🔒 Müşteri verileri içeren projeler
  🔒 Henüz hazır olmayan, deneysel çalışmalar

⚠️ Dikkat: Public bir repo'yu private yapabilirsin, private bir repo'yu da public yapabilirsin. Ama bir kez public olan repo fork'lanmış ve klonlanmış olabilir. Geri dönüşü olmayan bir "bell" (çan) gibi — çaldıktan sonra sesi geri alamazsın. Hassas bilgi içeren repo'yu asla public yapma!


README.md — Projenin Vitrini

Neden README Önemli?

Bir projenin GitHub sayfasına girdiğinde ilk gördüğün şey README.md dosyasıdır. Bu dosya projenin vitrini, kartviziti, ilk izlenimidir.

Düşün: bir dükkanın önünden geçiyorsun. Vitrinde hiçbir şey yok, kapıda tabela yok, içerisi karanlık. Girer misin? Muhtemelen hayır. İşte README'siz bir proje de tam böyle görünür.

İyi Bir README Ne İçermeli?

İşte profesyonel bir README'nin anatomisi:

# 🚀 Proje Adı

Kısa ve öz bir açıklama — bu proje ne yapıyor, neden önemli.

![Build Status](https://img.shields.io/github/actions/workflow/status/user/repo/ci.yml)
![License](https://img.shields.io/github/license/user/repo)
![Version](https://img.shields.io/github/v/release/user/repo)

## 📋 İçindekiler

- [Özellikler](#özellikler)
- [Kurulum](#kurulum)
- [Kullanım](#kullanım)
- [API Referansı](#api-referansı)
- [Katkı Sağlama](#katkı-sağlama)
- [Lisans](#lisans)

## ✨ Özellikler

- 🔥 Hızlı ve hafif
- 🎨 Özelleştirilebilir temalar
- 📱 Responsive tasarım
- 🔒 Güvenli kimlik doğrulama

## 🛠️ Kurulum

### Gereksinimler

- Node.js >= 18
- npm veya yarn

### Adımlar

\```bash
# Repo'yu klonla
git clone https://github.com/username/project.git
cd project

# Bağımlılıkları yükle
npm install

# Geliştirme sunucusunu başlat
npm run dev
\```

## 📖 Kullanım

\```javascript
import { createApp } from './app';

const app = createApp({
  port: 3000,
  database: 'mongodb://localhost/mydb'
});

app.start();
\```

## 🤝 Katkı Sağlama

Katkılarınızı bekliyoruz! Lütfen [CONTRIBUTING.md](CONTRIBUTING.md)
dosyasını okuyun.

1. Fork edin
2. Feature branch oluşturun (`git checkout -b feature/amazing-feature`)
3. Commit edin (`git commit -m 'feat: Add amazing feature'`)
4. Push edin (`git push origin feature/amazing-feature`)
5. Pull Request açın

## 📄 Lisans

Bu proje [MIT](LICENSE) lisansı altında dağıtılmaktadır.

README İpuçları

  1. İlk paragraf çok önemli — Projenin ne yaptığını 1-2 cümlede anlat

  2. Badge'ler güven verir — Build durumu, test coverage, lisans badge'leri ekle

  3. Kurulum adımları net olsun — Copy-paste ile çalışmalı

  4. Ekran görüntüsü / GIF — Görsel içerik, bin kelimeye bedel

  5. Güncel tut — Eski README, bakımsız proje izlenimi verir

İyi README = Daha fazla yıldız ⭐
           = Daha fazla katkıcı 🧑‍💻
           = Daha fazla kullanıcı 👥
           = Daha iyi kariyer fırsatları 💼

LICENSE — Kodunun Hukuki Kimliği

Neden Lisans Gerekli?

İşte çoğu yeni geliştiricinin bilmediği bir gerçek: lisans dosyası olmayan bir repo'nun kodu hukuki olarak "tüm hakları saklı"dır. Yani lisans koymadığın sürece, kimse kodunu yasal olarak kullanamaz, kopyalayamaz, değiştiremez.

"Ama ben public yaptım, herkes görsün istedim?" — Evet, görebilirler ama yasal olarak kullanamaz, dağıtamaz, ticari projede kullanamazlar. İşte bu yüzden açık kaynak projeler mutlaka bir lisans dosyasına sahip olmalı.

Popüler Lisanslar

┌──────────────────────────────────────────────────────────────┐
│                     LISANS SEÇİM REHBERİ                    │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  "Herkes istediği gibi kullansın"                           │
│  ──→ MIT License                                            │
│      En özgür, en basit. Ticari kullanım serbest.           │
│      Sadece lisans metnini korusun yeter.                   │
│      Kullananlar: React, Rails, jQuery, .NET                │
│                                                              │
│  "Kullansınlar ama patent koruması da olsun"                │
│  ──→ Apache License 2.0                                     │
│      MIT gibi ama patent hakları da tanımlı.                │
│      Büyük şirketler için güvenli.                          │
│      Kullananlar: Android, Kubernetes, TensorFlow           │
│                                                              │
│  "Türev çalışmalar da açık kaynak olsun"                    │
│  ──→ GPL v3                                                 │
│      Copyleft: değiştirip dağıtırsan, senin kodun da        │
│      GPL olmak zorunda.                                      │
│      Kullananlar: Linux kernel, WordPress, GIMP             │
│                                                              │
│  "Kütüphane olarak kullansınlar, copyleft bulaşmasın"       │
│  ──→ LGPL                                                   │
│      GPL'in yumuşak hali. Linkleyebilirsin ama              │
│      kütüphanenin kendisindeki değişiklikler açık kalmalı.  │
│                                                              │
│  "Sadece eğitim/kişisel kullanım olsun"                     │
│  ──→ Creative Commons (CC BY-NC)                            │
│      Kod için değil, dokümantasyon ve içerik için ideal.    │
│                                                              │
│  "Lisans umurumda değil, tamamen serbest"                   │
│  ──→ The Unlicense / WTFPL                                  │
│      Public domain — hiçbir koşul yok.                      │
│                                                              │
└──────────────────────────────────────────────────────────────┘

Pratikte Lisans Seçimi

# GitHub'da repo oluştururken lisans seçebilirsin
# Ya da sonradan ekleyebilirsin:

# Yöntem 1: GitHub web arayüzünden
# Repo → Add file → Create new file → "LICENSE" yaz
# GitHub otomatik olarak lisans template'leri sunar

# Yöntem 2: Terminal'den
# MIT lisansı eklemek için:
cat > LICENSE << 'EOF'
MIT License

Copyright (c) 2025 Your Name

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
EOF

git add LICENSE
git commit -m "Add MIT License"

⚠️ Dikkat: Lisansı sonradan değiştirmek, özellikle daha kısıtlayıcı bir lisansa geçmek, zor ve tartışmalı olabilir. Projenin başında doğru lisansı seçmek önemlidir.

Hızlı Karar Tablosu

SoruCevabınızÖnerilen Lisans
Ticari kullanıma açık olsun mu?EvetMIT veya Apache 2.0
Türev çalışmalar da açık kaynak olmalı mı?EvetGPL v3
Patent koruması gerekli mi?EvetApache 2.0
Maksimum özgürlük?EvetMIT veya Unlicense
Kütüphane/framework?EvetMIT veya Apache 2.0
Uygulama/platform?Eğer copyleft istiyorsanızAGPL v3

Repository Yapısı ve Best Practices

Tipik Bir Proje Yapısı

my-project/
├── .github/                    # GitHub'a özel dosyalar
│   ├── workflows/             # GitHub Actions workflow'ları
│   │   └── ci.yml
│   ├── ISSUE_TEMPLATE/        # Issue template'leri
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── CODEOWNERS
├── src/                       # Kaynak kod
│   ├── index.js
│   └── utils/
├── tests/                     # Testler
│   └── index.test.js
├── docs/                      # Dokümantasyon
│   └── api.md
├── .gitignore                 # Git'in takip etmeyeceği dosyalar
├── .editorconfig              # Editör ayarları
├── README.md                  # Projenin vitrini
├── LICENSE                    # Lisans
├── CONTRIBUTING.md            # Katkı sağlama rehberi
├── CHANGELOG.md               # Değişiklik günlüğü
├── package.json               # (Node.js projesi ise)
└── .env.example               # Ortam değişkenleri örneği

Önemli Dosyalar

DosyaAmaç
README.mdProjenin tanıtımı, kurulum ve kullanım bilgisi
LICENSEHukuki lisans bilgisi
CONTRIBUTING.mdKatkı sağlamak isteyenler için rehber
CHANGELOG.mdSürüm bazında değişiklik listesi
CODE_OF_CONDUCT.mdTopluluk davranış kuralları
.gitignoreGit'in görmezden geleceği dosyalar
CODEOWNERSHangi dosyaların kimin sorumluluğunda olduğu
.editorconfigEditörler arası tutarlı format ayarları
.env.exampleOrtam değişkenleri şablonu (gerçek .env'yi commit'leme!)

⚠️ Dikkat: .env dosyasını asla commit'leme! API anahtarları, şifreler gibi hassas bilgiler içerir. .gitignore dosyana .env satırını ekle. Bunun yerine .env.example dosyasını paylaş — değerleri boş bırak veya placeholder koy.


GitHub Profil README

GitHub'ın az bilinen ama çok güçlü bir özelliği var: kullanıcı adınla aynı isimde bir repo oluşturduğunda, o repo'nun README'si profil sayfanda görünür!

# Kullanıcı adın "tolgahan" ise:
# "tolgahan" adında bir repo oluştur
# README.md dosyasını düzenle — profil sayfanda görünecek!

Profil README Örneği

# Merhaba! 👋 Ben Tolgahan

🎓 Bilgisayar Mühendisliği öğrencisi
💻 Full-stack web geliştirici
🌱 Şu an Rust ve sistem programlama öğreniyorum
📫 Bana ulaşın: tolgahan@email.com

## 🔧 Teknolojiler

![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)
![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?style=flat&logo=typescript&logoColor=white)
![React](https://img.shields.io/badge/-React-61DAFB?style=flat&logo=react&logoColor=black)
![Node.js](https://img.shields.io/badge/-Node.js-339933?style=flat&logo=node.js&logoColor=white)

## 📊 GitHub İstatistiklerim

![GitHub Stats](https://github-readme-stats.vercel.app/api?username=tolgahan&show_icons=true&theme=radical)

GitHub'ın Temel Bileşenleri — Büyük Resim

Daha sonraki derslerde derinlemesine göreceğimiz ama şimdiden bilmen gereken GitHub bileşenleri:

┌─────────────────────────────────────────────────────────┐
│                      GITHUB                              │
│                                                          │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │ Repositories │  │ Pull Request │  │    Issues     │  │
│  │   (Depolar)  │  │   (PR/İstek) │  │ (Sorun/Görev)│  │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘  │
│         │                 │                  │          │
│  ┌──────┴───────┐  ┌──────┴───────┐  ┌──────┴───────┐  │
│  │   Actions    │  │   Projects   │  │  Discussions  │  │
│  │  (CI/CD)     │  │  (Kanban)    │  │ (Tartışmalar)│  │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘  │
│         │                 │                  │          │
│  ┌──────┴───────┐  ┌──────┴───────┐  ┌──────┴───────┐  │
│  │   Packages   │  │    Pages     │  │   Security   │  │
│  │ (Paketler)   │  │  (Web Site)  │  │  (Güvenlik)  │  │
│  └──────────────┘  └──────────────┘  └──────────────┘  │
│                                                          │
└─────────────────────────────────────────────────────────┘

Her bir bileşen ilerleyen derslerde detaylı olarak işlenecek. Şimdilik büyük resmi gördüğüne emin ol.


Repository Ayarları

Bir repository oluşturduktan sonra ayarlar sekmesinden birçok önemli yapılandırma yapabilirsin:

Genel Ayarlar (Settings → General)

Repository name:     Değiştirilebilir (eski URL redirect olur)
Description:         Kısa açıklama (arama sonuçlarında görünür)
Website:             Projenin web sitesi URL'si
Topics:              Etiketler (javascript, react, api vb.)
                     → Keşfedilebilirliği artırır!

Tehlikeli Bölge (Danger Zone)

Change visibility:   Public ↔ Private geçiş
Transfer ownership:  Repo'yu başka kullanıcıya/organizasyona transfer et
Archive repository:  Salt okunur yap (development bitti)
Delete repository:   Kalıcı silme (geri dönüşü yok!)

Branch Protection (Kısaca)

Settings → Branches → Branch protection rules:

☑ Require pull request before merging
  ☑ Require approvals (min 1 review)
☑ Require status checks to pass before merging
  ☑ Require branches to be up to date
☑ Do not allow bypassing the above settings

Bu ayarları Code Review ve CI/CD derslerinde detaylı göreceğiz.


Yaygın Hatalar ve Çözümleri

1. Yanlışlıkla Hassas Bilgi Push'lama

# ❌ YANLIŞ — .env dosyasını commit'ledin!
git add .
git commit -m "Add config"
git push

# Bu noktada API anahtarın GitHub'da herkesin göreceği şekilde duruyor!

# ✅ ÇÖZÜM — Geçmişten temizle
# (İleri derslerde git filter-repo ile detaylı göreceğiz)
# Şimdilik en güvenli yol: anahtarı iptal et, yenisini oluştur
# Ve .gitignore'a ekle:
echo ".env" >> .gitignore

2. main vs master Karışıklığı

# Eski Git sürümleri varsayılan branch'i "master" olarak oluşturur
# GitHub ise 2020'den beri "main" kullanır

# Varsayılan branch adını değiştir:
git config --global init.defaultBranch main

# Mevcut repo'da branch adını değiştir:
git branch -m master main
git push -u origin main

3. Fork ile Clone Karışıklığı

# Clone: Repo'nun bir kopyasını indirirsin, push yetkisi repo'nun
# sahibinin sana verdiği izne bağlıdır

# Fork: GitHub üzerinde repo'nun SENIN hesabına bir kopyasını oluşturur
# Bu kopya tamamen senin — istediğin gibi push edersin
# Sonra orijinal repo'ya Pull Request açarsın

# Fork → Clone → Branch → Commit → Push → PR
# Bu, açık kaynak katkı workflow'unun temelidir

Pratik: GitHub'da İlk Projen

Şimdi öğrendiklerini pratiğe dökelim:

# 1. Yerelde proje oluştur
mkdir my-first-github-project
cd my-first-github-project
git init

# 2. README oluştur
cat > README.md << 'EOF'
# 🎯 My First GitHub Project

Bu proje Git & GitHub kursundaki ilk GitHub projemdir.

## Ne Öğrendim?
- GitHub'da repository oluşturmayı
- README.md yazmayı
- LICENSE seçmeyi
- .gitignore kullanmayı

## Kurulum
```bash
git clone https://github.com/KULLANICI_ADI/my-first-github-project.git

Lisans

MIT License EOF

3. .gitignore oluştur

cat > .gitignore << 'EOF' # Dependencies node_modules/

Environment

.env .env.local

IDE

.vscode/ .idea/

OS

.DS_Store Thumbs.db

Build

dist/ build/ EOF

4. Basit bir kaynak dosya

cat > index.js << 'EOF' // İlk GitHub projem! console.log("Merhaba GitHub! 🚀"); EOF

5. Commit ve push

git add . git commit -m "Initial commit: README, .gitignore, and first code"

6. GitHub'da repo oluştur ve push et

gh repo create my-first-github-project --public --source=. --push


---

## Özet

Bu derste GitHub dünyasına ilk adımı attık. İşte öğrendiklerimiz:

- **GitHub**, Git repository'lerini barındıran ve işbirliğini kolaylaştıran bir platformdur — Git'in kendisi değil, Git'in üzerine kurulu bir ekosistemdir
- **GitHub vs GitLab vs Bitbucket** karşılaştırmasında GitHub topluluk büyüklüğüyle öne çıkarken, GitLab dahili DevOps özellikleriyle, Bitbucket ise Atlassian entegrasyonuyla parlar
- **Public repo'lar** herkesin görebildiği, **private repo'lar** sadece davet edilenlerin erişebildiği depolardır
- **README.md** projenin vitrinidir — ilk izlenim burada oluşur, iyi bir README proje, kurulum bilgisi ve kullanım örnekleri içermelidir
- **LICENSE** dosyası kodunun hukuki kimliğidir — lisanssız kod "tüm hakları saklı" demektir, açık kaynak için mutlaka lisans ekle
- **Repository yapısı** düzenli olmalı — `.gitignore`, `CONTRIBUTING.md`, `CHANGELOG.md` gibi standart dosyalar profesyonellik göstergesidir
- **GitHub CLI** (`gh`) ile terminal'den ayrılmadan repo oluşturabilir, yönetebilirsin

Bir sonraki derste GitHub'ın en güçlü işbirliği aracını göreceğiz: **Pull Request** (PR).