Git, yazılım geliştirme dünyasının vazgeçilmez bir parçası haline gelmiş, dağıtık bir sürüm kontrol sistemidir. Geliştiricilerin kod tabanındaki değişiklikleri takip etmelerini, farklı sürümler arasında geçiş yapmalarını ve ekip halinde sorunsuz bir şekilde çalışmalarını sağlar. Peki, Git tam olarak nedir ve neden bu kadar önemlidir?
Git, Linus Torvalds tarafından 2005 yılında Linux çekirdeği geliştirilirken ortaya çıkarılmıştır. Merkezi sürüm kontrol sistemlerinin (SVN, CVS gibi) aksine, Git her geliştiricinin kendi yerel makinesinde kod tabanının tam bir kopyasına sahip olmasını sağlar. Bu "dağıtık" yapı, çevrimdışı çalışmaya olanak tanır, merkezi bir sunucunun çökmesi durumunda veri kaybını önler ve işbirliğini çok daha esnek hale getirir. Her geliştirici, kendi "deposu" üzerinde bağımsız olarak çalışabilir ve değişikliklerini daha sonra ana depo ile birleştirebilir.
Neden Git Kullanmalıyız?
Git kullanmanın birçok avantajı vardır:
Git'e Başlangıç: Temel Komutlar
Git'e başlamak için öncelikle bilgisayarınızda kurulu olması gerekir. Kurulum adımları işletim sisteminize göre değişiklik gösterse de, resmi Git web sitesinden (https://git-scm.com/downloads) kolayca indirebilirsiniz.
Yapılandırma:
Git'i kurduktan sonra, ilk yapmanız gereken kullanıcı adınızı ve e-posta adresinizi ayarlamaktır. Bu bilgiler, yaptığınız commit'lerde kimin değişiklik yaptığını belirtmek için kullanılır.
Bu ayarlar, tüm Git depolarınız için geçerli olacaktır. Belirli bir depo için farklı ayarlar yapmak isterseniz --global parametresini kaldırabilirsiniz.
Bir Depo Oluşturma:
Yeni bir Git deposu oluşturmak veya mevcut bir projeyi Git ile sürüm kontrolü altına almak için git init komutunu kullanırız.
Bu komut, projenizin kök dizininde gizli bir .git klasörü oluşturur. Bu klasör, Git'in tüm sürüm geçmişini, dallarını ve yapılandırmasını sakladığı yerdir.
Dosyaları İzlemeye Alma (Staging):
Projenizdeki dosyaları Git'in takip etmesini istediğinizde, onları "staging area"ya (hazırlık alanı) eklemeniz gerekir. Bu alan, bir sonraki commit'inize dahil edilecek değişiklikleri tutar.
git add . komutu, geçerli dizindeki tüm yeni ve değiştirilmiş dosyaları staging area'ya ekler.
Değişiklikleri Kaydetme (Commit):
Staging area'daki değişiklikleri projenizin geçmişine kalıcı olarak kaydetmek için git commit komutunu kullanırız. Her commit, yapılan değişiklikleri açıklayan bir mesaj içermelidir.
İyi bir commit mesajı, gelecekte veya ekip arkadaşlarınızın bu commit'in ne yaptığını anlamasına yardımcı olur. Genellikle kısa ve öz bir başlık (50 karakterden az) ve ardından boş bir satır bırakarak daha ayrıntılı bir açıklama şeklinde yazılır.
Durumu Kontrol Etme:
git status komutu, çalışma dizininizin ve staging area'nızın güncel durumunu gösterir. Hangi dosyaların değiştirildiğini, hangilerinin staging area'da olduğunu ve hangilerinin takip edilmediğini (untracked) görebilirsiniz.
Geçmişi Görüntüleme:
Projenizin commit geçmişini görüntülemek için git log komutunu kullanın. Bu, her commit'in yazarını, tarihini ve mesajını gösterir.
Dallanma (Branching):
Git'in en güçlü özelliklerinden biri dallanmadır. Yeni bir özellik üzerinde çalışırken veya bir hata düzeltirken, ana kod tabanını (genellikle main veya master dalı) etkilemeden ayrı bir dal oluşturabilirsiniz.
Dallar Arasında Geçiş:
Mevcut dallar arasında geçiş yapmak için git checkout komutunu kullanın:
Dalları Birleştirme (Merging):
Bir dalda yaptığınız değişiklikleri başka bir dala (örneğin main dalına) entegre etmek için git merge komutunu kullanın. Önce birleştirmek istediğiniz dala geçiş yapmalısınız.
Birleştirme sırasında çakışmalar (conflict) meydana gelebilir. Bu durumda, Git size çakışan dosyaları gösterecek ve manuel olarak çözümlemenizi isteyecektir. Çakışmaları çözdükten sonra dosyaları git add ile staging area'ya eklemeli ve git commit ile birleştirme işlemini tamamlamalısınız.
Uzak Depolar (Remotes):
Çoğu zaman, kodunuzu GitHub, GitLab veya Bitbucket gibi uzak bir sunucuda barındırırsınız. Bu, ekip üyeleriyle işbirliği yapmanızı ve kodunuzu yedeklemenizi sağlar.
Uzak bir depoyu eklemek için:
Burada origin uzak deponun varsayılan adıdır. İstediğiniz başka bir isim de verebilirsiniz.
Değişiklikleri Uzak Depoya Gönderme (Push):
Yerel commit'lerinizi uzak depoya göndermek için git push komutunu kullanın:
Bu, yerel main dalınızdaki değişiklikleri origin adlı uzak deponun main dalına gönderir. İlk kez push yapıyorsanız --set-upstream (veya -u) parametresini kullanmanız gerekebilir:
Değişiklikleri Uzak Depodan Alma (Pull):
Uzak depoda (örneğin ekip arkadaşlarınızın yaptığı) yeni değişiklikler varsa, bunları yerel deponuza çekmek için git pull komutunu kullanın:
git pull aslında git fetch ve git merge komutlarının birleşimidir. Önce uzak depodaki değişiklikleri çeker (fetch), sonra yerel dalınızla birleştirir (merge).
Değişiklikleri Geri Alma (Reverting & Resetting):
Git, hataları düzeltmek için güçlü araçlar sunar.
En İyi Uygulamalar:
Sonuç
Git, günümüz yazılım geliştirme süreçlerinin temel taşlarından biridir. Temel komutlarını ve kavramlarını anlamak, hem bireysel projelerinizde hem de ekip çalışmalarınızda verimliliğinizi önemli ölçüde artıracaktır. Pratik yaparak ve farklı senaryolarda kullanarak Git'e olan hakimiyetinizi geliştirebilirsiniz. Unutmayın, Git'in sunduğu olanaklar çok geniştir ve bu rehber sadece bir başlangıç noktasıdır. Daha derinlemesine bilgi için Git'in resmi dokümantasyonunu ve diğer kaynakları keşfetmekten çekinmeyin.
Git, Linus Torvalds tarafından 2005 yılında Linux çekirdeği geliştirilirken ortaya çıkarılmıştır. Merkezi sürüm kontrol sistemlerinin (SVN, CVS gibi) aksine, Git her geliştiricinin kendi yerel makinesinde kod tabanının tam bir kopyasına sahip olmasını sağlar. Bu "dağıtık" yapı, çevrimdışı çalışmaya olanak tanır, merkezi bir sunucunun çökmesi durumunda veri kaybını önler ve işbirliğini çok daha esnek hale getirir. Her geliştirici, kendi "deposu" üzerinde bağımsız olarak çalışabilir ve değişikliklerini daha sonra ana depo ile birleştirebilir.
Neden Git Kullanmalıyız?
Git kullanmanın birçok avantajı vardır:
- Hız: Git, büyük projelerde bile inanılmaz hızlıdır çünkü işlemlerin çoğu yerel olarak gerçekleştirilir.
- Veri Bütünlüğü: Git, her dosya ve dizin için SHA-1 hash değerleri kullanarak veri bütünlüğünü sağlar. Bu, kod geçmişinizin güvenli ve değişmez olduğu anlamına gelir.
- Dallanma ve Birleştirme (Branching & Merging): Git'in en güçlü özelliklerinden biridir. Farklı özellikler üzerinde paralel çalışmak veya deneysel değişiklikler yapmak için kolayca yeni dallar oluşturabilir, bu dalları geliştirebilir ve işiniz bittiğinde ana dalla sorunsuz bir şekilde birleştirebilirsiniz.
- Dağıtık Yapı: Merkezi bir sunucuya bağımlılığı ortadan kaldırır. Bu, internet bağlantısı olmadan bile çalışabileceğiniz ve bir sunucu arızasının tüm ekibin çalışmasını durdurmayacağı anlamına gelir.
- Geri Alma Yeteneği: Yanlışlıkla yapılan değişiklikleri veya hatalı commit'leri kolayca geri alabilir, projenizin herhangi bir önceki durumuna dönebilirsiniz.
Git'e Başlangıç: Temel Komutlar
Git'e başlamak için öncelikle bilgisayarınızda kurulu olması gerekir. Kurulum adımları işletim sisteminize göre değişiklik gösterse de, resmi Git web sitesinden (https://git-scm.com/downloads) kolayca indirebilirsiniz.
Yapılandırma:
Git'i kurduktan sonra, ilk yapmanız gereken kullanıcı adınızı ve e-posta adresinizi ayarlamaktır. Bu bilgiler, yaptığınız commit'lerde kimin değişiklik yaptığını belirtmek için kullanılır.
Kod:
git config --global user.name "Adınız Soyadınız"
git config --global user.email "email@example.com"
Bir Depo Oluşturma:
Yeni bir Git deposu oluşturmak veya mevcut bir projeyi Git ile sürüm kontrolü altına almak için git init komutunu kullanırız.
Kod:
cd /path/to/your/project
git init
Dosyaları İzlemeye Alma (Staging):
Projenizdeki dosyaları Git'in takip etmesini istediğinizde, onları "staging area"ya (hazırlık alanı) eklemeniz gerekir. Bu alan, bir sonraki commit'inize dahil edilecek değişiklikleri tutar.
Kod:
git add dosyaadi.txt
git add . # Tüm değişiklikleri ekler
Değişiklikleri Kaydetme (Commit):
Staging area'daki değişiklikleri projenizin geçmişine kalıcı olarak kaydetmek için git commit komutunu kullanırız. Her commit, yapılan değişiklikleri açıklayan bir mesaj içermelidir.
Kod:
git commit -m "İlk commit: Projenin başlangıcı"
Durumu Kontrol Etme:
git status komutu, çalışma dizininizin ve staging area'nızın güncel durumunu gösterir. Hangi dosyaların değiştirildiğini, hangilerinin staging area'da olduğunu ve hangilerinin takip edilmediğini (untracked) görebilirsiniz.
Kod:
git status
Geçmişi Görüntüleme:
Projenizin commit geçmişini görüntülemek için git log komutunu kullanın. Bu, her commit'in yazarını, tarihini ve mesajını gösterir.
Kod:
git log
git log --oneline # Daha kısa özet
Dallanma (Branching):
Git'in en güçlü özelliklerinden biri dallanmadır. Yeni bir özellik üzerinde çalışırken veya bir hata düzeltirken, ana kod tabanını (genellikle main veya master dalı) etkilemeden ayrı bir dal oluşturabilirsiniz.
Kod:
git branch yeni-ozellik # Yeni dal oluştur
git checkout yeni-ozellik # Yeni dala geçiş yap
# veya ikisi bir arada:
git checkout -b yeni-ozellik
"Dallanma, Git'in temel taşıdır. Bağımsız geliştirme akışlarına izin vererek ekibin paralel çalışmasını sağlar ve riskleri minimize eder."
Dallar Arasında Geçiş:
Mevcut dallar arasında geçiş yapmak için git checkout komutunu kullanın:
Kod:
git checkout main
Dalları Birleştirme (Merging):
Bir dalda yaptığınız değişiklikleri başka bir dala (örneğin main dalına) entegre etmek için git merge komutunu kullanın. Önce birleştirmek istediğiniz dala geçiş yapmalısınız.
Kod:
git checkout main
git merge yeni-ozellik
Uzak Depolar (Remotes):
Çoğu zaman, kodunuzu GitHub, GitLab veya Bitbucket gibi uzak bir sunucuda barındırırsınız. Bu, ekip üyeleriyle işbirliği yapmanızı ve kodunuzu yedeklemenizi sağlar.
Uzak bir depoyu eklemek için:
Kod:
git remote add origin https://github.com/kullaniciadi/depoadi.git
Değişiklikleri Uzak Depoya Gönderme (Push):
Yerel commit'lerinizi uzak depoya göndermek için git push komutunu kullanın:
Kod:
git push origin main
Kod:
git push -u origin main
Değişiklikleri Uzak Depodan Alma (Pull):
Uzak depoda (örneğin ekip arkadaşlarınızın yaptığı) yeni değişiklikler varsa, bunları yerel deponuza çekmek için git pull komutunu kullanın:
Kod:
git pull origin main
Değişiklikleri Geri Alma (Reverting & Resetting):
Git, hataları düzeltmek için güçlü araçlar sunar.
- git revert <commit-hash>: Belirli bir commit'in yaptığı değişiklikleri geri alan yeni bir commit oluşturur. Bu, geçmişi değiştirmeden hatayı düzeltmenin güvenli yoludur.
- git reset <commit-hash> --hard: Belirli bir commit'e geri döner ve o commit'ten sonraki tüm değişiklikleri siler. DİKKAT: Bu komut yerel geçmişi kalıcı olarak değiştirir ve veri kaybına neden olabilir. Paylaşılan bir geçmişte asla --hard kullanmayın.
En İyi Uygulamalar:
- Anlamlı Commit Mesajları: Kısa, açıklayıcı ve net mesajlar yazın. "Yapılan değişiklikler" gibi belirsiz mesajlardan kaçının. Bir commit mesajı, yaptığı işi ve neden yapıldığını anlatmalıdır.
- Küçük ve Sık Commit'ler: Her commit'i belirli bir mantıksal iş birimi olarak tutun. Büyük değişiklikleri tek bir commit'e sığdırmak yerine, onları daha küçük ve yönetilebilir parçalara bölün.
- Dal Stratejileri: Git-Flow, GitHub Flow veya GitLab Flow gibi bir dal stratejisi benimseyin. Bu, ekibinizin işbirliğini düzenler ve projeyi daha yönetilebilir hale getirir.
- Düzenli Pull/Fetch İşlemleri: Ekip üyelerinin yaptığı değişikliklerden haberdar olmak için düzenli olarak git pull veya git fetch yapın.
- .gitignore Kullanımı: Derleme çıktıları, geçici dosyalar, loglar veya hassas yapılandırma dosyaları gibi sürüm kontrolüne dahil etmek istemediğiniz dosyaları .gitignore dosyasına ekleyin.
Sonuç
Git, günümüz yazılım geliştirme süreçlerinin temel taşlarından biridir. Temel komutlarını ve kavramlarını anlamak, hem bireysel projelerinizde hem de ekip çalışmalarınızda verimliliğinizi önemli ölçüde artıracaktır. Pratik yaparak ve farklı senaryolarda kullanarak Git'e olan hakimiyetinizi geliştirebilirsiniz. Unutmayın, Git'in sunduğu olanaklar çok geniştir ve bu rehber sadece bir başlangıç noktasıdır. Daha derinlemesine bilgi için Git'in resmi dokümantasyonunu ve diğer kaynakları keşfetmekten çekinmeyin.