Git Kullanımı
Git, geliştirdiğimiz projeleri bilgisayarımızda veya disklerde tutmak yerine internet üzerinde tutmamızı sağlayan bir versiyon kontrol sistemidir. “Git nedir” diye arattığımızda sıklıkla karşımıza çıkan versiyon kontrol sistemi; bir proje üzerinde yaptığınız değişiklikleri adım adım izleyen, istediğinizde kayıt eden ve isterseniz bunu internet üzerindeki bir bilgisayarda veya yerel bir cihazda saklamanızı ve yönetmenizi sağlayan bir sistemdir.
Git Kullanmanın Avantajları
- Birden fazla yerde (dağıtık olarak) dosyalarınızı ve versiyon kontrol bilgilerinizi depolayabilirsiniz. Böylelikle cihaz bağımsız olarak dosyalarınıza erişebilirsiniz.
- Takımların aynı projede beraber çalışmasına imkan verir. Kim neyi düzenledi? Ne ekledi? Ne çıkarttı? Son değişiklik ne zaman yapıldı? gibi bilgilere erişebilirsiniz. Bu sayede topluluk ile proje geliştirme süreçlerini kolaylaştırabilirsiniz.
- Herhangi bir dosyaya veya versiyona her zaman geri dönüş yapılabilir.
Git versiyon kontrol sistemini kullanan bazı servisler: GitHub, GitLab, BitBucket.
Git Çalışma Mantığı

Working Directory: Proje dosyalarımızın içerisinde yer aldığı klasördür. Bu alan aynı zamanda gitin “untracked” alanı olarak da bilinir. Dosyalarda yapılan herhangi bir değişiklik, working tree üzerinde işaretlenecek ve görülecektir. Bu dosyalarda yapılan değişiklikleri git’e kaydetmediğinizde, yapılan değişiklikleri kaybedebilirsiniz. Working tree içerisindeki dosyalarda herhangi bir değişiklik yaparsanız git bunların değiştirildiğini anlayacaktır, ancak siz “Hey bu dosyalara dikkat edin” diyene kadar, onlarda olan hiçbir şeyi kaydetmeyecektir. Working tree içerisindeki dosyaları görmek için git status
komutunu kullanabilirsiniz.

Staging Area: Staging areayı, proje dosyalarımızdaki bir dizi değişikliği remote repositorye göndermeden önce kayıt altında tuttuğunuz veri tabanı/alan olarak tanımlayabiliriz. Kaydedilen bu değişiklikler .git
dizinine yansıtılır. Git’e belirli dosyaları izlemek istediğinizi belirttiğinizde git bu dosyaları working tree içerisinden staging area içerisine taşır.
Staging area içerisine dosyaları eklemek için git add <dosya_adı>
komutunu çalıştırmanız gerekir.

Staging area içerisinde hangi dosyaların olduğunu görmek için daha önce olduğu gibi git status
komutunu çalıştırmak gerekir.

Local Repository: Repository, .git dizininizdeki her şeydir. Staging areada bulunan dosyalarımızı eklediğimiz ve tüm commitleri görebileceğimiz yerdir. git commit
komutu, staging area içerisindeki tüm değişiklikleri alır ve local repositorye kaydeder. Commit, git’e tüm değişiklikleri izlemesini söyleyen bir kontrol noktasıdır. Commit işlemi gerçekleştikten sonra staging area içerisi boş olacaktır. git log
veya git show
komutu local repositoryde izlenen tüm dosyaları gösterir. Local repository içerisindeki kodlar hiç kimse tarafından görülmez ve burada yapılan değişiklikler yalnızca makinenizde kalır.

Remote Repository: Yaptığınız değişikliklerin takımın geri kalanı tarafından da görülmesini ve kullanılmaya başlanmasını sağlamak için değişikliklerinizi zaman zaman remote repositoryde yayınlamanız gerekir. Local repository, kendi bilgisayarınızda proje klasörünüzün altında bulunan .git klasörüdür. Bu repository üzerinde sadece siz çalışabilirsiniz ve değişiklikler yerel diskinize kaydedilir. Remote repositoryler ise genellikle uzaktaki bir sunucuda yer alırlar ve bu sunucudaki .git
klasöründen ibarettirler. Takım çalışması söz konusu ise takımdaki kişiler değişikliklerini bu remote repository üzerinden paylaşırlar. Diğer ekip üyeleri ile birlikte verimli çalışabilmek, onların yaptığı değişiklikleri kendi yerel çalışma alanınıza almak, kendi yaptığınız değişiklikleri onlar ile paylaşabilmek için remote repositorylerinizi doğru ve etkin bir şekilde yönetmelisiniz. git remote
komutu, remote repositorye olan bağlantıları yönetmenize yardımcı olur.
Repository Hakkında Temel Bilgiler
Branch Kavramı
Branch, projemizi dallarına ayırmayı sağlar. Branch oluşturmak farklı kişiler ile aynı proje üzerinde farklı konular da çalışmanızı, görevlendirme imkanını verir. Bu dallar birleştirilmediği sürece birbirini etkilemez. Projede yer alan herkesin işi bittiğinde merge (birleştirme) işlemi yapılır. Git, ana dal olarak “main” adında bir dal oluşturur, proje üzerinde çalışan kişiler “main” dalının kopyasını alarak farklı dallar üzerinde çalışır.
İstediğimiz sayıda branch oluşturabilir ve değişikliklerimizi bunlara commit edebiliriz. Örneğin; yayında bir ürünümüz olduğunu varsayalım. Yeni bir değişiklik yapmamız gereken bir durum ile karşılaştığımızda oluşacak herhangi bir hatanın önüne geçmek ve yayında olan son koda geri dönmemiz gerektiği durumlarda branchlerden yararlanabiliriz.

Yukarıdaki bahsetmiş olduğum senaryoyu akış üzerinde inceleyelim. Örneğin 1.1 sürümlü yayında olan bir Sosyal Medya Uygulamasına sahip olduğumuzu varsayalım. 1.1 versiyonlu uygulamanın son hali master
branchte bulunacaktır. Bir sonraki sürüm olan 1.2'ye değişiklik eklemek için master’dan development
adı verilen yeni bir branch oluşturacağız. Diyelim ki bir geliştirici ekibi bir sonraki güncelleme üzerinde çalışıyor ve yapmaları gereken 3 görev var — Gönderilere beğeni özelliği ekleme, yorum ekleme özelliği, takipçi sayısının düzgün güncellenmemesi sorununu giderme. Bu nedenle, bu durumlar için, development branchinden beğeniler için bir feature 1 branchi, yorumlar için feature 2 branchi ve takipçiler sorunu için bir bug fix branchi oluşturulabilir.
Commit Kavramı
Commit, yeni eklenen değişikliklerle projenin anlık görüntüsüdür. Bir commit genellikle Commit ID veya Commit SHA olarak adlandırılan benzersiz bir ID ile ilişkilendirilir. Her bir commit, committe bulunan kişi tarafından belirtilen veya varsayılan olarak eklenen bir commit mesajı içerir. Uygun bir commit mesajı belirlemek önemlidir, çünkü daha sonra projede 100'lerce commit olduğunda veya birçok ortak çalışan birlikte çalıştığında, commit işleminin ne hakkında olduğu mesajını görmek proje geliştirme sürecinde işleri kolaylaştırır.

Clone Kavramı
Git reposu üzerinde çalışmak için yerel makinemizde bir kopyasının olması gerekir. Bunu yapmak için üzerinde çalışacağımız projeyi githubdan clonelayabiliriz. Artık yerel makinemizde reponun bir kopyasına sahip olduğumuzda değişiklik yapabiliriz. Değişiklikler gönderildiğinde, uzak repodaki diğer katkıda bulunanlar tarafından da kullanılabilir hale gelir.
Fork Kavramı
Fork, ana reponun kendi adınız altında bir kopyasını oluşturmak için kullanılır. Genellikle bir başkasının projesini fikrinizin başlangıç noktası olarak almak istediğinizde veya projesinde bazı değişiklikler yapmak istediğiniz senaryolarda kullanılır.
Pull Kavramı
Uzak bir repodaki değişiklikleri, local reponuzun geçerli branchi içerisine getirir ve birleştirir. Pull isteği, bir geliştiricinin ekip üyelerine bir görevi tamamladıklarını bildirmesi işlemidir.

Merge Kavramı
Branchinizdeki çalışmaları tamamladıktan sonra, onu main branchle merge etmeniz (birleştirmeniz) gerekir.
Push Kavramı
Push işlemi local repositorynizin içeriğini uzak repositorye yüklemek için gerçekleştirilir.
Git komutlarını kullanmak ve deneme yapmak için bilgisayarınızda boş bir proje oluşturalım. İçerisine “index.html” sayfası oluşturdum sizde herhangi bir proje oluşturabilir yada var olan projeniz üzerinde kodları çalıştırabilirsiniz.
Git Komutları
- git init

Bir proje içerisinde versiyon kontrol sistemi kullanmak istiyorsak git init
komutunu kullanmamız gerekir. Bu komut proje dizini içerisinde .git adında gizli bir dizin oluşturur. Projeyi boş bir git reposuna dönüştürür. Bu, bir repository oluşturmanın ilk adımıdır.
- git status

Bu komut bulunduğumuz dizindeki git durumunu gösterir. Yapılan değişiklikler, eklenen ve silinen dosyalar gibi bilgiler listelenir. Örneğin; yukarıdaki komutun ekran çıktısına bakarsak dizinin içerisinde index.html adında bir klasörün olduğunu fakat bu klasör ile ilgili herhangi bir işlem yapılmadığını görebilirsiniz. git status --long
komutu working tree ve staging area içerisinde ne olduğuna dair kapsamlı bir liste almamıza izin verir.

- git add
Bir dosya bir repoya kaydedilmeden önce, dosyanın stage areaya eklenmesi gerekir. Belirli dosyaları git add <dosya_adı>
komutu ile stage areaya ekleriz.

git add
komutunu çalıştırdıktan sonra tekrar git status
komutunu çalıştıralım. Artık belirtilen dosyanın stage areaya başarıyla eklendiğini görebilirsiniz.

- git commit
Bu komut, stage areaya aldığımız değişikliklerimizi local repository içerisine eklemek için kullanılır. Commit işlemini gerçekleştirirken bu işlemle ilgili bir mesaj eklemek proje üzerinden zaman geçtikten sonra yapılan değişiklikleri anlamamız adına kolaylık sağlar.

- git diff
index.html dosyasının içine yeni bir satır ekledikten sonra git diff
komutunu çalıştırıyorum. git diff
komutu değiştirilen dosyalardaki tüm değişiklikleri göstermek için kullanılır. Staging areada yer alan bir dosya ile o dosyada o anda working tree içerisinde var olan düzenlemeler arasındaki kod farklarını gösterir.

- git branch
Proje içinde yeni branch oluşturmak istediğimizde git branch <branch_adı>
komutunu kullanırız.

Örnek olarak “test” adında bir branch oluşturdum. Oluşturulan branchlerin listesini görmek için git branch komutu kullanılır.
- git checkout
Branchler arası geçiş yapmak için git checkout <branch_adı>
komutu kullanılır.

- git merge
Merging en basit anlamda herhangi bir branch’de yaptığımız değişiklikleri master branch’imiz ile birleştirme veya master branch’e entegre etme işlemidir. test branchindeki değişiklikleri master branch’e entegre etmek için öncelikle master branchimize geçmeliyiz. git checkout master
komutu ile master branch’e geçiş yaptıktan sonra, git merge test
komutu çalıştırılarak değişikliklerin master dalı ile birleştirilmesini sağlayabiliriz.
- git push
Commit işlemi yapıldığında yapılan değişiklikler local reponun HEAD kısmında yer alır. Local repo içerisinde yaptığımız değişiklikleri uzak repoya göndermek için git push origin master
komutu kullanılır.
- git pull
Uzak repo üzerinde yapılan değişiklikleri local repo içerisine çekmek için git pull origin <branch_adı>
komutu kullanılır.
Git ignore Nedir?
.gitignore dosyası git reposundan hariç tutulacak dosyaların listesinin bulunduğu repo ana dizinde bulunan bir ayar dosyasıdır. .gitignore
dosyasını kullanarak, bazı uzantı veya dizindeki dosyaların git’e gönderilmesini ve değişikliklerin takip edilmesini engellemiş oluruz.
.gitignore içerisine yazılacak dosyalar
- Paket yöneticisinden indirilen bağımlılıklar,
- Image ve video dosyalarınız(dosya boyutları çok fazla olabilir),
- IDE eklentileri( örneğin .vscode),
- Sadece kendi çalışma alanınızda olması gereken başkaları tarafından görülmemesi gereken dosyalarınız (veritabanınıza ilişkin konfigürasyonlar),
- API anahtarları, kimlik bilgileri veya hassas bilgiler içeren dosyalar(.env),
- Çalışma dizinizdeki geçici dosyalar,
- Log dosyaları,
- Yararsız sistem dosyaları (örneğin MacOS işletim sisteminin
.DS_Store
dosyası), dist
gibi oluşturulan dosyalar,- Veya herhangi bir dosyanız da olabilir.