Git — Programcilar Icin Temel Surum Kontrolu, Kod Yonetimi Dogru Yapin
Tek cumlede: Linux yaraticisi Linus Torvalds tarafindan gelistirilen acik kaynakli dagitik surum kontrol sistemi, her kod degisikligini kaydederek geri alma, dal olusturma ve isbirligi yapma imkani saglar — dunya capindaki gelistirme ekiplerinin %90’indan fazlasi tarafindan kullanilir.
Bu Pani Anlarini Yasadiniz mi?
Pani 1: Butun gece kod degistirdiniz, sadece tum projenin calismadigini bulmak icin. Dunku calisan surume geri donmek istiyorsunuz, ancak hic yedekleme yapmadiniz. Sifirdan hata ayiklamak zorundasiniz, kendinize yedekleme yapmadiginiz icin lanet ederek.
Pani 2: Patronunuz ayni anda iki acil hatayi duzeltmenizi ve yeni bir ozellik eklemenizi istiyor. Tum kodlar birbirine karismis, cozmesi imkansiz. Degisikliklerinizin yarisindayken, ilk hata acil bir surum gerektiriyor — ancak kodunuzda bitmemis yeni ozellik karismis durumda ve commit yapmaya korkuyorsunuz.
Pani 3: Siz ve uc is arkadasiniz ayni dosyayi ayni anda duzenliyorsunuz. Degisikliklerden sonra, dosyalari WeChat uzerinden paylasiyor ve manuel birlestiriyorsunuz — ancak A’nin degisiklikleri B tarafindan uzerine yaziliyor ve B’nin duzeltmesi C tarafindan geri aliniyor. Tum bir ogleden sonra birbirinizin calismasini “ustune yazarak” geciriyorsunuz.
Taniidik geldi mi?
Git, tum bu aciyi sona erdirmek icin burada.
Git Nedir?
Git, bir “surum kontrol aracidir” — basitce soylemek gerekirse: Kodunuzda yaptiginiz her degisikligi kaydeder. Gecmise bakabilir, herhangi bir surume geri donebilir, yeni fikirleri denemek icin bagimsiz dallar olusturabilir ve isiniz bittiginde onlari birlestirebilirsiniz.
Linux yaraticisi Linus Torvalds (evet, Linux’u yaratan kisi) tarafindan 2005 yilinda gelistirilmistir. O zamanlar, hizli, dagitik isbirligini destekleyen ve esnek dal yonetimine sahip bir surum kontrol sistemine ihtiyaclari vardi — mevcut seceneklerin hicbiri yeterince iyi degildi, bu yuzden iki haftada kendi yazdi.
Iki hafta. Ve dunya capinda gelistiriciler icin en vazgecilmez arac haline geldi.
Stack Overflow’un 2024 Gelistirici Anketine gore: Dunya capinda profesyonel gelistiricilerin yaklasik %90’i Git kullaniyor, GitHub’da 100 milyondan fazla depo var. Hangi programlama dilini kullanirsaniz kullanin veya ne tur bir proje uzerinde calisirsaniz calisin — Git, dil ve platformlar arasi “evrensel dildir.”
Git Gercek Sorunlari Cozmeye Nasil Yardimci Olur?
1. Surum Gecmisi: Bir “Pismanlik Hapi”, Herhangi Bir Duruma Donus
Kodu degistirirsiniz -> git add ile degistirilen dosyalari hazirlarsiniz -> git commit -m "ne yaptiniz" ile gonderir, bir surum anlik goruntusu olusturursunuz. Sonra degistirmeye devam eder, commit yapmaya devam edersiniz.
Bir seyi bozdugunuzda:
git log # Tum tarihsel commit'leri goruntule
git checkout abc123 # Gecmis bir surume geri don
git revert abc123 # Belirli bir degisikligi geri alan "guvenli geri alma" (onerilen)
Gunluk is akisiniz sudur: Kod yaz -> git add -> git commit, tekrarla.
Bir sorunla karsilasin -> Gecmise goz at -> Geri al veya farklari karsilastir.
Artik “dunku surumu olan var mi?” diye sormaniza gerek yok.
2. Dal Yonetimi: Birden Fazla Ozellik Uzerinde Ayni Anda, Birbirine Karismadan Calisin
Bu, Git’in temel tasarimidir. Dallar “paralel evrenlerdir”:
main: Stabil, yayinlanabilir kodfeature/giris: Sizin gelistirdiginiz giris ozelligifix/odeme-hatasi: Bir is arkadasinin duzelttigi odeme hatasiexperiment/yeni-ui: Yeni bir UI yaklasimini deneme — basarisiz olursa sil
Herkes kendi dalinda bagimsiz calisir, birbirine karismaz. Is bittiginde birlestirin:
git checkout main
git merge feature/giris # Giris ozelligi tamam, main'e birlestir
Yaygin is akisi (en populer Git Flow):
main’den bir ozellik dali olusturun -> Ozellik dalinda gelistirin -> Tamamlayin ->main’e geri birlestirin- Bir hata bulun -> Bir duzeltme dali olusturun ->
mainve mevcut gelistirme dalina geri birlestirin - Yayina hazir -> Bir
releasedali olusturun -> Sadece hatalari duzeltin, yeni ozellik yok ->main’e birlestirin
Ekip kodunun duzenli kalmasinin yolu budur — herkes kendi seridinde surer, birbirine carpmaz.
3. Ekip Isbirligi: “Senin Degisikliklerin Benimkilerin Uzerine Yazdi” Sorununu Cozme
Birden fazla kisinin ayni dosyayi duzenlemesi, gelistirmenin normal bir parcasidir. Git’in birlestirme mekanizmasi:
- Siz ve is arkadasiniz ikiniz de
main’den en son kodu cekersiniz - A,
app.jsnin 10. satirini degistirir, B ayni dosyanin 50. satirini degistirir -> Git otomatik birlestirir, sorunsuz - A ve B, ayni dosyanin ayni satirini degistirir -> celiski, Git isaretler ve hangisini tutacaginiza manuel karar vermenizi saglar
# Is arkadasinizin guncellemelerini cekin ve daliniza birlestirin
git pull origin main
# Celiski varsa, Git hangi dosyalarin celistikini gosterir
# Celiski dosyasini acin, soyle bir sey gorursunuz:
# <<<<<<< HEAD
# Sizin kodunuz
# =======
# Is arkadasinizin kodu
# >>>>>>> main
# Hangisini tutacaginiza manuel karar verin veya ikisini birlestirin, ardindan git add -> git commit
Gercek senaryo: Ben siparis modulunu yeniden yapilandiriyorum, bir is arkadasim ayni modulde bir performans hatasini duzeltiyor. Her birimiz kendi dallarimizda calisiyoruz, her gun maini cekerek senkronize kaliyoruz. Iki hafta sonra, benim gelistirmem bitti ve is arkadasim hatasini coktan duzeltti ve birlestirdi — ben birlestirdigimde sadece birkac kucuk celiskiyi cozmem gerekiyor. Tum surec boyunca, dosya paylasimi yok, birbirini bekleme yok.
4. Uzak Depolar: GitHub/GitLab/Gitee “Merkezi Depolar” Olarak
Yerel olarak Git ile surum yonetimi, uzak depolar ile senkronizasyon ve isbirligi:
git clone https://github.com/xxx/project.git # Uzak depoyu yerel kopyala
git push origin main # Yerel commit'lerinizi uzaga gonder
git pull origin main # Uzaktaki en son guncellemeleri cek
Is akisi:
- Sabah ->
git pullile en son kodu alin - Dal olusturun -> Gelistirin
- Is bittiginde,
git pushile uzaga gonderin -> GitHub/GitLab’de Pull Request olusturun - Is arkadasi kodu inceler -> Onaylar -> main dalina birlestirir
Profesyonel Incelemeler ve Kullanici Geri Bildirimleri
| Kaynak | Inceleme |
|---|---|
| Atlassian (Jira’nin sirketi) | “Git, bugun dunyada en yaygin kullanilan modern surum kontrol sistemidir ve bunun iyi bir nedeni vardir” |
| GitHub CEO’su | ”Git, yazilim olusturma seklimizi degistirdi. Sadece bir arac degil — modern yazilim gelistirmenin temelidir” |
| Stack Overflow Anketi | Dunya capinda gelistiricilerin %90+ i Git kullaniyor, yillardir tum gelistirici araclari arasinda 1 numara |
Gercek Kullanicilar Ne Diyor
“Git’i ilk kullandigimda, ezberlenecek o kadar cok komutla ugrasmanin zahmetli oldugunu dusundum. Iki hafta sonra geri donemedim — simdi Git olmadan kod yazmaktan korkuyorum. Sadece kodu yonetmek degil, bana ‘her seyi degistirebilirim, bozulursa geri alabilirim’ guveni veriyor.” — Java Backend Gelistiricisi, Juejin
“Beni en cok etkileyen Git’in dal modeliydi. SVN ile dal olusturmak sonsuza kadar surerdi. Git’te dal olusturma aninda. Bu, gelistirme yaklasimimi tamamen degistirdi — artik deneysel degisikliklerin ana kodu etkilemesinden korkmuyorum, sadece yeni bir dal olusturup deniyorum. Is yaramazsa siliyorum.” — Tam Yigin Gelistirici, V2EX
“Yeni ise alimlari mulakata alirken basit bir soru sorarim: ‘Git kullandiniz mi?’ Sadece ‘evet’ cevabini verip dallari ve celiski cozumunu aciklayamazlarsa, gercek ekip gelistirmesi yasamamis olabileceklerini dusunurum.” — Muhendislik Yoneticisi, Zhihu
“Git’in beni en cok etkiledigi an: Bir keresinde yanlislikla bir silme komutu calistirdim ve tum proje klasoru gitti. Soguk ter — sonra az once push yaptigimi hatirladim. git clone ile her seyi geri cektim, tum kod saglam. O zamandan beri dini olarak commit+push yapiyorum.” — Frontend Gelistirici, Reddit
Benzer Araclarla Karsilastirma
| Yon | Git | SVN (Subversion) | Mercurial |
|---|---|---|---|
| Mimari | Dagitik (herkesin yerel tam depo) | Merkezi (merkez sunucuya bagli) | Dagitik |
| Dal yonetimi | ⭐⭐⭐⭐⭐ Hafif, hizli gecis | ⭐⭐ Dal = klasor kopyalama, yavas | ⭐⭐⭐⭐ Iyi |
| Cevrimdisi calisma | Desteklenir | Cogui islem ag gerektirir | Desteklenir |
| Ogrenme egrisi | ⭐⭐⭐⭐ Cok komut, ogrenilecek kavram | ⭐⭐ Basit kavramlar, kolay baslangic | ⭐⭐⭐ Nispeten basit |
| Pazar payi | ~%90 | ~%5 | <%2 |
| Buyuk proje performansi | ⭐⭐⭐⭐⭐ Mukemmel | ⭐⭐⭐ Orta | ⭐⭐⭐⭐ Iyi |
| Barindirma platformlari | GitHub/GitLab/Gitee | Kendi kendine barindirma | Daha az secenek |
Sonuc: SVN ve Mercurial’in kendi teknik guclu yonleri vardir, ancak Git surum kontrol pazarini fiilen birlestirmistir. On yildan eski bir projeyi surdurmuyorsaniz, sadece Git ogrenin — bu endustri standardidir.
Indirme ve Kurulum Kilavuzu
Resmi Indirme
Git’in resmi web sitesi git-scm.com’dur:
| Kanal | Indirme Baglantisi | Notlar |
|---|---|---|
| Resmi site (onerilen) | git-scm.com/downloads | Windows/macOS/Linux tum platformlar, isletim sisteminizi otomatik algilar |
| GitHub yansimasi | Git for Windows | Acik kaynak depo, Windows surumu bagimsiz bakim |
⚠️ Guvenlik Hatirlatmasi: git-scm.com resmi sitesinden indirin, ucuncu taraf indirme sitelerini veya bulut surucu baglantilarini kullanmayin. Git acik kaynaklidir (GPL lisansi), Windows kurulumcusu yaklasik 50MB. Ucuncu taraf dagitimlari kotu amacli yazilim ekleyebilir.
3 Dakikalik Hizli Baslangic
Kurulum:
- git-scm.com/downloads adresini acin, isletim sisteminize uygun surumu indirin
- Windows kullanicilari kurulum sirasinda tum varsayilan secenekleri koruyabilir (“Git Bash” ve “Git’i PATH’e ekle” isaretli)
- Kurulumdan sonra, terminali (veya Git Bash’i) acin,
git --versionyazarak basarili kurulumu onaylayin
Kullanici adi ve e-posta yapilandirin (bir kere yapin):
git config --global user.name "Adiniz Soyadiniz"
git config --global user.email "emailiniz@ornek.com"
Ilk depo:
cd proje-dizininiz
git init # Depoyu baslat
git add . # Tum dosyalari hazirliga ekle
git commit -m "Ilk commit" # Ilk surumu olustur
Onerilen Yardimci Araclar
| Arac | Amac | Resmi Site |
|---|---|---|
| GitHub Desktop | Git GUI, Git yeni baslayanlari icin uygun | desktop.github.com |
| TortoiseGit | Windows Gezgininde sag tik Git menusu | tortoisegit.org |
| Sourcetree | Atlassian’in Git GUI’si | sourcetreeapp.com |
SSS
S: Git ogrenmesi zor mu? Git’in kavramlari (depo, commit, dal, birlestirme, uzak depo) kendi basina basittir, ancak komut sayisinin coklugu yeni baslayanlar icin goz korkutucu olabilir. 3-5 temel komutla baslayin (init/add/commit/push/pull), GitHub Desktop gibi GUI araclariyla gecis yapin, ardindan kavramlari anladiktan sonra gelismis komutlari ogrenin.
S: Git ve GitHub ayni sey midir? Hayir. Git bir surum kontrol aracidir (bilgisayarinizda calisan bir program), GitHub ise Git tabanli bir uzak kod barindirma platformudur (bir web sitesi). Su sekilde dusunun: Git “e-posta istemcisi”, GitHub “e-posta sunucusu”dur. Ayrica GitLab (kendi kendine barindirma) ve Gitee (Cin tabanli) gibi alternatifler de vardir, hepsi alt tarafta Git kullanir.
S: Birden fazla kisi ayni kod satirini degistirirse ne olur? Buna “celiski” denir. Git hangisini tutacagina otomatik karar vermez — celiskili satirlari isaretler ve sizin veya is arkadasinizin manuel olarak secmesini saglar. Celiskiler sik olmaz (genellikle herkes farkli modullerde calisir) ve olduklarinda da korkutucu degildir — Git hangi satirlarin celistikini tam olarak soyler ve hangi surumu tutacaginiza siz karar verirsiniz.
Git, yazilim gelistirmenin “emniyet kemeri”dir — onunla, kodu cesurca degistirmeye ve yeni fikirler denemeye cesaret edersiniz. Kodunuzu daha iyi yapmayabilir, ancak kesinlikle daha guvenle yazmanizi saglar. Dunya capindaki gelistirme ekiplerinin %90’i kullanir. Bu bir secim degil — zorunlu bir derstir.