Rehber

git clone: GitHub'dan ve diğer yerlerden depo nasıl klonlanır

Güncellendi: · Skillaria.Top

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:

  1. Klasörü oluşturur ve içinde git init benzeri bir işlem yapar;
  2. Kaynak adresi gösteren origin adlı bir remote ekler;
  3. Tüm nesneleri ve referansları indirir — git fetch ile eşdeğer;
  4. Uzak branch'leri oluşturur: origin/main, origin/develop vb.;
  5. Varsayılan yerel branch'i (genellikle main) oluşturur, onu origin/main ile 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

HTTPSSSH
Adreshttps://github.com/user/repo.gitgit@github.com:user/repo.git
Herkese açık depoKimlik doğrulama olmadan klonlanırHesaba eklenmiş bir SSH anahtarı gerekir
Özel depo, pushParola yerine Personal Access Token gerekirAnahtarla çalışır, parola girilmez
Kurumsal ağlar443 numaralı port neredeyse her zaman açıktır22 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öntemNe elde edersinizNe zaman kullanılır
git cloneGeçmişi ve remote'u olan tam depoYetkiniz olan ya da geçmişe ihtiyaç duyduğunuz projede çalışmak
GitHub'da forkKendi hesabınızda sunucudaki depo kopyasıPull request ile başkasının projesine katkı yapmak
Download ZIPYalnızca dosyalar, .git olmadanKodu 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.

  1. 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.
  2. Branch'i ve durumu kontrol edin. git status ve git log --oneline -5 nerede olduğunuzu ve son değişiklikleri gösterir.
  3. Kendi branch'inizi oluşturun. Doğrudan main üzerinde çalışmayın: git switch -c feature/my-task.
  4. Commit yazarını kontrol edin. Bilgisayarda birden fazla hesap (kişisel ve iş) varsa, --global kullanmadan bu depo için e-posta ayarlayın: git config user.email "you@company.com".
  5. Bağımlılıkları kurun. node_modules ya da venv gibi klasörler depoya konmaz, yerelde oluşturulur: npm install, pip install -r requirements.txt vb.

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örevKomut
Normal klongit clone <url>
Kendi klasörünegit clone <url> <klasör>
Doğrudan belirli branch'tegit clone -b <branch> <url>
Yalnızca bir branchgit clone -b <branch> --single-branch <url>
Geçmişsizgit clone --depth 1 <url>
Eski dosya içerikleri olmadangit clone --filter=blob:none <url>
Alt modüllerlegit clone --recurse-submodules <url>
Sunucu için bare kopyagit 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 konuyu videoyla öğrenin

Bu konu “Sıfırdan Güvenilir Geliştiriciye Git” kursunda uygulamalı olarak ayrıntılı işleniyor.

Kursa git