Clone, fork ve upstream sync
Clone, fork and upstream synchronization
Bu derste neler öğreneceksin
- Clone ile fork arasındaki temel farkı açıklamak
- Fork'ta upstream remote nasıl eklenir ve senkronize edilir?
- Açık kaynak katkı workflow'unu (fork → branch → PR) açıklamak
- Sınav tuzaklarını (fork'un kopyası gerçek zamanlı değil) bilmek
Clone ve fork sık karıştırılan iki kavramdır. Clone bir reponun yerel kopyasıdır; fork GitHub’da başka kullanıcının reposunun kendi hesabına kopyasıdır. Açık kaynak katkı döngüsünü anlamak için ikisini birlikte bilmek gerekir.
Clone nedir?
git clone bir GitHub reposunun tam kopyasını yerel makinene indirir. Clone edilen repo ile GitHub arasında origin adlı remote bağlantı otomatik kurulur.
# HTTPS ile clone
git clone https://github.com/owner/repo.git
# SSH ile clone
git clone git@github.com:owner/repo.git
# Belirli bir directory adıyla clone
git clone https://github.com/owner/repo.git my-local-dir
# Belirli bir branch'i clone
git clone --branch develop https://github.com/owner/repo.git
Clone işlemi şunları indirir:
- Tüm dosyalar
- Tüm commit geçmişi
- Tüm branch’ler (ancak local’de sadece default görünür, diğerleri remote tracking’te)
- Tag’ler
Fork nedir?
Fork, başka birinin GitHub reposunu kendi GitHub hesabına kopyalar. Fork:
- GitHub sunucusunda gerçekleşir (yerel değil)
- Orijinal repoyla upstream ilişkisi taşır
- Bağımsız bir repo olur — kendi branch’lerin, ayarların olur
- Orijinal repoya doğrudan erişim olmadan katkı yapmanı sağlar
Web UI’da “Fork” butonu. CLI ile:
gh repo fork owner/repo
# Otomatik olarak fork'u clone eder ve upstream'i ayarlar
Açık kaynak katkı döngüsü
- Fork: Orijinal repoyu kendi hesabına kopyala
- Clone: Fork’unu yerel makinene indir
- Branch: Yeni feature branch aç
- Değişiklik yap ve commit et
- Push: Fork’una push et
- PR aç: Fork’undan orijinal repoya (upstream → base repo)
git clone https://github.com/MY-USER/forked-repo.git
cd forked-repo
git switch -c fix/typo-in-readme
# değişiklik yap
git commit -am "Fix typo in README"
git push origin fix/typo-in-readme
# GitHub'da upstream PR aç
Upstream sync — fork’u güncel tut
Fork alındıktan sonra orijinal repo değişmeye devam eder. Fork’unu güncel tutmak için upstream remote eklenir:
# Upstream remote ekle (bir kez yapılır)
git remote add upstream https://github.com/ORIGINAL-OWNER/repo.git
# Upstream'den al
git fetch upstream
# main'e geç ve merge et
git switch main
git merge upstream/main
# Fork'unu güncelle
git push origin main
GitHub web UI’da fork sayfasında “Sync fork” butonu da bu işlemi yapar.
Remote kavramı
| Remote | Açıklama |
|---|---|
origin | Genellikle kendi fork’un veya direkt clone’ın |
upstream | Orijinal repo (fork durumunda) |
git remote -v komutu mevcut remote’ları listeler.
Clone vs. Fork — ne zaman hangisi?
| Senaryo | Tercih |
|---|---|
| Kendi projen veya takım reposu | Clone |
| Başkasının reposuna katkı (yazma izni yok) | Fork → Clone |
| Template’ten başlamak | Template → yeni repo → Clone |
| Sadece kodu indirmek (katkı yok) | Clone |
Sınavda dikkat noktaları
- Fork orijinal repoyla otomatik senkronize olmaz — manual sync veya GitHub “Sync fork” gerekir
- Fork’tan açılan PR, orijinal repo maintainer’ları tarafından gözden geçirilir
git cloneile fork bir arada kullanılır; fork’tan sonra clone yapılır- SSH vs HTTPS: SSH key kuruluysa SSH tercih edilir (şifre girmek gerekmez)
Sırada ne var?
Sonraki derste .gitignore, LICENSE ve README dosyaları — iyi bir reponun olmazsa olmazlarını ele alacağız.