Git Clone, Pull ve Fetch Nedir? GitHub Projelerini Güncelleme Rehberi

Git clone, pull ve fetch komutları nasıl kullanılır? GitHub projelerini bilgisayarınıza indirmeyi, uzak depodaki değişiklikleri kontrol etmeyi, yerel branch'leri güncellemeyi ve git pull ile git fetch arasındaki farkları uygulamalı örneklerle öğrenin.

Git Clone, Pull ve Fetch Nedir? GitHub Projelerini İndirme ve Güncelleme

Git ve GitHub kullanırken en sık gerçekleştireceğiniz işlemlerden biri, uzak bir repository üzerinde bulunan projeyi bilgisayarınıza indirmek ve zaman içerisinde yapılan değişiklikleri yerel projenize aktarmaktır.

Örneğin bir yazılım ekibinde çalıştığınızı düşünelim. Ekip arkadaşlarınız GitHub üzerindeki projeye yeni özellikler ekliyor, hataları düzeltiyor ve güncellemeler yayınlıyor.

Sizin de bu değişiklikleri bilgisayarınıza almanız ve güncel kod üzerinde çalışmaya devam etmeniz gerekir.

Git bu işlemler için üç önemli komut sunar: git clone, git fetch ve git pull.

Bu rehberde GitHub projelerini bilgisayara indirmeyi, uzak repository bağlantılarını yönetmeyi, yeni commit kayıtlarını kontrol etmeyi ve yerel branch'leri güvenli biçimde güncellemeyi adım adım öğreneceğiz.

1. Local Repository ve Remote Repository Nedir?

Git clone, pull ve fetch komutlarını anlamak için öncelikle local repository ve remote repository kavramlarını öğrenmemiz gerekir.

Local Repository Nedir?

Local Repository, bilgisayarınızda bulunan Git deposudur.

Proje dosyalarınız ve Git commit geçmişiniz yerel repository içerisinde bulunur.

Örneğin:

Bilgisayarim/
|
|-- projeler/
    |
    |-- web-sitem/
        |
        |-- index.html
        |-- style.css
        |-- script.js
        |-- README.md
        |-- .git/

Bu yapıdaki .git klasörü, Git deposunun geçmişini ve yapılandırma bilgilerini saklar.

Remote Repository Nedir?

Remote Repository, başka bir konumda bulunan ve Git üzerinden erişilebilen uzak depodur.

GitHub, GitLab ve Bitbucket gibi platformlar uzak Git repository'lerini barındırabilir.

Örneğin GitHub repository adresi:

https://github.com/KULLANICI_ADI/ilk-git-projem

Buradaki KULLANICI_ADI ifadesi kendi GitHub kullanıcı adınızla değiştirilmelidir.

Local ve remote repository arasında Git komutlarıyla veri alışverişi gerçekleştirebiliriz.

2. Git Clone Nedir?

git clone, mevcut bir Git repository'sini bilgisayarınıza kopyalamak için kullanılan komuttur.

Bu komut, repository'nin dosyalarını ve erişilebilir Git geçmişini yerel bir depoya aktarır.

GitHub üzerindeki bir projeyi ilk kez bilgisayarınıza almak istediğinizde genellikle git clone kullanırsınız.

Temel kullanım:

git clone REPOSITORY_URL

Örneğin:

git clone https://github.com/KULLANICI_ADI/ilk-git-projem.git

Komut başarılı olduğunda Git, mevcut dizin içerisinde ilk-git-projem adında yeni bir klasör oluşturur.

Bu klasörün içerisinde proje dosyaları ve Git repository bilgileri bulunur.

Git Clone Ne İşe Yarar?

  • GitHub üzerindeki projeleri bilgisayarınıza indirir.
  • Repository'nin Git geçmişini yerel ortama aktarır.
  • Uzak repository bağlantısını yapılandırır.
  • Uygun varsayılan branch için yerel çalışma ortamı oluşturur.
  • Projeyi incelemenize ve geliştirmeye başlamanıza yardımcı olur.

Git clone, yalnızca dosyaları indiren sıradan bir işlem değildir. Aynı zamanda projenin Git geçmişini ve uzak depo bağlantısını da hazırlar.

3. GitHub'dan Proje Nasıl İndirilir?

Şimdi GitHub üzerindeki bir projeyi bilgisayarımıza indirelim.

Adım 1: GitHub Repository Sayfasını Açın

GitHub hesabınıza giriş yapın ve indirmek istediğiniz repository'nin sayfasını açın.

Örneğimizde önceki bölümlerde oluşturduğumuz ilk-git-projem repository'sini kullanacağız.

Adım 2: Repository Bağlantısını Kopyalayın

Repository sayfasındaki Code butonuna tıklayın.

Açılan bölümden HTTPS seçeneğini tercih edebilirsiniz.

Repository bağlantınız aşağıdakine benzer olacaktır:

https://github.com/KULLANICI_ADI/ilk-git-projem.git

Adım 3: Terminali Açın

Bilgisayarınızda Git Bash, PowerShell veya Terminal uygulamasını açın.

Projeyi indirmek istediğiniz dizine geçin.

Örneğin:

mkdir git-calismalarim

cd git-calismalarim

Bu komutlar yeni bir çalışma klasörü oluşturur ve terminali bu klasöre taşır.

Adım 4: Git Clone Komutunu Çalıştırın

Şimdi repository'yi bilgisayarımıza indirelim.

git clone https://github.com/KULLANICI_ADI/ilk-git-projem.git

Komutu çalıştırdığınızda Git uzak repository'den gerekli verileri almaya başlar.

İşlem tamamlandıktan sonra çalışma klasörünüzün içerisinde ilk-git-projem isimli bir klasör bulunacaktır.

Adım 5: Proje Klasörüne Girin

cd ilk-git-projem

Ardından Git durumunu kontrol edin:

git status

Repository normal biçimde klonlandıysa Git size aktif branch ve çalışma alanı hakkında bilgi gösterecektir.

Artık GitHub üzerindeki projenin yerel bir kopyasına sahipsiniz.

4. Git Clone ile Klasör İsmi Belirleme

Git clone komutu varsayılan olarak repository ismini kullanarak yeni bir klasör oluşturur.

Ancak projeyi farklı isimli bir klasöre indirmek isteyebilirsiniz.

Örneğin:

git clone https://github.com/KULLANICI_ADI/ilk-git-projem.git proje-kopyam

Bu komut repository'yi proje-kopyam isimli klasöre klonlar.

Sonuç:

git-calismalarim/
|
|-- proje-kopyam/
    |
    |-- README.md
    |-- .git/

Bu yöntem, aynı repository'nin birden fazla yerel kopyasını farklı klasörlerde tutmak istediğinizde de faydalıdır.

Git clone hedef klasörünün boş veya henüz mevcut olmayan bir klasör olması gerekir.

5. Git Clone ile ZIP İndirme Arasındaki Fark

GitHub üzerinde projeleri ZIP olarak indirmek de mümkündür.

Ancak ZIP indirmek ile git clone kullanmak aynı işlem değildir.

Özellik Git Clone ZIP İndirme
Proje dosyalarını alma Evet Evet
Git geçmişini alma Evet, seçilen klonlama kapsamına göre Hayır
Uzak repo bağlantısı Otomatik yapılandırılır Oluşturulmaz
Git Pull kullanımı Uygun yapılandırmayla kullanılabilir Doğrudan kullanılamaz
Geliştirme için uygunluk Çok uygun Git geçmişi gerekmeyen durumlarda uygun

Bir projeyi yalnızca incelemek istiyorsanız ZIP indirmek yeterli olabilir.

Ancak yazılım üzerinde geliştirme yapacak veya GitHub'daki güncellemeleri takip edecekseniz git clone kullanmak genellikle daha uygundur.

6. Git Clone HTTPS ve SSH Arasındaki Fark

GitHub repository'leri farklı bağlantı yöntemleriyle klonlanabilir.

En yaygın yöntemler HTTPS ve SSH bağlantılarıdır.

HTTPS ile Git Clone

git clone https://github.com/KULLANICI_ADI/ilk-git-projem.git

HTTPS, yeni başlayanlar için kullanımı kolay yöntemlerden biridir.

Public repository'ler genellikle ek kimlik doğrulaması olmadan klonlanabilir.

Private repository'lere erişmek veya yetki gerektiren işlemler gerçekleştirmek için GitHub kimlik doğrulaması gerekebilir.

GitHub, HTTPS üzerinden Git işlemlerinde normal hesap parolasını doğrudan kullanmak yerine uygun kimlik doğrulama yöntemleri kullanılmasını gerektirir.

Git Credential Manager veya GitHub CLI gibi araçlar bu süreci kolaylaştırabilir.

SSH ile Git Clone

SSH kullanılarak da GitHub repository'si klonlanabilir.

git clone git@github.com:KULLANICI_ADI/ilk-git-projem.git

Bu yöntemin kullanılabilmesi için bilgisayarınızda uygun SSH anahtarlarının hazırlanması ve açık anahtarın GitHub hesabınızla ilişkilendirilmesi gerekir.

SSH bağlantısı doğru yapılandırıldığında GitHub ile güvenli biçimde iletişim kurulabilir.

Özellikle Git'i düzenli kullanan geliştiriciler SSH yöntemini tercih edebilir.

Güvenlik notu: Özel SSH anahtarınızı, erişim belirteçlerinizi veya hesap bilgilerinizi GitHub repository'lerine yüklemeyin.

7. Git Remote Nedir?

git remote, yerel Git repository'sinin bağlantı kurduğu uzak depoları yönetmek için kullanılan komuttur.

Git clone işlemi sırasında kaynak repository genellikle origin ismiyle yapılandırılır.

Örneğin:

origin = https://github.com/KULLANICI_ADI/ilk-git-projem.git

Buradaki origin, uzak depo bağlantısının ismidir.

Origin zorunlu bir isim değildir ancak Git projelerinde yaygın olarak kullanılır.

Uzak Repository Bağlantılarını Görüntüleme

Proje klasörünüzde aşağıdaki komutu çalıştırın:

git remote -v

Örnek çıktı:

origin  https://github.com/KULLANICI_ADI/ilk-git-projem.git (fetch)
origin  https://github.com/KULLANICI_ADI/ilk-git-projem.git (push)

Bu çıktıda fetch ve push işlemleri için yapılandırılmış uzak depo adresleri görüntülenir.

Fetch uzak depodan değişiklikleri almak, push ise uygun yerel commit'leri uzak depoya göndermek için kullanılır.

Yeni Remote Ekleme

Mevcut bir Git deposuna uzak repository bağlantısı eklemek için:

git remote add origin https://github.com/KULLANICI_ADI/ilk-git-projem.git

Komutu kullanılabilir.

Ancak git clone ile oluşturulmuş bir repository'de origin bağlantısı zaten bulunabilir. Böyle bir durumda aynı isimle yeniden remote eklemek hata oluşturur.

Remote Adresini Değiştirme

Uzak repository adresini güncellemek için:

git remote set-url origin https://github.com/KULLANICI_ADI/yeni-projem.git

Komutunu kullanabilirsiniz.

Bu işlem origin bağlantısını yeni URL ile değiştirir.

8. Git Fetch Nedir?

git fetch, uzak repository üzerinde bulunan yeni commit kayıtlarını ve ilgili Git referanslarını yerel depoya almak için kullanılan komuttur.

Git fetch'in en önemli özelliği, değişiklikleri indirirken mevcut çalışma branch'inizi otomatik olarak birleştirmemesidir.

Örneğin GitHub üzerindeki main branch'e yeni commit'ler gönderildiğini düşünelim.

Bilgisayarınızda:

git fetch origin

Komutunu çalıştırdığınızda Git uzak repository'deki güncel bilgileri getirir.

Ancak yerel main branch'iniz otomatik olarak yeni commit'e taşınmaz.

Bu sayede güncellemeleri inceleyip daha sonra nasıl entegre edeceğinize karar verebilirsiniz.

Git Fetch Nasıl Çalışır?

Örneğin yerel main branch'imiz C commit'inde olsun.

A --- B --- C
            |
           main

GitHub üzerindeki origin/main branch'ine iki yeni commit eklenmiş olsun.

A --- B --- C --- D --- E
            |           |
           main      origin/main

Git fetch komutunu çalıştırdığımızda origin/main referansı güncellenebilir.

Ancak yerel main branch'i C commit'inde kalır.

Bu özellik, uzak değişiklikleri mevcut çalışmalarımıza dahil etmeden önce incelememizi sağlar.

9. Git Fetch ile Uzak Değişiklikleri İnceleme

Şimdi git fetch komutunu uygulamalı olarak kullanalım.

Öncelikle proje klasörünüzde bulunduğunuzdan emin olun.

git status

Ardından uzak depodaki güncellemeleri alın:

git fetch origin

Komut tamamlandıktan sonra uzak branch referanslarını görüntüleyebilirsiniz.

git branch -r

Örnek çıktı:

origin/HEAD -> origin/main
origin/main
origin/feature/login

Bu bilgiler, yerel Git deponuzun bildiği uzak branch referanslarını gösterir.

Uzak Depoda Hangi Commit'ler Var?

Yerel main branch'inde bulunmayan ancak origin/main üzerinde bulunan commit'leri görüntülemek için:

git log main..origin/main --oneline

Komutunu kullanabilirsiniz.

Örnek çıktı:

e73ab52 Kullanıcı profili güncellendi
b24cd81 Yeni bildirim sistemi eklendi

Bu çıktı, uzak branch üzerinde yerel main geçmişine henüz dahil edilmemiş commit kayıtlarını gösterir.

Eğer çıktı boşsa origin/main üzerinde main'de bulunmayan erişilebilir commit kaydı olmayabilir.

Dosya Değişikliklerini Görüntüleme

İki branch'in mevcut dosya durumları arasındaki farkları incelemek için:

git diff main origin/main

Bu komut yerel main ve uzak branch referansının işaret ettiği dosya durumlarını karşılaştırır.

Bu sayede hangi kodların değiştiğini, hangi satırların eklendiğini veya silindiğini kontrol edebilirsiniz.

Önemli: Git fetch komutu güncellemeleri indirir. Ancak bunları mevcut çalışma branch'inize otomatik olarak uygulamaz.

10. Git Pull Nedir?

git pull, uzak repository'deki değişiklikleri almak ve mevcut branch'in geçmişiyle entegre etmek için kullanılan komuttur.

Git pull işlemi temelde iki aşamadan oluşur:

  • Uzak repository'den değişiklikleri almak.
  • Alınan commit'leri mevcut branch ile birleştirmek veya yeniden uygulamak.

Git pull, yapılandırmaya ve komut seçeneklerine bağlı olarak fetch sonrasında merge veya rebase kullanabilir.

Bu nedenle git pull komutunu her koşulda yalnızca git fetch ve git merge işlemlerinin sabit birleşimi olarak düşünmemek gerekir.

Temel kullanım:

git pull

Bu komutun beklenen şekilde çalışması için mevcut branch'in uygun upstream bağlantısının yapılandırılmış olması gerekir.

Belirli Bir Branch'ten Güncelleme Alma

GitHub üzerindeki origin uzak deposunun main branch'inden değişiklik almak için:

git pull origin main

Bu komut uzak main branch'inden değişiklikleri alır ve mevcut aktif branch ile entegre etmeye çalışır.

Bu nedenle komutu çalıştırmadan önce hangi branch üzerinde bulunduğunuzu kontrol etmek önemlidir.

git branch --show-current

Main branch'i güncellemek istiyorsanız önce main branch'ine geçebilirsiniz.

git switch main

Ardından uygun pull komutunu çalıştırabilirsiniz.

11. Git Pull ile Git Fetch Arasındaki Fark

Git öğrenenlerin en sık karıştırdığı konulardan biri git pull ve git fetch arasındaki farktır.

İki komut da uzak repository ile iletişim kurar ancak değişikliklerin yerel projeye uygulanma biçimi farklıdır.

Özellik Git Fetch Git Pull
Uzak commit'leri indirir Evet Evet
Remote-tracking referanslarını güncelleyebilir Evet Evet
Mevcut branch'i otomatik entegre eder Hayır Evet, uygun yapılandırmayla
Merge veya rebase gerçekleştirebilir Hayır Evet
Conflict oluşturabilir Normal fetch işlemi birleştirme conflict'i oluşturmaz Evet
Önce değişiklikleri incelemek Uygun Entegrasyonu da başlatır

Kısaca: Git fetch, uzak depodaki değişiklikleri alıp incelemenizi sağlar. Git pull ise bu değişiklikleri aldıktan sonra mevcut branch'inizle entegre etmeye çalışır.

12. Uygulama: GitHub'daki Projeyi Güncelleyelim

Şimdi git clone, git fetch ve git pull komutlarını tek bir proje üzerinde uygulayacağız.

Bu uygulama için önceki bölümlerde oluşturduğumuz ilk-git-projem repository'sini kullanacağız.

Amacımız GitHub üzerinde yeni bir değişiklik oluşturmak ve bilgisayarımızdaki yerel projeyi güncellemektir.

Adım 1: Projeyi Farklı Bir Klasöre Klonlayın

Önce terminalde proje klasörünüzün dışında bir konuma geçin.

Ardından:

git clone https://github.com/KULLANICI_ADI/ilk-git-projem.git ilk-git-projem-kopya

Komutunu çalıştırın.

İşlem tamamlandıktan sonra:

cd ilk-git-projem-kopya

Komutuyla yeni klasöre geçin.

Bu örnekte GitHub repository'mizin varsayılan branch isminin main olduğunu varsayıyoruz.

Adım 2: GitHub Üzerinde README Dosyasını Değiştirin

İnternet tarayıcınızdan GitHub repository sayfanızı açın.

Main branch'ini seçin ve README.md dosyasını görüntüleyin.

GitHub arayüzündeki dosya düzenleme seçeneğini kullanarak README.md dosyasına yeni bir bölüm ekleyin.

## Yeni Güncelleme

Bu açıklama GitHub üzerinden eklendi.

Git fetch ve git pull komutlarını öğreniyorum.

Dosyayı GitHub üzerinden main branch'ine yeni bir commit oluşturarak kaydedin.

Artık GitHub üzerindeki main branch, bilgisayarımızdaki yerel main branch'inden daha yeni bir commit'e sahiptir.

Adım 3: Yerel Proje Durumunu Kontrol Edin

Terminalde yerel proje klasörünüzde olduğunuzdan emin olun.

git status

Ardından mevcut branch'i kontrol edin:

git branch --show-current

Beklenen çıktı:

main

GitHub üzerinden oluşturduğumuz son commit henüz yerel depoya getirilmemiş olabilir.

Adım 4: Git Fetch Komutunu Çalıştırın

Şimdi GitHub'daki yeni commit bilgisini alalım:

git fetch origin

İşlem tamamlandıktan sonra:

git log main..origin/main --oneline

Komutunu çalıştırın.

Örnek çıktı:

f23bc91 README dosyası GitHub üzerinden güncellendi

Bu çıktı, GitHub üzerinde yeni bir commit bulunduğunu gösterir.

Ancak yerel main branch'imiz henüz bu commit'e ilerlememiştir.

Adım 5: Değişiklikleri İnceleyin

Yerel main branch ile origin/main arasındaki farkları inceleyelim:

git diff main origin/main

Git, README.md dosyasına eklediğimiz satırları gösterecektir.

Bu aşamada değişiklikleri yerel main branch'ine entegre etmedik.

Yalnızca uzak repository'deki güncellemeleri indirdik ve inceledik.

Adım 6: Yerel Main Branch'i Güncelleyin

Bu örnekte yerel main branch üzerinde yeni commit oluşturmadığımız için fast-forward mümkün olmalıdır.

Şimdi şu komutu çalıştırın:

git merge --ff-only origin/main

Bu komut, main branch'ini ancak fast-forward mümkünse origin/main durumuna ilerletir.

İşlem başarılı olduğunda README.md dosyanızdaki yeni açıklamaları bilgisayarınızda görüntüleyebilirsiniz.

Adım 7: Git Pull Komutunu Deneyin

Şimdi GitHub üzerinde README.md dosyasına ikinci bir değişiklik ekleyin ve main branch'ine yeni bir commit kaydedin.

Örneğin:

## Git Pull Denemesi

Bu bölüm ikinci güncelleme olarak eklendi.

Ardından terminalde, yerel main üzerinde yeni commit oluşturmadıysanız:

git pull --ff-only

Komutunu çalıştırın.

Bu komut uzak değişiklikleri alır ve mevcut branch'i yalnızca fast-forward mümkünse günceller.

Böylece hem git fetch hem de git pull kullanımını uygulamalı olarak öğrenmiş olduk.

13. Git Pull --ff-only Nedir?

git pull --ff-only, uzak değişiklikleri alırken mevcut branch'in yalnızca fast-forward yöntemiyle güncellenmesine izin veren komuttur.

Temel kullanım:

git pull --ff-only

Bu komut, uzak branch'teki commit geçmişi mevcut yerel branch'in doğrudan ilerletilmesine uygunsa güncelleme yapar.

Ancak branch geçmişleri farklı yönlerde ilerlemişse işlem reddedilir.

Bu yaklaşım, beklenmeyen merge commit oluşmasını önlemek isteyen geliştiriciler için faydalı olabilir.

Örneğin:

A --- B --- C          main
             \
              D --- E      origin/main

Bu yapıda main, origin/main commit geçmişinin atasıysa fast-forward mümkündür.

Ancak aşağıdaki gibi ayrılmış geçmişlerde:

       C --- D          main
      /
A --- B
      \
       E --- F          origin/main

Git pull --ff-only, yerel ve uzak geçmişleri otomatik olarak birleştirmez.

Bunun yerine geliştiricinin uygun merge veya rebase stratejisini seçmesi gerekir.

14. Git Pull --rebase Nedir?

Git pull komutunun önemli seçeneklerinden biri --rebase parametresidir.

Bu seçenek, uzak repository'deki değişiklikler alındıktan sonra uygun yerel commit'lerin yeni uzak geçmiş temelinde yeniden uygulanmasını sağlar.

Temel kullanım:

git pull --rebase

Örneğin yerel main branch üzerinde C commit'i, GitHub üzerindeki origin/main branch'inde ise D commit'i oluşmuş olsun.

       C       main
      /
A --- B
      \
       D       origin/main

Bu durumda git pull --rebase, uygun koşullarda yerel commit'i uzak branch'in sonuna yeniden uygulayabilir.

Sonuç kavramsal olarak şöyle olabilir:

A --- B --- D --- C'
                  |
                 main

Buradaki C' yeniden oluşturulan commit'i temsil eder.

Rebase işleminin önemli özelliği, yeniden uygulanan commit'lerin kimliklerini değiştirebilmesidir.

Bu nedenle daha önce ekip arkadaşlarıyla paylaşılmış commit geçmişini yeniden yazarken dikkatli olunmalıdır.

Öneri: Git Rebase mantığını tam olarak öğrenmeden büyük veya paylaşılan projelerde rebase işlemlerini rastgele uygulamayın.

Git Rebase konusunu eğitim serimizin dokuzuncu bölümünde ayrıntılı olarak ele alacağız.

15. Git Pull Sırasında Conflict Oluşursa Ne Yapılır?

Git pull işlemi uzak değişiklikleri mevcut branch ile entegre etmeye çalıştığı için bazı durumlarda merge conflict oluşabilir.

Örneğin iki farklı geliştiricinin aynı dosyanın aynı satırını değiştirdiğini düşünelim.

Bir geliştirici:

<h1>Nizokka Akademi</h1>

Diğer geliştirici ise:

<h1>GitHub Eğitim Merkezi</h1>

İçeriğini hazırlamış olabilir.

Bu değişiklikler birleştirilirken Git otomatik karar veremeyebilir.

Çakışma oluştuğunda ilk olarak:

git status

Komutunu çalıştırın.

Ardından çakışan dosyaları inceleyin.

Merge tabanlı bir pull sırasında dosyada aşağıdakine benzer işaretler bulunabilir:

<<<<<<< HEAD
<h1>Nizokka Akademi</h1>
=======
<h1>GitHub Eğitim Merkezi</h1>
>>>>>>> origin/main

Bu işaretler conflict marker olarak adlandırılır.

Çakışmayı çözmek için doğru içeriği belirleyin ve conflict marker işaretlerini kaldırın.

Örneğin:

<h1>Nizokka Akademi - GitHub Eğitimleri</h1>

Dosyayı kaydedin.

Ardından:

git add index.html

Komutuyla çözülen dosyayı staging alanına ekleyin.

Eğer pull işlemi merge başlatmışsa:

git merge --continue

Komutuyla birleştirmeyi tamamlayabilirsiniz.

Eğer pull işlemi rebase başlatmışsa:

git rebase --continue

Komutu kullanılmalıdır.

Hangi işlemin devam ettiğini git status çıktısından kontrol edin.

Merge conflict çözümünün ayrıntılarını serimizin beşinci bölümünde incelemiştik.

16. Git Fetch --prune Nedir?

GitHub üzerindeki projelerde zamanla çok sayıda branch oluşturulabilir.

Bazı branch'ler geliştirme tamamlandıktan sonra uzak repository'den silinebilir.

Ancak bilgisayarınızdaki eski remote-tracking branch referansları bir süre daha bulunabilir.

Bu referansları temizlemek için:

git fetch --prune origin

Komutu kullanılabilir.

Bu komut uzak repository'de artık bulunmayan, origin için yapılandırılmış uygun remote-tracking referanslarını temizler.

Önemli: Git fetch --prune, GitHub üzerinde bulunan gerçek branch'leri silmek için kullanılmaz.

Ayrıca varsayılan kullanımda yerel çalışma branch'lerinizi silmez.

İşlemin kapsamı remote yapılandırmasına ve refspec ayarlarına bağlı olabileceğinden özel yapılandırmalarda dikkatli olunmalıdır.

17. Git Fetch --all Nedir?

Bir Git deposunda birden fazla uzak repository bağlantısı bulunabilir.

Örneğin:

origin
upstream

Bu durumda bütün yapılandırılmış uzak depolardan değişiklik almak için:

git fetch --all

Komutu kullanılabilir.

Bu komut tüm uzak repository bağlantıları için uygun fetch işlemlerini gerçekleştirir.

Ancak mevcut çalışma branch'lerini otomatik olarak birleştirmez.

Birden fazla uzak repository ile çalışılan açık kaynak projelerde kullanışlıdır.

18. Git Upstream Nedir?

Upstream kelimesi Git kullanımında farklı ancak ilişkili anlamlarda karşımıza çıkabilir.

Birincisi, yerel branch'in takip ettiği uzak branch bağlantısıdır.

Örneğin yerel main branch'inin origin/main branch'ini takip etmesi.

Bu bağlantıyı görüntülemek için:

git branch -vv

Komutunu kullanabilirsiniz.

Örnek çıktı:

* main a13bc24 [origin/main] README güncellendi

Buradaki origin/main, main branch'inin takip ettiği upstream branch'i gösterir.

İkinci kullanım ise özellikle açık kaynak projelerde görülür.

Bir geliştirici başka bir repository'yi fork ettiğinde orijinal projeyi upstream isimli uzak depo olarak ekleyebilir.

Örneğin:

git remote add upstream https://github.com/PROJE_SAHIBI/ORIJINAL_PROJE.git

Bu komut orijinal projeye upstream isminde bir remote bağlantısı ekler.

Ardından:

git fetch upstream

Komutuyla orijinal projedeki güncel commit kayıtları alınabilir.

Upstream isimli remote kullanmak zorunlu değildir. Bu isim, açık kaynak geliştirme süreçlerinde yaygın bir gelenektir.

19. Git Clone --branch Nedir?

Bazen GitHub repository'sindeki varsayılan branch yerine belirli bir branch üzerinde çalışmak isteyebilirsiniz.

Bu durumda git clone komutuyla branch seçebilirsiniz.

Örneğin:

git clone --branch develop https://github.com/KULLANICI_ADI/ilk-git-projem.git

Bu komut, ilgili repository'yi klonlar ve develop isimli branch mevcutsa o branch üzerinde çalışma ortamı oluşturur.

Ancak yalnızca --branch seçeneğini kullanmak, diğer branch'lere ait bütün bilgilerin alınmasını otomatik olarak engellemez.

Yalnızca seçilen branch'in geçmişini hedefleyen bir işlem için uygun koşullarda --single-branch seçeneği kullanılabilir.

git clone --branch develop --single-branch https://github.com/KULLANICI_ADI/ilk-git-projem.git

Bu yöntem, belirli bir branch üzerinde çalışmaya odaklanmak istediğiniz durumlarda kullanışlıdır.

20. Git Clone --depth 1 Nedir?

Büyük Git repository'leri çok uzun commit geçmişlerine sahip olabilir.

Bazı durumlarda projenin bütün geçmişine ihtiyaç duymayabilirsiniz.

Bu durumda shallow clone adı verilen sınırlı geçmişle klonlama yöntemi kullanılabilir.

Örneğin:

git clone --depth 1 https://github.com/KULLANICI_ADI/ilk-git-projem.git

Bu komut, klonlanan branch için commit geçmişini belirtilen derinlikle sınırlar.

--depth 1 seçeneği, uygun koşullarda yalnızca en yakın commit geçmişiyle çalışmayı sağlar.

Bu yöntem özellikle büyük repository'lerde ilk veri aktarımını azaltabilir.

Ancak eski commit geçmişini incelemek, geçmişe dayalı işlemler gerçekleştirmek veya bazı geliştirme araçlarını kullanmak gerektiğinde shallow clone sınırlayıcı olabilir.

Daha kapsamlı geçmişe ihtiyaç duyduğunuzda uygun fetch seçenekleriyle geçmiş genişletilebilir.

21. Git Clone, Pull ve Fetch Kullanırken Yapılan Hatalar

Hata 1: Destination Path Already Exists

Git clone sırasında aşağıdakine benzer bir hata alabilirsiniz:

fatal: destination path 'ilk-git-projem'
already exists and is not an empty directory.

Bu hata, aynı isimde boş olmayan bir klasör bulunduğunu gösterir.

Örneğin proje zaten bilgisayarınızda mevcut olabilir.

Bu durumda mevcut klasörü silmek yerine önce içeriğini inceleyin.

Projeyi farklı isimli bir klasöre klonlayabilirsiniz:

git clone https://github.com/KULLANICI_ADI/ilk-git-projem.git yeni-proje-kopyasi

Hata 2: Repository Not Found

GitHub repository'sine erişmeye çalışırken aşağıdaki hata görülebilir:

remote: Repository not found.

fatal: repository not found

Bu hata yanlış repository adresi veya yetersiz erişim izni nedeniyle oluşabilir.

Öncelikle bağlantıyı kontrol edin.

Private repository kullanıyorsanız hesabınızın gerekli erişim izinlerine sahip olduğundan emin olun.

Hata 3: Authentication Failed

HTTPS üzerinden GitHub'a bağlanırken kimlik doğrulama başarısız olabilir.

GitHub hesabınızda uygun giriş yönteminin yapılandırıldığından emin olun.

Git Credential Manager, GitHub CLI veya uygun erişim belirteci kullanılabilir.

Parolalarınızı veya erişim belirteçlerinizi kaynak kod dosyalarının içine yazmayın.

Hata 4: Divergent Branches

Git pull sırasında aşağıdakine benzer bir hata veya uyarıyla karşılaşabilirsiniz:

fatal: Need to specify how to reconcile divergent branches.

Bu durum, yerel ve uzak branch geçmişlerinin farklı yönlerde ilerlediğini ve uygun entegrasyon yönteminin seçilmesi gerektiğini gösterir.

Olası yöntemler arasında merge ve rebase bulunur.

Örneğin merge yaklaşımı için:

git pull --no-rebase

Rebase yaklaşımı için:

git pull --rebase

Komutları kullanılabilir.

Ancak yöntem seçmeden önce commit geçmişini incelemek önemlidir.

Özellikle paylaşılan projelerde rebase işleminin commit kimliklerini değiştirebileceği unutulmamalıdır.

Hata 5: Yerel Değişikliklerin Üzerine Yazılması Riski

Git pull sırasında kaydedilmemiş yerel değişiklikleriniz varsa işlem engellenebilir.

Örneğin:

error: Your local changes to the following files would be overwritten by merge

Bu durumda:

git status

Komutuyla yerel değişiklikleri inceleyin.

Gerekirse değişikliklerinizi uygun bir commit oluşturarak kaydedin.

Geçici olarak saklamak istiyorsanız git stash kullanabilirsiniz.

Ancak stash işleminin kapsamını ve geri uygulama sırasında oluşabilecek çakışmaları dikkate alın.

22. Profesyonel Git Güncelleme İş Akışı

Bir yazılım projesini güncellerken aşağıdaki çalışma düzeni tercih edilebilir.

1. Doğru Repository'de Olduğunuzu Kontrol Edin

git remote -v

2. Aktif Branch'i Öğrenin

git branch --show-current

3. Yerel Değişiklikleri Kontrol Edin

git status

4. Uzak Commit'leri Alın

git fetch origin

5. Uzak Commit Geçmişini İnceleyin

git log main..origin/main --oneline

6. Değişen Dosyaları Kontrol Edin

git diff --stat main origin/main

7. Yerel Main Branch'ini Güncelleyin

Yerel main branch üzerindeyseniz ve fast-forward mümkünse:

git merge --ff-only origin/main

Bu işlem, değişiklikleri önceden inceleyerek kontrollü şekilde uygulamanıza yardımcı olur.

Ancak her projede aynı yöntem uygun olmayabilir. Özellikle yerel commit'lerin bulunduğu veya branch geçmişlerinin ayrıldığı durumlarda farklı entegrasyon işlemleri gerekebilir.

23. Git Clone, Pull ve Fetch Komutları Hızlı Referans Tablosu

Komut Açıklama
git clone URL Uzak repository'yi bilgisayara klonlar.
git clone URL klasor Repository'yi belirlenen klasöre klonlar.
git clone --branch main URL Belirtilen branch'i başlangıç çalışma branch'i olarak seçer.
git clone --depth 1 URL Sınırlı geçmişle shallow clone oluşturur.
git remote -v Uzak repository bağlantılarını gösterir.
git remote add origin URL Yeni uzak repository bağlantısı ekler.
git remote set-url origin URL Uzak repository adresini değiştirir.
git fetch origin Origin uzak deposundaki değişiklikleri alır.
git fetch --all Yapılandırılmış uzak depolardan değişiklikleri alır.
git fetch --prune origin Origin için geçersizleşmiş uygun takip referanslarını temizler.
git pull Uzak değişiklikleri alır ve mevcut branch ile entegre etmeye çalışır.
git pull origin main Origin/main değişikliklerini mevcut branch'e entegre etmeye çalışır.
git pull --ff-only Yalnızca fast-forward mümkünse günceller.
git pull --rebase Uzak değişiklikleri alıp uygun yerel commit'leri yeniden uygular.
git pull --no-rebase Pull işleminin entegrasyon aşamasında merge kullanır.
git branch -r Remote-tracking branch referanslarını listeler.
git branch -vv Yerel branch'leri ve takip bağlantılarını gösterir.
git log main..origin/main --oneline Uzak main'de olup yerel main'de bulunmayan commit'leri listeler.
git diff main origin/main Yerel ve uzak branch referanslarının dosya durumlarını karşılaştırır.

24. Sık Sorulan Sorular

Git Clone Nedir?

Git clone, mevcut bir Git repository'sini bilgisayarınıza kopyalayan komuttur. Proje dosyalarının yanında Git geçmişini ve uzak repository bağlantısını da hazırlar.

Git Clone ile Git Pull Arasındaki Fark Nedir?

Git clone, mevcut bir repository'nin yeni yerel kopyasını oluşturur. Git pull ise önceden oluşturulmuş bir yerel repository'de uzak değişiklikleri alıp mevcut branch ile entegre etmeye çalışır.

Git Fetch Dosyalarımı Değiştirir mi?

Normal git fetch işlemi, mevcut çalışma branch'inizi ve çalışma klasöründeki takip edilen dosyaların içeriklerini otomatik olarak güncellemez. Ancak repository içerisindeki Git nesnelerini ve uygun remote-tracking referanslarını güncelleyebilir.

Git Pull İnternet Gerektirir mi?

GitHub gibi çevrim içi bir uzak repository'den değişiklik almak için ağ bağlantısı gerekir. Ancak Git, yerel depolar arasında da çalışabildiğinden bütün Git işlemleri internet bağlantısı gerektirmez.

Git Pull Yapınca Yerel Commit'lerim Silinir mi?

Normal merge tabanlı pull işlemi, yerel commit geçmişini silmek amacıyla çalışmaz. Ancak rebase gibi işlemler commit'leri yeniden oluşturabilir. Bu nedenle önemli değişiklikleri kaydetmek ve entegrasyon stratejisini doğru belirlemek gerekir.

Git Fetch ve Git Pull Hangisi Daha Güvenlidir?

Uzak değişiklikleri mevcut branch'e hemen uygulamadan önce incelemek istiyorsanız git fetch daha kontrollü bir yaklaşımdır. Git pull ise değişiklikleri doğrudan entegre etmek istediğiniz durumlarda kullanışlıdır.

Git Clone Yaptıktan Sonra Git Init Gerekir mi?

Hayır. Git clone zaten bir Git repository'si oluşturur. Klonlanan proje klasöründe yeniden git init çalıştırmanız gerekmez.

Git Pull ile Git Push Arasındaki Fark Nedir?

Git pull uzak repository'deki değişiklikleri alıp yerel branch'e entegre etmeye çalışır. Git push ise yerel commit kayıtlarını uzak repository'ye gönderir.

Git Pull --rebase Ne İşe Yarar?

Git pull --rebase, uzak değişiklikleri aldıktan sonra uygun yerel commit'leri güncellenen geçmiş üzerinde yeniden uygulayarak doğrusal bir commit geçmişi oluşturabilir.

Private GitHub Repository'si Klonlanabilir mi?

Evet. Private repository'yi görüntüleme izniniz bulunuyorsa uygun kimlik doğrulama yöntemiyle klonlayabilirsiniz.

Git Fetch --prune GitHub Branch'lerini Siler mi?

Hayır. Git fetch --prune, yapılandırılmış uzak depo referanslarına göre yerel takip referanslarını temizler. GitHub üzerindeki gerçek branch'leri silmez.

25. Sonuç: GitHub Projelerini İndirme ve Güncellemeyi Öğrendik

Bu rehberde Git'in uzak repository yönetiminde kullanılan en önemli komutlarından üçünü ayrıntılı olarak öğrendik.

Git clone ile GitHub üzerindeki projeleri bilgisayarımıza indirdik. Git fetch ile uzak repository'deki commit kayıtlarını yerel branch'imizi değiştirmeden almayı ve incelemeyi öğrendik.

Git pull ile uzak değişiklikleri yerel projeye entegre etmeyi, git pull --ff-only ile kontrollü güncelleme yapmayı ve git pull --rebase komutunun temel mantığını inceledik.

Ayrıca HTTPS ve SSH bağlantılarını, remote repository kavramını, upstream ilişkilerini ve yaygın Git hatalarını ele aldık.

Artık GitHub üzerindeki projeleri bilgisayarınıza indirebilir, uzak değişiklikleri kontrol edebilir ve geliştirme ortamınızı güncel tutabilirsiniz.

Git ve GitHub Eğitim Serisi - Bölüm 7: Gitignore Nedir? .gitignore Dosyası Oluşturma, API Anahtarlarını Koruma ve Gereksiz Dosyaları Hariç Tutma.

Bir sonraki bölümde Git'in hangi dosyaları takip etmemesi gerektiğini, .gitignore kurallarını ve özellikle Node.js, Python, PHP ve Flutter projelerinde güvenli dosya yönetimini uygulamalı olarak öğreneceğiz.

Nizokka Akademi üzerindeki diğer Git, GitHub, JavaScript, PHP, Python ve yazılım geliştirme eğitimlerini takip ederek teknik becerilerinizi geliştirmeye devam edebilirsiniz.

Kaynaklar ve Ek Okumalar

```

Benzer içerikler

Git ve GitHub

GitHub Pull Request Nedir? Kod İnceleme ve Takım Çalışması Rehberi

GitHub Pull Request nedir, nasıl oluşturulur ve birleştirilir? Bu uygulamalı rehberde feature branch üzerinden Pull Request açmayı, kod incelemeyi, reviewer eklemeyi, değişiklik taleplerini yönetmeyi ve GitHub'da profesyonel takım çalışması yapmayı öğrenin.

İçeriği oku →

Git ve GitHub

Git Merge Nedir? Branch Birleştirme ve Merge Conflict Çözümü

Git merge nedir ve branch'ler nasıl birleştirilir? Bu kapsamlı rehberde Fast-Forward Merge, Three-Way Merge, Merge Commit ve Merge Conflict kavramlarını öğrenin. Gerçek Git komutlarıyla branch birleştirmeyi, kod çakışmalarını çözmeyi ve hatalı merge işlemlerini güvenle iptal etmeyi keşfedin.

İçeriği oku →

Git ve GitHub

Git Branch Nedir? Branch Oluşturma ve Yönetimi Rehberi

Git branch nedir, nasıl oluşturulur ve yönetilir? Bu kapsamlı rehberde git branch, git switch ve git checkout komutlarını, main ve feature branch mantığını, GitHub'a branch göndermeyi ve güvenli branch silme yöntemlerini uygulamalı örneklerle öğrenin.

İçeriği oku →

Teknik desteğe mi ihtiyacınız var?

Projenizin kapsamını birlikte değerlendirelim

İletişime geçin