Git ile Versiyon Kontrolü

Projelerinizi güvenle yönetin, işbirliği yapın ve kodunuzu takip edin.

Git Nedir?

Git'in Tanımı ve Tarihi

Git, 2005 yılında Linux işletim sisteminin yaratıcısı Linus Torvalds tarafından geliştirilmiş, dağıtık bir versiyon kontrol sistemidir. Linus, Linux çekirdeği geliştirmesi için daha iyi bir araç arayışındaydı ve mevcut çözümlerden memnun olmadığı için Git'i oluşturdu.

Git'in adı, Linus'un kendi ifadesiyle "aptal, basit ama etkili" anlamına gelen İngilizce bir argo kelimeden gelmektedir. Başlangıçta sadece 2 hafta içinde temel yapısı oluşturulmuş ve kısa sürede Linux çekirdeğinin geliştirilmesinde kullanılmaya başlanmıştır.

Git'in Doğuşu

Linus Torvalds tarafından Linux çekirdeği için geliştirildi

GitHub'ın Kuruluşu

Git tabanlı proje barındırma servisi GitHub kuruldu

GitLab'ın Ortaya Çıkışı

Açık kaynaklı Git yönetim sistemi GitLab geliştirildi

Microsoft Dönemi

Microsoft, GitHub'ı 7.5 milyar dolara satın aldı

Hızlı
Dağıtık
Güvenli
Esnek
Açık Kaynak

Neden Git Kullanmalıyız?

Versiyon Geçmişi

Git, projenizin tüm geçmişini saklar. Her değişiklik, kim tarafından ne zaman yapıldığı bilgisiyle birlikte kaydedilir. Bu sayede herhangi bir zamandaki projenizin durumuna geri dönebilirsiniz.

İşbirliği

Birden fazla geliştirici aynı projede çalışırken, Git çakışmaları (conflict) yönetmeyi ve değişiklikleri birleştirmeyi kolaylaştırır. Ekip üyeleri aynı anda farklı özellikler üzerinde çalışabilir.

Dallanma Kolaylığı

Git'in güçlü dallanma mekanizması, yeni özellikleri ana koddan izole bir şekilde geliştirmenize olanak tanır. Bu, stabil bir ana kod tabanını korurken yeni özellikler eklemeyi mümkün kılar.

Dağıtık Yapı

Her geliştirici, projenin tam bir kopyasına sahiptir. Bu, internet bağlantısı olmadan bile çalışmaya devam edebilmenizi ve merkezi sunucu çökmesi durumunda veri kaybı yaşamamanızı sağlar.

Veri Bütünlüğü

Git, her commit'in benzersiz bir hash değeriyle tanımlanmasını sağlayarak, projenizin bütünlüğünü korur. Bu, herhangi bir değişikliğin fark edilmeden yapılmasını imkansız hale getirir.

Performans

Git, büyük projeler ve binlerce dal (branch) ile bile hızlı çalışacak şekilde tasarlanmıştır. Çoğu işlem yerel olarak gerçekleştiği için ağ gecikmesi yaşanmaz.

Git vs Diğer Versiyon Kontrol Sistemleri

Özellik Git SVN Mercurial
Mimari Dağıtık Merkezi Dağıtık
Çevrimdışı Çalışma
Dallanma Performansı Çok Hızlı Yavaş Hızlı
Öğrenme Eğrisi Orta Kolay Orta
Topluluk Desteği Çok Geniş Orta Geniş

Temel Git Komutları

Git'i kullanmaya başlamak için bilmeniz gereken temel komutlar aşağıda açıklanmıştır. Bu komutlar, günlük Git iş akışınızın temelini oluşturur.

git init

Yeni bir Git deposu oluşturur. Bu komut, mevcut bir dizini Git deposuna dönüştürerek versiyon kontrolü başlatır. Bu işlem, projenizin kök dizininde gizli bir .git klasörü oluşturur.

$ git init

$ git init

Initialized empty Git repository in .git/

git add

Dosyaları hazırlama alanına (staging area) ekler. Bu, değişikliklerinizi bir sonraki commit için hazırlar. Belirli dosyaları eklemek için git add dosya.txt veya tüm değişiklikleri eklemek için git add . kullanabilirsiniz.

$ git add dosya.txt

$ git add dosya.txt

Changes staged for commit

git commit

Hazırlama alanındaki değişiklikleri depoya kaydeder. Her commit, projenizin bir anlık görüntüsünü oluşturur ve benzersiz bir kimlik (hash) ile tanımlanır. İyi bir commit mesajı, değişikliğin amacını açıkça belirtmelidir.

$ git commit -m "Mesaj"

$ git commit -m "İlk commit"

[main f7d2e3a] İlk commit

1 file changed, 10 insertions(+)

git status

Mevcut çalışma dizininin durumunu gösterir. Değişiklik yapılan, hazırlama alanına eklenen ve commit için hazır olan dosyaları listeler.

$ git status

$ git status

On branch main

Changes to be committed:

(use "git restore --staged <file>..." to unstage)

modified: index.html

Changes not staged for commit:

(use "git add <file>..." to update what will be committed)

modified: style.css

git push

Yerel depodaki commit'leri uzak depoya gönderir. Bu komut, yaptığınız değişiklikleri diğer geliştiricilerle paylaşmanızı sağlar.

$ git push origin main

$ git push origin main

Enumerating objects: 5, done.

Counting objects: 100% (5/5), done.

Delta compression using up to 8 threads

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 353 bytes | 353.00 KiB/s, done.

Total 3 (delta 2), reused 0 (delta 0)

remote: Resolving deltas: 100% (2/2), completed with 2 local objects.

To https://github.com/username/repo.git

a1b2c3d..f7d2e3a main -> main

git pull

Uzak depodaki değişiklikleri yerel deponuza çeker ve birleştirir. Bu komut, diğer geliştiricilerin yaptığı değişiklikleri kendi yerel kopyanıza almak için kullanılır.

$ git pull origin main

$ git pull origin main

remote: Enumerating objects: 5, done.

remote: Counting objects: 100% (5/5), done.

remote: Compressing objects: 100% (2/2), done.

remote: Total 3 (delta 1), reused 3 (delta 1)

Unpacking objects: 100% (3/3), 340 bytes | 34.00 KiB/s, done.

From https://github.com/username/repo

a1b2c3d..e5f6g7h main -> origin/main

Updating a1b2c3d..e5f6g7h

Fast-forward

README.md | 5 +++++

1 file changed, 5 insertions(+)

Dallanma (Branching)

Dallanma, Git'in en güçlü özelliklerinden biridir ve paralel geliştirmeyi mümkün kılar. Farklı dallar oluşturarak, ana kod tabanını etkilemeden yeni özellikler geliştirebilirsiniz.

Git'in en güçlü özelliklerinden biri dallanma mekanizmasıdır. Dallanma, ana kod tabanından ayrı olarak yeni özellikler geliştirmenize olanak tanır. Bu, stabil bir ana dalı (genellikle main veya master) korurken, yeni özellikler veya hata düzeltmeleri üzerinde çalışmanızı sağlar.

Dallanma stratejileri, projenizin ihtiyaçlarına göre değişebilir. Yaygın stratejiler arasında Git Flow, GitHub Flow ve GitLab Flow bulunur.

$ git branch yeni-ozellik
$ git checkout yeni-ozellik

veya tek komutla:

$ git checkout -b yeni-ozellik
main
feature

Uzak Depolar (Remote Repositories)

Uzak depolar, kodunuzu başkalarıyla paylaşmanızı ve işbirliği yapmanızı sağlar. GitHub, GitLab ve Bitbucket gibi platformlar, Git tabanlı uzak depo hizmetleri sunar.

Yerel Depo

index.html
style.css
app.js
git push
git pull

Uzak Depo

index.html
style.css
app.js

Uzak Depolarla Çalışma

Uzak depolar, kodunuzu başkalarıyla paylaşmanızı ve işbirliği yapmanızı sağlar. Uzak bir depo, internet veya ağ üzerinde barındırılan bir Git deposudur.

En popüler Git barındırma hizmetleri arasında GitHub, GitLab, Bitbucket ve Azure DevOps bulunur. Bu platformlar, kod inceleme, sorun takibi ve sürekli entegrasyon gibi ek özellikler sunar.

Uzak Depo Ekleme

$ git remote add origin https://github.com/kullanici/repo.git

Bu komut, yerel deponuza "origin" adında bir uzak depo ekler. "origin" geleneksel olarak ana uzak depo için kullanılan isimdir, ancak istediğiniz herhangi bir ismi kullanabilirsiniz.

Değişiklikleri Gönderme (Push)

$ git push -u origin main

Bu komut, yerel "main" dalındaki değişiklikleri "origin" uzak deposuna gönderir. "-u" parametresi, gelecekteki push işlemleri için varsayılan uzak depo ve dalı ayarlar.

Değişiklikleri Çekme (Pull)

$ git pull origin main

Bu komut, "origin" uzak deposundaki "main" dalındaki değişiklikleri yerel deponuza çeker ve birleştirir. Aslında bu komut, git fetch ve git merge komutlarının birleşimidir.

Uzak Depoları Görüntüleme

$ git remote -v

Bu komut, tüm uzak depoları ve URL'lerini listeler. "-v" parametresi "verbose" (ayrıntılı) anlamına gelir ve hem push hem de fetch URL'lerini gösterir.

Uzak Depo Bilgilerini Güncelleme

$ git remote set-url origin https://github.com/yeni-kullanici/repo.git

Bu komut, mevcut bir uzak deponun URL'sini değiştirir. Örneğin, depo sahipliği değiştiğinde veya depo taşındığında kullanışlıdır.

Git İş Akışı

Temel Git iş akışı, dosyalarınızı değiştirme, değişiklikleri hazırlama alanına ekleme, commit etme ve uzak depoya gönderme adımlarını içerir. Bu döngü, Git ile çalışmanın temelidir.

1

Değişiklikler Yapın

Dosyalarınızı düzenleyin ve geliştirin.

Bu aşamada, projenizde gerekli değişiklikleri yapıyorsunuz. Yeni dosyalar oluşturabilir, mevcut dosyaları düzenleyebilir veya silebilirsiniz.

2

Değişiklikleri Ekleyin

git add ile değişiklikleri hazırlama alanına ekleyin.

Değişiklikleri hazırlama alanına (staging area) eklemek, hangi değişikliklerin bir sonraki commit'e dahil edileceğini belirtir.

$ git add dosya.txt    # Belirli bir dosyayı ekle
$ git add .          # Tüm değişiklikleri ekle
3

Commit Edin

git commit ile değişiklikleri kaydedin.

Commit, hazırlama alanındaki değişiklikleri projenizin geçmişine kaydeder. Her commit, benzersiz bir kimlik (hash) ile tanımlanır.

$ git commit -m "Açıklayıcı bir commit mesajı"

Açıklayıcı ve anlaşılır commit mesajları yazmak, projenizin geçmişini daha iyi anlamak için çok önemlidir.

4

Push Edin

git push ile değişiklikleri uzak depoya gönderin.

Bu adım, yerel deponuzdaki commit'leri uzak depoya gönderir, böylece diğer geliştiriciler değişikliklerinizi görebilir ve çekebilir.

$ git push origin main

Git İpuçları ve En İyi Uygulamalar

Git'i daha etkili kullanmanıza yardımcı olacak bazı ipuçları ve en iyi uygulamaları derledik.

Anlamlı Commit Mesajları Yazın

Commit mesajlarınız, değişikliğin ne yaptığını ve neden yapıldığını açıkça belirtmelidir. İyi bir format şöyledir:

Kısa özet (50 karakter veya daha az)

Daha detaylı açıklama. Gerekirse birden fazla
paragraf kullanabilirsiniz. Satırları yaklaşık
72 karakterde kesin.

Sık Sık Commit Yapın

Küçük, mantıklı parçalar halinde sık sık commit yapmak, değişiklikleri takip etmeyi kolaylaştırır ve sorun çıktığında belirli bir noktaya geri dönmeyi mümkün kılar.

.gitignore Dosyası Kullanın

Geçici dosyaları, derleme çıktılarını, kişisel IDE ayarlarını ve hassas bilgileri içeren dosyaları izlememek için bir .gitignore dosyası oluşturun.

# Örnek .gitignore içeriği
node_modules/
*.log
.env
.DS_Store
.idea/

Sürümleri Etiketleyin

Sürüm numaralarını veya önemli noktaları etiketlemek, daha sonra bu noktalara kolayca erişmenizi sağlar.

$ git tag -a v1.0.0 -m "Sürüm 1.0.0"
$ git push origin v1.0.0

Dallanma Stratejinizi Belirleyin

Projeniz için uygun bir dallanma stratejisi belirleyin ve ekip üyelerinizin buna uymasını sağlayın. Bu, kod tabanınızın düzenli ve yönetilebilir kalmasına yardımcı olur.

Geçmişi Yeniden Yazarken Dikkatli Olun

Git, geçmişi değiştirmenize olanak tanır (git rebase, git commit --amend), ancak bu, zaten paylaşılmış commitler için sorunlara neden olabilir. Paylaşılmış dalların geçmişini yeniden yazmaktan kaçının.

Git Oyunu