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.