Pazar, 20 Eylül 2026

Git Nedir ve Nasıl Kullanılır?

9 dk okuma 0 yorum

Git, modern yazılım geliştirme süreçlerinin bel kemiği haline gelmiş bir dağıtık versiyon kontrol sistemi olarak tanımlanır. 2005 yılında Linus Torvalds tarafından Linux çekirdeği çalışmalarını daha verimli yönetebilmek amacıyla geliştirilmiştir. Bugün ise açık kaynak topluluğundan başlayarak büyük kurumsal ortamlara kadar geniş bir kullanıcı kitlesi tarafından benimsenmektedir.

İlk başlarda, tek bir geliştiricinin bir dosya üzerinde tek başına değişiklik yapmasıyla başlayan süreç, Git sayesinde milyonlarca satır kodun aynı anda değiştirilebileceği, geçmiş sürümlere anlık erişilebileceği bir ekosisteme dönüşmüştür. Böylece ekip içi iş birliği, hataların izlenmesi ve geri dönüş yapma imkanı, önceki sürüm kontrol sistemlerine göre çok daha hızlı ve güvenilir hale gelmiştir. Git’in sunduğu dağıtık yapı sayesinde, her geliştirici kendi çalışma kopyasında tam bir repo kopyasına sahip olur; bu da kesintisiz çalışma ve çevrimdışı erişim anlamına gelir.

Temel Kavramlar ve Tanımlar

Git, bir proje dosyalarının zaman içinde nasıl değiştiğini izleyen bir versiyon kontrol sistemidir. Temel kavramlar arasında “commit” (değişiklik kaydı), “branch” (şube) ve “merge” (birleştirme) bulunur. Commit, bir dosya setinin anlık bir sürümünü saklamak için kullanılır ve her commit benzersiz bir hash kodu alır. Branch, temel dal (master/main) üzerinde paralel geliştirme yapılmasına olanak tanır. Merge ise iki branch’in içeriklerini tek bir dalda birleştirmek için kullanılır; bu süreçte çakışmaların çözülmesi gerekir.

Git’in dağıtık yapısı, her kullanıcının yerel bir depo kopyasına sahip olmasıyla karakterizedir. Bu sayede internet bağlantısı olmadan bile tüm Git işlemleri gerçekleştirilebilir. Sunucu tarafında ise “remote” (uzak) depolar bulunur; bu uzak depolar genellikle GitHub, GitLab ya da Bitbucket gibi servislerde barındırılır. Kullanıcılar “push” ve “pull” komutlarıyla yerel ve uzak depolar arasında veri senkronizasyonu yaparlar.

Gitin Tarihsel Gelişimi

Linus Torvalds, Linux çekirdeği geliştirme sürecinde karşılaştığı performans ve ölçeklenebilirlik sorunlarını çözmek amacıyla Git’i 2005 yılında tasarladı. O dönemde kullanılan CVS ve Subversion gibi sistemler büyük projelerde yavaşlamaya ve çakışma sorunlarına yol açıyordu. Git, bu problemleri dağıtık yapı ve hızlı commit işlemleri ile ortadan kaldırdı. İlk sürümü 2005’de yayınlanan Git, 2007’de “Git v1.0” olarak stabil bir sürüm elde etti. Bu dönemde Git, Linux çekirdeği dışında da popülerlik kazanmaya başladı.

2010’lu yıllarda GitHub’un kurulmasıyla birlikte Git, web tabanlı iş akışı entegrasyonuna yeni bir soluk getirdi. GitHub, sürüm kontrolüyle birlikte issue tracking, pull request ve CI/CD entegrasyonlarıyla birlikte ortaya çıktı. Bu ekosistem, geliştiricilere kod inceleme, otomatik test çalıştırma ve dağıtım süreçleri için tek bir platform sundu. Son yıllarda GitLab ve Bitbucket gibi alternatifler de benzer özellikler ekleyerek rekabet ortamını zenginleştirdi.

Git ile Versiyon Kontrolü Nasıl Çalışır

Git, dosya değişikliklerini “blob” adı verilen ikili nesneler olarak saklar. Her değişiklik commit ile ilişkilendirilir ve commit, bir parent commit’e bağlanır; bu sayede geçmiş sürümler zincir halinde takip edilebilir. Git’in “tree” nesneleri, bir commit’in dosya yapısını temsil eder ve “blob” nesnelerini içerir.

Commit oluşturmak için “add” ve “commit” komutları sıklıkla kullanılır. “git add” değişiklikleri staging area’ya eklerken, “git commit” bu değişiklikleri kalıcı olarak depoya kaydeder. “git log” komutu, commit geçmişini listeleyerek proje evrimini görsel olarak takip etmeye olanak tanır. Branch oluşturmak için “git branch” kullanılırken, “git checkout” ile farklı branch’lere geçiş yapılabilir.

Merge işlemi sırasında Git, iki commit’in ortak ancestor’ını bulur ve değişiklikleri bu ana çerçeveye göre birleştirir. Çakışma (conflict) durumunda geliştirici manuel müdahale ederek dosyaları düzenlemesi gerekir. Bunun ardından “git add” ve “git commit” ile çözüm tamamlanır. Ayrıca “rebase” komutu, bir branch’i başka bir branch’in en son commit’ine bağlayarak daha temiz bir commit geçmişi oluşturur.

Git Branching ve Merge Stratejileri

Branching, projede paralel geliştirme yapılmasını sağlar. Temel branch (main/master) üzerinde doğrudan değişiklik yapmak yerine feature branch’ler oluşturmak, hataların ana branch’e bulaşmasını engeller. Feature branch’ler, belirli bir işlevin tamamlanması sonrasında merge edilerek ana branch’e dahil edilir.

Merge stratejileri arasında “fast-forward” ve “no-ff” tercihleri bulunur. Fast-forward merge, hedef branch’in commit geçmişi değişmeden ilerlemesini sağlar; bu durumda merge commit oluşturulmaz. No-ff merge ise her merge işlemi için yeni bir merge commit oluşturur, böylece branch’in ne zaman birleştirildiği görünür. “Rebase” ise branch’i başka bir branch’in en son commit’ine bağlayarak tek bir lineer geçmiş sunar; ancak bu tarihsel değişiklikler paylaşılan branch’lerde risk oluşturabilir.

Branch stratejileri, proje yönetimi metodolojisiyle de yakından ilişkilidir. Agile geliştirme ekipleri, sürekli entegrasyon (CI) ile birlikte “feature branching” ve “continuous delivery” yaklaşımlarını benimser. Büyük ekiplerde ise “Git Flow” gibi standartlaştırılmış branching modelleri, geliştirme, test ve üretim ortamları arasında net bir ayrım sağlar.

Git ile İş Akışı Entegrasyonu

Modern yazılım geliştirme, otomatik test, kod analizi ve dağıtım envanterleriyle birlikte entegre bir iş akışı gerektirir. Git, bu süreçlere “hooks” adı verilen tetikleyici scriptlerle entegre edilebilir. Örneğin “pre-commit” hook, kodun commit öncesi lint kontrolü yapabilirken, “post-merge” hook yeni branch’te gerekli yapılandırma dosyalarını otomatik güncelleyebilir.

CI/CD platformları (Jenkins, GitHub Actions, GitLab CI) Git deposundan kod çekerek build ve test süreçlerini başlatır. Pull request (merge request) oluşturulduğunda, otomatik testler çalıştırılır ve kod kalitesi kontrol edilir. Başarılı testler sonrasında merge işlemi otomatik olarak gerçekleşebilir veya manuel onay gerekebilir. Bu sayede kod kalitesi ve dağıtım süreçleri otomatikleştirilmiş olur.

Ayrıca, “issue tracking” sistemleri Git ile entegre edilerek her commit tek bir issue’ya bağlanabilir. “git commit -m “Fixed #123″” gibi mesajlar, ilgili issue’yu otomatik olarak kapatır. Böylece proje yönetimi ve kod geliştirme süreci birbirine paralel ve şeffaf bir şekilde ilerler.

Git Hatalarından Kaçınma Yöntemleri

1. Commit Mesajlarını Anlaşılır Yapın: Mesajlar, değişikliğin ne yaptığını net bir şekilde açıklamalıdır.
2. Staging Alanını Kullanın: “git add” ile sadece gerekli dosyaları staging’e ekleyin.
3. Branch Adlandırma Konvansiyonları Kullanın: Feature, bugfix, release gibi adlandırmalar, proje düzenini artırır.
4. Çakışma Öncesi Rebase Yapın: Branch’leri güncel tutmak için “git rebase” kullanın.
5. Push Öncesi İlgili Testleri Çalıştırın: CI/CD yapılandırmalarını yerel olarak test edin.
6. Remote Depoları Düzenli Olarak Güncelleyin: “git fetch” ile uzak depo değişikliklerini alın.
7. İş Akışınızı Belgelendirin: Ekip içinde kullanılan Git prosedürlerini dokümante edin.
8. Branch’leri Temiz Tutun: Kullanılmayan branch’leri silmek, repo temizliğini sağlar.
9. Güvenlik Politikalarına Uyun: Şifre ve token yönetimini güvenli bir şekilde yapın.
10. Versiyon Politikalarını Uygulayın: Semantik versiyonlama (SemVer) kurallarına uyun.

Sıkça Sorulan Sorular

Git ve SVN Farkları Nelerdir?

Söz konusu versiyon kontrol sistemlerinde Git, dağıtık bir mimariye sahipken SVN tek merkezli bir depoya dayanır. Git, offline çalışma, hızlı branching ve merge yetenekleriyle öne çıkar. SVN ise tek bir merkezi depo üzerinden çalışır, bu nedenle offline değişiklik yapılamaz.

Git Branch’i Nasıl Silerim?

Branch silmek için “git branch -d branch-adi” komutu kullanılır. Eğer branch henüz merge edilmemişse “-D” opsiyonu zorla silme sağlar. Silinen branch, uzak depodan “git push origin –delete branch-adi” komutuyla kaldırılabilir.

Rebase ve Merge Arasındaki Fark Nedir?

Merge, iki commit geçmişini birleştirirken yeni bir merge commit oluşturur. Rebase ise bir branch’i başka bir branch’in en son commit’ine bağlayarak tek bir lineer geçmiş oluşturur. Rebase, temiz bir geçmiş sunar ancak paylaşılan branch’lerde tarih değişikliği sorun yaratabilir.

Git Kullanımında En İyi Uygulama Ne Olmalı?

En iyi uygulama, commit mesajlarını net tutmak, branch adlandırma konvansiyonlarını izlemek, otomatik testleri CI/CD ile entegre etmek ve gereksiz branch’leri silmeyi içermelidir. Ayrıca, güvenlik politikalarına uyarak token ve şifre yönetimini yapmalısınız.

Sonuç

Git, modern yazılım geliştirme ekosisteminde vazgeçilmez bir araç haline gelmiştir. Dağıtık mimarisi, hızlı branching ve merge yetenekleri sayesinde ekip içi iş birliğini güçlendirir. Tarihsel gelişimi ve güncel entegrasyon seçenekleri, Git’i hem küçük ekipler hem de büyük kurumsal ortamlarda tercih edilen bir sistem yapar. Doğru kullanıldığında, proje yönetimi, kod kalitesi ve dağıtım süreçlerinde kusursuz bir deneyim sunar. Bu nedenle, Git’in temel kavramlarını öğrenmek, stratejik branching modellerini uygulamak ve en iyi uygulamaları benimsemek, yazılım geliştirme süreçlerinin başarısı için kritik öneme sahiptir.

Arzu Develi

Arzu Develi, Son Ajans Haber bünyesinde editör. Haber metinlerinin kaynak kontrolünü ve dil düzenini yapıyor; güncel gelişmeleri tarafsız bir dille okuyucuya ulaştırmayı hedefliyor. Yayına hazırladığı haber sayısı: 329.

Arzu Develi yazarının 329 haberi →

Yorum Yap