Bir projeyi yalnızca kendi bilgisayarında tutmak, bütün yumurtaları aynı sepete koymaya benzer. Git’in uzak depo mekanizması sayesinde kodlar GitHub, GitLab veya Bitbucket gibi servislerde saklanabilir; ekip üyeleri aynı proje üzerinde çalışabilir ve yerel değişiklikler dış dünyayla paylaşılabilir. Bu süreçte clone, remote, fetch, pull ve push komutları başrolü üstlenir.
``
Yerel ve uzak depo nedir?
Yerel depo, bilgisayarındaki çalışma dosyalarını, commit geçmişini, dalları ve Git metadata’sını içeren depodur. Uzak depo ise genellikle internete bağlı bir sunucuda barındırılan ve ekip için ortak buluşma noktası görevi gören Git deposudur.
Git dağıtık bir sürüm kontrol sistemi olduğu için uzak sunucu, geçmişin tek sahibi değildir. Bir projeyi klonladığında commit geçmişinin tamamına yakın bir kopyasını alırsın. Başka bir deyişle yerel depo $L$, uzak depo $R$ ile gösterilirse klonlama sonrasında başlangıçta yaklaşık olarak şu ilişki kurulur:
\[L \approx R\]Zamanla iki tarafta farklı commit’ler oluşabilir. Ayrışma miktarını basitçe şu şekilde düşünebiliriz:
\[\Delta = |C_L \triangle C_R|\]Burada $C_L$ ve $C_R$ yerel ve uzak commit kümelerini, $\triangle$ ise iki küme arasındaki farklılığı temsil eder. fetch, pull ve push işlemleri bu farkı yönetmemizi sağlar.
| Özellik | Yerel depo | Uzak depo |
|---|---|---|
| Konum | Kendi bilgisayarın | Git sunucusu veya bulut servisi |
| İnternet gereksinimi | Çoğu işlemde gerekmez | Veri alışverişinde gerekir |
| Temel amaç | Geliştirme ve commit oluşturma | Paylaşım, yedekleme ve iş birliği |
| Tipik dallar | main, özellik dalları |
origin/main, ekip dalları |
Bir projeyi klonlamak
Var olan bir uzak projeyi bilgisayara indirmek için git clone kullanılır:
git clone https://github.com/kullanici/proje.git
cd proje
Bu komut yalnızca dosyaları indirmez. Commit geçmişini getirir, çalışma dizinini hazırlar ve uzak adresi varsayılan olarak origin adıyla kaydeder. Farklı bir klasör adı kullanmak da mümkündür:
git clone https://github.com/kullanici/proje.git benim-projem
HTTPS kolay başlangıç sunarken SSH, anahtar tabanlı kimlik doğrulamasıyla sık işlem yapan geliştiriciler için daha rahattır.
| Bağlantı türü | Örnek | Avantajı | Dikkat edilmesi gereken |
|---|---|---|---|
| HTTPS | https://github.com/a/b.git |
Kurulumu kolaydır | Token gerekebilir |
| SSH | git@github.com:a/b.git |
Parolasız ve güvenli kullanım | SSH anahtarı kurulmalıdır |
Yerel depoyu uzak sunucuya bağlamak
Bilgisayarında sıfırdan oluşturduğun bir projeyi uzak depoya bağlamak için önce serviste boş bir depo oluşturabilir, ardından şu komutları çalıştırabilirsin:
git init
git add .
git commit -m "İlk sürüm"
git branch -M main
git remote add origin git@github.com:kullanici/proje.git
git push -u origin main
git remote add origin ..., adrese origin takma adını verir. git push -u origin main ise yerel main dalını sunucuya gönderir ve takip ilişkisi kurar. Sonraki gönderimlerde çoğunlukla yalnızca git push yazmak yeterlidir.
Kayıtlı bağlantıları incelemek için:
git remote -v
Yanlış adres eklediysen bağlantıyı değiştirebilirsin:
git remote set-url origin yeni-adres
git remote remove origin
Fetch, pull ve push farkı
Bu üç komut benzer görünse de aynı işi yapmaz:
| Komut | Yön | Etkisi |
|---|---|---|
git fetch |
Uzak → Yerel metadata | Değişiklikleri getirir, çalışma dalını birleştirmez |
git pull |
Uzak → Yerel dal | Fetch yapar, ardından birleştirir veya rebase uygular |
git push |
Yerel → Uzak | Yerel commit’leri sunucuya gönderir |
Özellikle ekip çalışmalarında önce git fetch çalıştırıp farkları incelemek daha kontrollü olabilir:
git fetch origin
git log --oneline main..origin/main
git pull --rebase origin main
git push origin main
Bu akış, uzaktaki commit’leri görmeni, değişiklikleri doğrusal bir geçmişle bütünleştirmeni ve ardından kendi commit’lerini paylaşmanı sağlar. Kısacası clone projeye giriş kapısı, remote adres defteri, fetch haberci, pull teslimatçı ve push ise kodunu buluta taşıyan kurye gibidir.
Yorumlar