git clone: GitHub'dan ve diğer yerlerden depo nasıl klonlanır
git clone uzak depoyu bütünüyle indirir: tüm dosyaları, commit geçmişini ve branch'leri; yapılandırılmış origin remote'u ile yerel bir kopya oluşturur. Temel kullanım git clone adres şeklindedir. Parametrelerle klasör ve branch seçebilir ya da --depth 1 ile yalnızca son commit'leri indirebilirsiniz.
git clone komutu deponun tam bir yerel kopyasını oluşturur: dosyaları, commit geçmişini, branch'leri ve etiketleri. GitHub, GitLab ya da kurumsal bir sunucuda duran bir projeye başlamanın standart yoludur. ZIP arşivi indirmekten farkı, klonun tam teşekküllü bir depo olmasıdır: commit yapabilir ve değişikliklerinizi geri gönderebilirsiniz.
git clone temel kullanımı
Depo adresini kopyalayın (GitHub'da yeşil «Code» düğmesinden) ve çalıştırın:
git clone https://github.com/username/project.git
Cloning into 'project'...
remote: Enumerating objects: 1532, done.
remote: Counting objects: 100% (1532/1532), done.
remote: Compressing objects: 100% (812/812), done.
Receiving objects: 100% (1532/1532), 2.41 MiB | 6.10 MiB/s, done.
Resolving deltas: 100% (701/701), done.
Git, bulunduğunuz dizinde project adlı bir klasör oluşturur (ad, adresteki .git uzantısı çıkarılarak alınır). Ardından klasöre girin:
cd project
git status
git clone perde arkasında ne yapar
Klonlama yalnızca dosyaları indirmek değildir. Bu adımları bilmek, klondan sonra her şeyin neden «kendiliğinden çalıştığını» ve origin/ önekli branch'lerin nereden geldiğini açıklar. Komut sırasıyla şunları yapar:
- Klasörü oluşturur ve içinde
git initbenzeri bir işlem yapar; - Kaynak adresi gösteren
originadlı bir remote ekler; - Tüm nesneleri ve referansları indirir —
git fetchile eşdeğer; - Uzak branch'leri oluşturur:
origin/main,origin/developvb.; - Varsayılan yerel branch'i (genellikle
main) oluşturur, onuorigin/mainile ilişkilendirir ve dosyaları açar.
Bu yüzden klondan sonra git remote ayarlamanız gerekmez: git push ve git pull hemen çalışır.
git remote -v
origin https://github.com/username/project.git (fetch)
origin https://github.com/username/project.git (push)
HTTPS ve SSH ile klonlama
| HTTPS | SSH | |
|---|---|---|
| Adres | https://github.com/user/repo.git | git@github.com:user/repo.git |
| Herkese açık depo | Kimlik doğrulama olmadan klonlanır | Hesaba eklenmiş bir SSH anahtarı gerekir |
| Özel depo, push | Parola yerine Personal Access Token gerekir | Anahtarla çalışır, parola girilmez |
| Kurumsal ağlar | 443 numaralı port neredeyse her zaman açıktır | 22 numaralı port bazen kapalıdır |
Başkalarının açık projelerini okumak için HTTPS yeterlidir. Düzenli olarak push yaptığınız kendi depolarınız için SSH daha uygundur:
git clone git@github.com:username/project.git
HTTPS ile klonladıysanız ve SSH'a geçmek istiyorsanız, yeniden indirmenize gerek yok:
git remote set-url origin git@github.com:username/project.git
Belirli bir klasöre klonlama
İkinci argüman hedef klasörün adı ya da yoludur:
# Farklı bir adla bir klasöre
git clone https://github.com/username/project.git my-copy
# Mevcut klasöre (boş olmalı)
git clone https://github.com/username/project.git .
Hedef klasör varsa ve boş değilse Git işlemi reddeder: fatal: destination path 'project' already exists and is not an empty directory.
Belirli bir branch'i klonlama
Klonlamadan sonra varsayılan olarak uzak deponun varsayılan branch'indesiniz. Hemen başka bir branch'te olmak için -b (--branch) kullanın:
git clone -b develop https://github.com/username/project.git
Bu durumda tüm branch'ler indirilir; siz yalnızca develop üzerinde olursunuz. Diğer branch'lere ihtiyaç yoksa --single-branch ekleyin:
git clone -b develop --single-branch https://github.com/username/project.git
-b bayrağı etiket (tag) adını da kabul eder; o zaman sürüm yayımlandığı andaki proje durumunu alırsınız (detached HEAD modunda):
git clone -b v2.1.0 --depth 1 https://github.com/username/project.git
Klondan sonra diğer branch'ler nerede
Yeni başlayanlar şaşırır: git branch yalnızca main'i gösterir. Diğer branch'ler uzak branch olarak indirilmiştir; onları şöyle görebilirsiniz:
git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/develop
remotes/origin/feature/login
Birinde çalışmaya başlamak için kısa adıyla geçiş yapmanız yeterli; Git, uzak branch'i izleyen bir yerel branch'i kendisi oluşturur:
git switch develop
Sığ klon: büyük depolar için --depth
Eski projelerin geçmişi gigabaytlarca yer tutabilir. Yalnızca güncel koda ihtiyacınız varsa — örneğin CI'da ya da projeyi sadece derlemek için — son commit'leri indirin:
git clone --depth 1 https://github.com/username/big-project.git
--depth bayrağı --single-branch anlamına da gelir; yani yalnızca varsayılan branch ve tek bir commit gelir. Daha sonra tam geçmişe ihtiyaç duyarsanız onu tamamlayabilirsiniz:
git fetch --unshallow
Farklı bir derinlik de verebilirsiniz, örneğin --depth 50, ya da --shallow-since=2025-01-01 ile geçmişi bir tarihten itibaren sınırlayabilirsiniz. Aktif geliştirme için sığ klon uygun değildir: git log, git blame ve geçmişte arama eksik sonuç verir.
Kısmi klon: --filter
Çok büyük monorepo'lar için bir alternatif: commit geçmişini indirip dosya içeriklerini gerektikçe çekmek:
git clone --filter=blob:none https://github.com/username/monorepo.git
Böylece log ve branch geçişleri için tam geçmişi korursunuz, ama trafik ve yerden tasarruf edersiniz. Bu, sunucu tarafında desteklenmelidir; GitHub ve GitLab destekler.
Ayna (mirror) klon ve depo taşıma
Sıradan klon, branch'leri uzak branch olarak alır ve sunucunun yardımcı referanslarını kopyalamaz. Projeyi başka bir barındırma servisine taşımak ya da birebir yedek almak için --mirror kullanılır:
git clone --mirror https://github.com/username/project.git
cd project.git
git push --mirror git@gitlab.com:username/project.git
Ayna, çalışma dosyası olmayan bir bare depodur; tüm branch'ler ve etiketler yerel olarak saklanır. git push --mirror bunların tamamını yeni sunucuya gönderir ve geçmiş kayıpsız taşınır. Unutmayın: issue'lar, pull request'ler ve barındırma ayarları bu yolla taşınmaz — bunlar Git değil, servisin verisidir.
Benzer bir --bare bayrağı da çalışma dizini olmayan bir depo oluşturur, ama yalnızca branch'leri ve etiketleri kopyalar. Mevcut bir projeyi kendi sunucunuzda merkezi depo olarak kurmak için uygundur.
Alt modüllerle (submodule) klonlama
Proje git submodule kullanıyorsa, varsayılan olarak alt modüllerin klasörleri boş gelir. Hepsini bir seferde indirmek için:
git clone --recurse-submodules https://github.com/username/project.git
Bayrak olmadan klonladıysanız alt modülleri sonradan çekebilirsiniz:
git submodule update --init --recursive
git clone, fork ve ZIP indirme
| Yöntem | Ne elde edersiniz | Ne zaman kullanılır |
|---|---|---|
git clone | Geçmişi ve remote'u olan tam depo | Yetkiniz olan ya da geçmişe ihtiyaç duyduğunuz projede çalışmak |
| GitHub'da fork | Kendi hesabınızda sunucudaki depo kopyası | Pull request ile başkasının projesine katkı yapmak |
| Download ZIP | Yalnızca dosyalar, .git olmadan | Kodu hızlıca incelemek, commit yapmayı planlamadığınızda |
Fork ile clone birbirinin alternatifi değil: açık kaynak projelerde önce sitede fork yapılır, sonra kendi fork'unuz klonlanır ve orijinal depo ikinci bir remote olarak eklenir:
git clone git@github.com:me/project.git
cd project
git remote add upstream https://github.com/author/project.git
git fetch upstream
git clone'da sık görülen hatalar
«Repository not found»
Adreste yazım hatası vardır ya da depo özeldir ve sizin erişiminiz yoktur. GitHub, özel depolar için bilerek «bulunamadı» yanıtı verir, «erişim yasak» demez. Adresi ve doğru hesapla giriş yaptığınızı kontrol edin.
«Permission denied (publickey)»
SSH ile klonluyorsunuz ama anahtar ayarlanmamış. ssh -T git@github.com ile kontrol edin, açık anahtarı hesap ayarlarına ekleyin ya da geçici olarak HTTPS ile klonlayın.
HTTPS ile «Authentication failed»
Hesap parolanızı girmişsiniz. GitHub, HTTPS üzerinden Git işlemleri için uzun süredir parola yerine Personal Access Token ister. Git yanlış bilgileri hatırladıysa, bunları sisteminizin kimlik bilgisi yöneticisinden silin.
Büyük depoda bağlantı kopması
early EOF ya da RPC failed gibi hatalar genellikle kararsız ağdan ve depo boyutundan kaynaklanır. Yardımcı olabilecek seçenekler: --depth 1 ile sığ klon yapıp sonra git fetch --unshallow çalıştırmak ya da SSH ile klonlamak.
Windows'ta satır sonu sorunları
Klondan sonra tüm dosyalar «değiştirilmiş» görünür: bu CRLF/LF dönüşümünün sonucudur. Windows'ta git config --global core.autocrlf true, Linux ve macOS'ta input ayarlayın ve kuralları projenin .gitattributes dosyasında tanımlamak daha iyidir.
Klonladıktan hemen sonra yapılacaklar
Klon hazır, ama koda dokunmadan önce birkaç dakikanızı hazırlığa ayırın. Bu, yabancı bir projedeki ilk gününüzde tipik sorunların çoğunu önler.
- README ve CONTRIBUTING dosyalarını okuyun. Genellikle bağımlılıkların nasıl kurulacağı, testlerin nasıl çalıştırılacağı ve branch adlandırma kuralları orada yazar.
- Branch'i ve durumu kontrol edin.
git statusvegit log --oneline -5nerede olduğunuzu ve son değişiklikleri gösterir. - Kendi branch'inizi oluşturun. Doğrudan
mainüzerinde çalışmayın:git switch -c feature/my-task. - Commit yazarını kontrol edin. Bilgisayarda birden fazla hesap (kişisel ve iş) varsa,
--globalkullanmadan bu depo için e-posta ayarlayın:git config user.email "you@company.com". - Bağımlılıkları kurun.
node_modulesya davenvgibi klasörler depoya konmaz, yerelde oluşturulur:npm install,pip install -r requirements.txtvb.
Klonu güncel tutmak
Klonlama bir kez yapılır. Sonrasında ekip arkadaşlarınızın yeni commit'leri aynı origin üzerinden gelir:
# Sunucuda neler olduğuna bir şey değiştirmeden bakın
git fetch
git log --oneline main..origin/main
# Değişiklikleri mevcut branch'e alın
git pull
Önce git fetch yapıp gelenlere bakmak alışkanlığı, beklenmedik çakışmalardan korur. «Güncellemek için» projeyi yeniden klonlamayın: yerel branch'lerinizi ve commit edilmemiş işinizi kaybedersiniz.
git clone kısa rehberi
| Görev | Komut |
|---|---|
| Normal klon | git clone <url> |
| Kendi klasörüne | git clone <url> <klasör> |
| Doğrudan belirli branch'te | git clone -b <branch> <url> |
| Yalnızca bir branch | git clone -b <branch> --single-branch <url> |
| Geçmişsiz | git clone --depth 1 <url> |
| Eski dosya içerikleri olmadan | git clone --filter=blob:none <url> |
| Alt modüllerle | git clone --recurse-submodules <url> |
| Sunucu için bare kopya | git clone --bare <url> |
Kısaca
git clone depoyu bütünüyle indirir ve origin üzerinden sunucuyla bağlantıyı hemen kurar; bu yüzden ardından ek ayar yapmadan commit, push ve pull yapabilirsiniz. Kendi projeleriniz için SSH, büyük depolar için --depth ya da --filter, belirli bir branch için -b kullanın. Uzak depolarla çalışma, push, pull ve fetch Git kursunda uygulamalı olarak anlatılmaktadır.
Sık sorulan sorular
git clone ile git pull arasındaki fark nedir?
git clone bir kez çalıştırılır ve yeni bir yerel depo kopyası oluşturur. git pull ise mevcut bir klonda çalışır ve sunucudan yeni değişiklikleri alır.
Depodan yalnızca bir klasörü klonlayabilir miyim?
Doğrudan değil. En yakın yol --filter=blob:none --sparse ile kısmi klon yapıp sonra git sparse-checkout set yol komutunu çalıştırmaktır; böylece çalışma dizininde yalnızca istediğiniz klasör görünür.
Bir klon ne kadar yer kaplar?
Kabaca sıkıştırılmış tüm geçmişin boyutu artı mevcut sürümün açılmış dosyaları kadar. Depo boyutunu git count-objects -vH ile görebilirsiniz.
Yerel bir depoyu klonlayabilir miyim?
Evet, adres yerine yol verin: git clone /path/to/repo copy. Ana kopyanızı riske atmadan denemeler yapmak için kullanışlıdır.
git clone'dan önce git init çalıştırmam gerekir mi?
Hayır. git clone klasörü kendisi oluşturur ve içinde depoyu başlatır.
Bu konu “Sıfırdan Güvenilir Geliştiriciye Git” kursunda uygulamalı olarak ayrıntılı işleniyor.
Kursa git