Takip et

Git Kullanımının Temelleri: Sürüm Kontrolüne Giriş

Git Kullanımının Temelleri: Sürüm Kontrolüne Giriş Yazılım geliştirme dünyasında projelerin yönetimi, ekip çalışması ve kod tabanının evr…

Git Kullanımının Temelleri: Sürüm Kontrolüne Giriş

Yazılım geliştirme dünyasında projelerin yönetimi, ekip çalışması ve kod tabanının evrimi, sürüm kontrol sistemleri olmadan düşünülemez. Git, günümüzün en popüler ve güçlü dağıtık sürüm kontrol sistemlerinden biridir. Bu makale, Git’in ne olduğunu, neden bu kadar önemli olduğunu ve temel kullanım adımlarını başlangıç seviyesinden itibaren detaylı bir şekilde ele alarak, sürüm kontrol dünyasına sağlam bir giriş yapmanızı sağlayacaktır.

Git Nedir ve Neden Kullanılır?

Git, yazılım geliştirme projelerinde kaynak kod değişikliklerini takip etmek, yönetmek ve farklı geliştiricilerin aynı proje üzerinde eş zamanlı çalışmasını sağlamak amacıyla kullanılan ücretsiz ve açık kaynaklı bir dağıtık sürüm kontrol sistemidir (DVCS). Linus Torvalds tarafından 2005 yılında Linux çekirdeği geliştirme sürecini yönetmek için oluşturulmuştur.

Sürüm Kontrol Sistemi (VCS) Kavramı

Sürüm kontrol sistemleri, zaman içinde dosyalarda yapılan değişiklikleri kaydetmenizi ve bu değişiklikleri yönetmenizi sağlayan araçlardır. Bir dosyanın önceki sürümlerine geri dönebilir, kimin ne zaman hangi değişikliği yaptığını görebilir ve farklı değişiklikleri birleştirebilirsiniz. Bu, özellikle birden fazla kişinin aynı proje üzerinde çalıştığı durumlarda kritik öneme sahiptir.

Dağıtık Sürüm Kontrolü (DVCS) Farkı

Geleneksel merkezi sürüm kontrol sistemlerinde (SVN gibi), tüm proje geçmişi tek bir merkezi sunucuda tutulur. Git gibi dağıtık sistemlerde ise, her geliştiricinin kendi bilgisayarında projenin tam bir kopyası (tüm geçmişiyle birlikte) bulunur. Bu durum, internet bağlantısı olmadan da çalışmaya devam etme, daha hızlı işlem yapma ve merkezi sunucunun çökmesi durumunda veri kaybı riskinin azalması gibi önemli avantajlar sunar.

Git’in Avantajları

Git’in yaygın olarak tercih edilmesinin birçok nedeni vardır:

  • Hız: Yerel işlemler sayesinde çoğu işlem oldukça hızlıdır.
  • Veri Bütünlüğü: Kriptografik karma fonksiyonları kullanarak her değişikliğin bütünlüğünü sağlar.
  • Dağıtık Yapı: Her geliştiricinin kendi deposu olduğu için merkezi bir arıza noktası yoktur.
  • İşbirliği: Farklı geliştiricilerin aynı kod tabanı üzerinde kolayca çalışmasını ve değişiklikleri birleştirmesini sağlar.
  • Dallanma ve Birleştirme: Yeni özellikler geliştirmek veya hataları düzeltmek için kolayca dallar (branch) oluşturulabilir ve ana projeye geri birleştirilebilir.

Git Kurulumu ve Temel Ayarlar

Git’i kullanmaya başlamadan önce bilgisayarınıza kurmanız ve temel kullanıcı bilgilerinizi yapılandırmanız gerekir.

İşletim Sistemine Göre Kurulum

Git’i kurmak oldukça basittir:

  • Windows: Git’in resmi web sitesinden (git-scm.com) “Git for Windows” yükleyicisini indirebilirsiniz. Kurulum sırasında varsayılan seçenekleri genellikle yeterlidir.
  • macOS: Homebrew kullanıyorsanız brew install git komutuyla veya Xcode Command Line Tools ile birlikte otomatik olarak yüklenebilir.
  • Linux: Çoğu Linux dağıtımında paket yöneticisi aracılığıyla kurulabilir. Örneğin, Debian/Ubuntu için sudo apt install git, Fedora için sudo dnf install git komutunu kullanabilirsiniz.

Kurulumun ardından terminalinizi (komut istemcisini) açıp git --version komutunu çalıştırarak Git’in doğru bir şekilde kurulup kurulmadığını kontrol edebilirsiniz.

Kullanıcı Bilgilerini Yapılandırma (git config)

Git, yaptığınız her commit’in (kayıt) kim tarafından yapıldığını bilmek ister. Bu nedenle, ilk kullanımda kullanıcı adınızı ve e-posta adresinizi ayarlamanız önemlidir.

git config --global user.name "Adınız Soyadınız"
git config --global user.email "eposta@adresiniz.com"


--global bayrağı, bu ayarların bilgisayarınızdaki tüm Git depoları için geçerli olmasını sağlar. Belirli bir depo için farklı bir kullanıcı adı veya e-posta adresi kullanmak isterseniz, --global bayrağını kullanmadan ilgili deponun dizininde bu komutları çalıştırabilirsiniz.

Varsayılan Editör Ayarı

Git, commit mesajları yazarken veya birleştirme çakışmalarını çözerken bir metin editörü kullanır. Varsayılan olarak Vim gibi bir editör gelebilir. Kendi tercih ettiğiniz editörü (örneğin VS Code) ayarlayabilirsiniz:

git config --global core.editor "code --wait"


Bu komut, VS Code'u varsayılan editör olarak ayarlar ve Git'in VS Code penceresi kapatılana kadar beklemesini sağlar.

Git Deposu Oluşturma ve Yönetme

Bir projeyi Git ile sürüm kontrolü altına almak için öncelikle bir Git deposu (repository) oluşturmanız gerekir.

Yeni Bir Depo Başlatma (git init)

Mevcut bir proje klasörünü Git deposuna dönüştürmek veya yeni bir Git projesi başlatmak için git init komutunu kullanırız.

cd /yol/proje_klasorune
git init


Bu komut, proje klasörünüzde gizli bir .git dizini oluşturur. Bu dizin, Git'in projenin tüm sürüm geçmişini ve yapılandırmasını sakladığı yerdir.

Mevcut Bir Depoyu Klonlama (git clone)

GitHub, GitLab veya Bitbucket gibi uzak bir depoda bulunan mevcut bir projeyi kendi bilgisayarınıza indirmek için git clone komutunu kullanırsınız.

git clone 


Örneğin:

git clone https://github.com/kullaniciadi/projeadi.git


Bu komut, uzak depodaki tüm dosyaları ve projenin tam geçmişini içeren yeni bir klasör oluşturur.

Depo Durumunu Kontrol Etme (git status)

git status komutu, çalışma dizininizin ve hazırlık alanınızın (staging area) mevcut durumunu gösterir. Hangi dosyaların değiştirildiğini, hangilerinin hazırlık alanına eklendiğini ve hangilerinin henüz takip edilmediğini listeler.

git status


Bu komut, bir sonraki commit'inizde nelerin yer alacağını anlamak için çok önemlidir.

Değişiklikleri Takip Etme ve Kaydetme

Git'in temel iş akışı, dosyalarda yapılan değişiklikleri takip etmek, hazırlık alanına eklemek ve ardından bu değişiklikleri depoya kaydetmekten (commit) oluşur.

Çalışma Dizini, Hazırlık Alanı ve Depo

Git'in üç ana durumu vardır:

  • Çalışma Dizini (Working Directory): Proje dosyalarınızın bulunduğu ve üzerinde değişiklik yaptığınız alandır.
  • Hazırlık Alanı (Staging Area/Index): Bir sonraki commit'e dahil etmek istediğiniz değişiklikleri geçici olarak tuttuğunuz alandır.
  • Git Deposu (Git Repository): Commit edilmiş tüm değişikliklerin kalıcı olarak saklandığı veritabanıdır.

Değişiklikleri Hazırlık Alanına Ekleme (git add)

Çalışma dizininizde yaptığınız değişiklikleri bir sonraki commit'e dahil etmek için git add komutunu kullanırsınız.

git add dosya_adi.txt         # Belirli bir dosyayı ekle
git add .                     # Tüm değiştirilmiş ve yeni dosyaları ekle
git add *.js                  # Belirli bir desene uyan dosyaları ekle


Bu komut, dosyaları çalışma dizininden hazırlık alanına taşır.

Değişiklikleri Kaydetme (git commit)

Hazırlık alanındaki değişiklikleri kalıcı olarak Git deposuna kaydetmek için git commit komutunu kullanırsınız. Her commit, projenin belirli bir anlık görüntüsünü temsil eder ve benzersiz bir kimliğe (hash) sahiptir.

git commit -m "Anlamlı commit mesajı buraya"


-m bayrağı ile commit mesajını doğrudan komut satırında yazabilirsiniz. Daha uzun veya detaylı mesajlar için git commit yazıp enter'a bastığınızda varsayılan editörünüz açılacaktır. İyi bir commit mesajı, yapılan değişikliğin amacını ve içeriğini açıkça belirtmelidir.

Değişiklik Geçmişini Görüntüleme (git log)

Projenin tüm commit geçmişini görmek için git log komutunu kullanırsınız.

git log


Bu komut, commit kimliğini (hash), yazarın adını ve e-postasını, commit tarihini ve commit mesajını gösterir. Geçmişi daha özet veya görsel bir şekilde görmek için çeşitli bayraklar kullanabilirsiniz:

git log --oneline           # Her commit'i tek satırda göster
git log --graph --oneline   # Commit geçmişini grafiksel olarak göster
git log -p                  # Her commit'teki değişiklikleri (diff) göster

Dallanma (Branching) ve Birleştirme (Merging)

Git'in en güçlü özelliklerinden biri dallanma (branching) yeteneğidir. Bu, ana kod tabanından ayrılıp yeni özellikler geliştirmek veya hataları düzeltmek için izole çalışma ortamları oluşturmanızı sağlar.

Branch Nedir ve Neden Kullanılır?

Bir branch, projenin ana kod tabanının (genellikle main veya master olarak adlandırılır) bağımsız bir kopyasıdır. Geliştiriciler, yeni bir özellik üzerinde çalışırken veya bir hata düzeltirken ana kod tabanını etkilemeden kendi branch'lerinde çalışabilirler. İşleri bittiğinde, değişikliklerini ana branch'e geri birleştirebilirler. Bu, paralel geliştirmeyi ve güvenli denemeleri mümkün kılar.

Yeni Bir Branch Oluşturma ve Geçiş Yapma (git branch, git checkout)

Yeni bir branch oluşturmak için:

git branch yeni-ozellik


Mevcut branch'leri listelemek ve hangi branch'te olduğunuzu görmek için:

git branch


Oluşturduğunuz branch'e geçiş yapmak için:

git checkout yeni-ozellik


Yeni bir branch oluşturup doğrudan o branch'e geçmek için daha kısa bir yol:

git checkout -b yeni-ozellik

Branchleri Birleştirme (git merge)

Bir branch'te yaptığınız değişiklikleri başka bir branch'e (örneğin main branch'ine) entegre etmek için birleştirme (merge) işlemi kullanılır.
Önce ana branch'e geçin:

git checkout main


Ardından, geliştirdiğiniz branch'i ana branch'e birleştirin:

git merge yeni-ozellik


Birleştirme başarılı olursa, yeni-ozellik branch'indeki tüm değişiklikler main branch'ine eklenmiş olur. Artık yeni-ozellik branch'ine ihtiyacınız kalmadıysa silebilirsiniz:

git branch -d yeni-ozellik

Çakışmaları (Conflicts) Çözme

İki farklı branch birleştirilirken aynı dosyanın aynı satırlarında farklı değişiklikler yapılmışsa, Git otomatik olarak birleştirme yapamaz ve bir "birleştirme çakışması" (merge conflict) oluşur. Bu durumda Git, çakışan kısımları özel işaretleyicilerle gösterir ve manuel olarak çözmenizi bekler.
Çakışan dosyayı açtığınızda şuna benzer bir yapı görürsünüz:

<<<<<<< HEAD
Bu, mevcut branch'teki (main) kod.
=======
Bu, birleştirilen branch'teki (yeni-ozellik) kod.
>>>>>>> yeni-ozellik


İstediğiniz sürümü seçerek veya her iki değişikliği birleştirerek çakışmayı çözmelisiniz. Çakışmayı çözdükten sonra dosyayı kaydedin, hazırlık alanına ekleyin ve birleştirme işlemini tamamlamak için commit edin:

git add dosya_adi.txt
git commit -m "Birleştirme çakışması çözüldü"

Uzak Depolarla Çalışma

Git, dağıtık bir sistem olduğu için birden fazla geliştiricinin aynı proje üzerinde çalışabilmesi için uzak depolarla (remote repositories) etkileşim kurma yeteneği sunar. GitHub, GitLab ve Bitbucket gibi platformlar, uzak depoları barındırmak için popüler seçeneklerdir.

Uzak Depo Ekleme (git remote add)

Mevcut bir yerel Git deposunu uzak bir depoya bağlamak için git remote add komutunu kullanırsınız. Genellikle uzak depoya origin adını veririz.

git remote add origin https://github.com/kullaniciadi/projeadi.git


Uzak depoları listelemek için:

git remote -v

Değişiklikleri Uzak Depoya Gönderme (git push)

Yerel deponuzdaki commit'leri uzak depoya göndermek için git push komutunu kullanırsınız.

git push -u origin main


-u (veya --set-upstream) bayrağı, yerel main branch'inizi origin adlı uzak deponun main branch'ine bağlar. Bu sayede sonraki push işlemleri için sadece git push yazmanız yeterli olur.

Değişiklikleri Uzak Depodan Çekme (git pull, git fetch)

Uzak depodaki değişiklikleri yerel deponuza indirmek için iki ana komut vardır:

  • git fetch: Uzak depodaki değişiklikleri indirir ancak yerel çalışma dizininizi veya branch'inizi güncellemez. Değişiklikleri incelemek ve manuel olarak birleştirmek için kullanışlıdır.
  • git pull: Uzak depodaki değişiklikleri indirir (fetch) ve otomatik olarak yerel branch'inizle birleştirir (merge). Genellikle bu komut tercih edilir.
git fetch origin
git pull origin main


git pull komutu, genellikle git fetch ve git merge işlemlerinin birleşimidir.

Uzak Depo Bilgilerini Görüntüleme

Uzak depolar hakkında daha fazla bilgi almak için:

git remote show origin


Bu komut, uzak deponun URL'lerini, takip edilen branch'leri ve diğer ilgili bilgileri gösterir.

Yaygın Git Komutları ve İpuçları

Git'i daha verimli kullanmak için bilmeniz gereken bazı ek komutlar ve ipuçları vardır.

Değişiklikleri Geri Alma (git reset, git revert)

Git'te yapılan hataları geri almak için çeşitli yöntemler bulunur:

  • git reset: Hazırlık alanındaki veya commit edilmiş değişiklikleri geri almak için kullanılır. Dikkatli kullanılmalıdır, çünkü geçmişi değiştirebilir.
    git reset HEAD dosya_adi.txt   # Dosyayı hazırlık alanından çıkarır
    git reset --hard HEAD~1        # Son commit'i tamamen geri alır (yerel değişiklikleri de siler!)
            

  • git revert: Mevcut commit'i geri alan yeni bir commit oluşturur. Bu, geçmişi değiştirmek yerine yeni bir kayıt eklediği için daha güvenli bir yöntemdir, özellikle paylaşılan depolarda.
    git revert 
            

Dosyaları Yoksayma (.gitignore)

Projenizde Git tarafından takip edilmesini istemediğiniz dosyalar veya klasörler olabilir (örneğin, derlenmiş dosyalar, geçici dosyalar, loglar, yapılandırma dosyaları). Bu tür öğeleri .gitignore adlı bir dosyaya ekleyerek Git'in bunları görmezden gelmesini sağlayabilirsiniz.
.gitignore dosyası projenizin kök dizininde bulunur ve her satırda bir desen içerir:

# .gitignore örnekleri
*.log          # Tüm .log uzantılı dosyaları yoksay
/node_modules/ # node_modules klasörünü yoksay
.env           # .env dosyasını yoksay

Alias (Takma Ad) Kullanımı

Sık kullandığınız Git komutları için takma adlar (alias) oluşturarak zamandan tasarruf edebilirsiniz.

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%Creset' --abbrev-commit"


Artık git checkout yerine git co, git status yerine git st yazabilirsiniz.

Sonuç

Git, modern yazılım geliştirmenin vazgeçilmez bir parçasıdır. Bu makalede ele aldığımız temel komutlar ve kavramlar (depo oluşturma, değişiklikleri takip etme, dallanma, birleştirme ve uzak depolarla çalışma), Git'i etkili bir şekilde kullanmaya başlamanız için sağlam bir temel sunmaktadır. Unutmayın ki Git'in gücü, pratik yaparak ve farklı senaryoları deneyimleyerek tam olarak anlaşılır. Sürüm kontrolünü projelerinize entegre ederek daha düzenli, işbirliğine açık ve hatasız bir geliştirme süreci elde edeceksiniz. Git'in sunduğu olanakları keşfetmeye devam edin ve geliştirme yolculuğunuzda bu güçlü aracı bir müttefik olarak kullanın.

SSS (Sık Sorulan Sorular)

Git ve GitHub aynı şey mi?
Hayır, Git bir sürüm kontrol sistemidir (bir yazılımdır), GitHub ise Git depolarını barındıran web tabanlı bir hizmettir. GitHub, Git depolarınızı çevrimiçi olarak saklamanıza, projeler üzerinde işbirliği yapmanıza ve açık kaynak projelerini keşfetmenize olanak tanır.
Git'te commit mesajları neden önemlidir?
İyi yazılmış commit mesajları, projenin geçmişini okuyan herkesin (siz dahil) yapılan değişikliklerin nedenini, neyi amaçladığını ve neyi çözdüğünü hızlıca anlamasını sağlar. Bu, hata ayıklama, özellik takibi ve ekip içi iletişim için kritik öneme sahiptir.
Yanlışlıkla commit ettiğim bir şeyi nasıl geri alırım?
Eğer commit'i henüz uzak depoya göndermediyseniz, git reset HEAD~1 (son commit'i geri alır, değişiklikleri çalışma dizininde bırakır) veya git reset --hard HEAD~1 (son commit'i ve tüm değişiklikleri siler) kullanabilirsiniz. Eğer commit'i zaten uzak depoya gönderdiyseniz, git revert komutuyla bu commit'i geri alan yeni bir commit oluşturmanız daha güvenlidir.
Branch'ler arasında geçiş yaparken nelere dikkat etmeliyim?
Branch'ler arasında geçiş yapmadan önce çalışma dizininizdeki tüm önemli değişiklikleri commit etmeniz veya geçici olarak kaydetmeniz (git stash) önerilir. Aksi takdirde, kaydedilmemiş değişiklikler kaybolabilir veya geçiş yapmaya çalıştığınız branch ile çakışabilir.
Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık