İlk Bölümde
Git ve Çalışma Prensibinden Detaylıca Bahsettik. Artık
Git'i Yükleyip Aktif
Olarak Kullanmaya Başlayabiliriz.
Şunu Unutmayalım ki ;
Git Tüm İşletim Sistemlerinde Aynı
Şekilde ve Aynı Komutlarla Çalışır. Sadece Hangi İşletim Sistemini Kullanacaksanız , O işletim Sistemi
İçin
Git 'i Bilgisayarınıza İndirmeniz Gerekiyor. Ben Bu Yazıda İşlemlerimi
Windows 10
İşletim Sisteminde Gerçekleştireceğim.
Eğer
Git'i Yüklemediyseniz
Burayı Tıklayarak Son Sürümü
İndirebilirsiniz.
Git 'i İndirdikten Sonra Kullanabilmek İçin :
->
Linux/Unix ve
Mac OS X İşletim Sistemleri İçin
Terminal->
Windows 10 İçin
PowerShell ,
Windows Command veya
Git Bash 'i Kullanabilirsiniz.
NOT :
Git Bash :
Git'i Windows'ta Yüklediğiniz Andan İtibaren Bilgisayarınızın Herhangi Bir Yerinde veya Bir Klasörün
İçerisinden Sağ Tıklayıp
"Git Bash Here" Seçeneğini Tıklayıp Çalıştırabileceğiniz Git Komut
Sistemidir. Bu Anlatımda Git Komutlarımı Direk
Git Bash Kullanarak Yazacağım.
Git'i
Yükledikten Sonra İlk İş Olarak
Git Kullanıcı Adı ve
Git Email Bilgilerini Yazmamız
Gerekiyor.
Git Bu Bilgileri Kullanarak Tüm Rol ve Kullanıcı İşlemlerini Gerçekleştirir.
Masaüstünde Sağ Tıklayıp
Git Bashi Açarak Git'i Kulllanmaya Başlayalım.
Git Kullanıcı
Bilgilerinizi Aşağıdaki Kod Satırında Olduğu Gibi, Kendi Kullanıcı Adınızı ve Şifrenizi Yazıp
Enter Tuşuna Basarak Güncelleyin.
İlk Bölümde
Git'in Bir Projede Yapılan Tüm
Değişiklikleri ve Yapılmış Olan Tüm İşlemleri Lokalde Sakladığını ve Kullanıcı Rolleri de Dahil Olmak
Üzere Tüm İşlemleri Lokalde Bu Bilgileri KullanaraK Gerçekleştirdiğinden Bahsettik.İşte Git'in Tüm Bu
Bilgileri Sakladığı ve İşlemleri Gerçekleştirdiği Data Yapısına
Repository Adı
Verilir.
Git Bilgilerimizi de Güncelledikten Sonra Artık İlk
"Git Repository" 'imizi
Oluşturmak İçin Hazırız :
1 - Masaüstünde ya da Dilediğiniz Bir Yerde
Yeni Klasör
Oluşturun. Ve Klasörün Adını da Dilediğiniz Şekilde Değiştirin.
2 - Eğer Windows 10
Kullanıyorsanız ; Klasörün İçinden Sağ Tıklayıp
Git Bash Here Seçin ve Git Bash'i Çalıştırın.
Eğer Diğer Platformları Kullanıyorsanız
Terminal ' den
cd Komutuyla Oluşturmuş Olduğunuz
Klasörün İçine Gidin.
3 - Aşağıdaki Kod Bloğunu Komut Satırına Girin ve Enter
Tuşuna Basın :
-> Bu Komut
; Bizim İlk
Git Repository 'mizi Oluşturmamızı Sağladı ve Klasörümüzün İçerisine
Git 'in
Kullanacağı ve Tüm İşlemlerini Gerçekleştireceği
".git" Adında Yeni Bir Klasör
Oluşturdu.
4 - Şuan Oluşturduğumuz Repository Boş Durumda . Çünkü Henüz İçerisine Herhangi
Bir Dosya Atmadık . Şimdi Oluşturduğumuz Klasörün İçerisine (
.git Klasörü ile Aynı Directory'e)
Boş Bir
Text Dosyası Atın (Örnek Olarak
"deneme.txt" Adında Boş Bir Text Dosyası Atacağım
Ben de) ve Attıktan Sonra Yine Aynı Klasörün İçerisinden Komut Sistemini Açın ve
Aşağıdaki Komutu
Yazıp Enter Tuşuna Basın :
-> Bu Komut Bize Yapmış Olduğumuz Tüm
Değişiklikleri (Dosya Ekleme - Silme , Güncelleme vs ) Listeler . Bu Komutun Çalıştırıldıktan Sonra
Çıktısı :
Komut Çıktısından da
Anlaşıldığı Üzere
Git , Bu Klasörde (Repository) Etkin Bir Biçimde Çalışıyor ve Projede Yapılan
Tüm Değişiklikleri Artık Algılıyor ve Lokalde Kaydediyor.
Burada
Git Kullanılırken
Bilinmesi Gereken Önemli Terimler :
branch ,
commit ,
push,
pull ve
clone .
->
branch : Branchlar , Git Çalışma
Sisteminde Temel Bir Unsur Olup , Git'in Temel Kullanım Amacı Olan Versiyon Kontrol İşlemlerinde Bizlere
Büyük Kolaylık Sağlar. Aslında Kaba Bir Tanımla branch ; Bir Projenin Geliştirilme Aşamasında
Oluşturulan ve Birbirlerinden Bağımsız Olarak Geliştirilen Farklı Kopyalarıdır.
Komut Çıktısında
da Görüldüğü Gibi
"On branch master" Bizim
master branch'nda Çalıştığımızı
Gösteriyor.
master ; Git'in Default Olarak Oluşturduğu ve Protected (Korunmalı) Ana
Branch'tır. İsteğe Dayalı Oluşturulacak İkinci Bir Branch ,
master Branch'ından Türetilir. Ve
Git ; Projenin Beta Sürümünü Bulunduran
master Branch'ından Yeni Bir Kopya Oluşturur.
Kullanıcılar Yeni Oluşturulan ve
master 'ın Birebir Kopyası Olan Bu Branch'ta,
master'dan
Bağımsız Bir Şekilde Projeyi Geliştirmeye Devam Ederken , Tüm İşlemleri
master ile Diledikleri An
Karşılaştırabilir , Projede Bir Hata Meydana Geldiğinde Projeyi İstedikleri Bir An'a Geri Alabilir veya
File History'den O An'a Kadar Yapılan Tüm İşlemleri Görebilirler .
Yeni Branch'da Tüm
Geliştirmeler ve Testler Bittiğinde ; Bu Branch ile
master (Yetki Dahilinde) Git Tarafında
Yapılacak
"merge" İşlemi İle Birleştirilir (İki Branch Eşitlenir) ve
master (Beta Sürüm)
Hiç Bozulmadan Güncellenmiş ve Geliştirilmiş Olur. Kullanıcı , Dilediği ya da Hatasız Çalıştığını
Düşündüğü Herhangi Bir Branch'dan Projenin Katı Bir Versiyonunu
(tag) Oluşturur ya da İstek
Dahilinde Daha Önce Oluşturduğu Bir Versiyona Geçiş Yapabilir .
Git 'de, Oluşturulan Herhangi Bir
Branch'dan veya
master 'dan Birden Fazla Yeni Branch Türetilebilir.
->
commit : Oluşturduğumuz
Repository'e Bir
deneme.txt Dosyası Atıp
$ git status Komutunu Çalıştırdık . Git Komut
Çıktısı (Yukarıda) Bu Respository'e Bir Dosya Eklendiğini Algıladı ve Bize Şu Çıktıyı Verdi :
No commits yet
Untracked files:
(use 'git add <'file'>...' to include in what will be committed)
deneme.txt
nothing added to commit but untracked files present (use "git add" to track)
Çünkü Dosyamızı Henüz
Repository'e Göndermedik . Repository Şuan Hala Boş Durumda .
Git 'de Yaptığımız İşlemler Hemen
Repository'e Gönderilmez. Bu İşlem Güvenlik Amaçlı 3 Aşamada Gerçekleştirilir . İlk Aşamada Önce
Repository'e Gönderilmek İstenen Dosyalar Belirlenir ve
$ git add 'file' Komutu ile Repository'e
Gönderilmek Üzere Hazırlanır (Staged / Tracked).
Bu Komutta
'file' Kısmında (Uzantısı ile
Birlikte) Dosya İsmi Belirtilmezse
Git , Default Olarak Yapılan Tüm Değişiklikleri Repository'e
Göndermek İçin Hazırlar.
Seçilen (Tracked) Tüm Bu Değişiklikler Bir Paket Halinde Toplanır ve
Git Tüm Bu Değişiklik Paketine Daha Sonradan Görülebilmesi veya Karşılaşabilinecek Herhangi Bir Hata
Sonrasında Projenin Bu İşlem Yapılmadan Hemen Önceki Haline Geri Alınabilmesi İçin Uniq Bir Id Atar ve
Sizden de Bu Değişiklik Paketinde Neleri Değiştirdiğinize Dair Bir Mesaj Belirtmenizi İster. Bu İşleme
Commit Adı Verilir.
O Halde Biz de Klasörümüzün İçerisinden Tekrar Komut Sistemini Açalım
ve Aşağıdaki İşlemleri Uygulayarak Text Dosyamızı Repository'e Göndermek İçin Hazırlayalım :
->
İlk Önce Aşağıdaki Komutu Yazarak Dosyamızın Taşınacağını
Git 'e Bildiriyoruz :
-> Daha Sonra Kontrol Etmek
İçin
$ git status Komutunu Tekrar Çalıştırıyoruz . Output Aşağıdaki Gibi Olacaktır :
-> Burada Dilerseniz
$ git rm --cached 'deneme.txt' Komutu ile
Dosyamızı Commit Edilecekler Listesinden Çıkarabiliriz (Unstage) . Artık Aşağıdaki Komutu Yazarak İlk
Commit İşlemini Gerçekleştirebiliriz :
-> Şimdi Text Dosyamızı Açıp İçerisine Birşeyler Yazalım ve Dosyamızı
Kaydettikten Sonra Aynı İşlemleri Sırasıyla Tekrar Gerçekleştirelim :
Görüldüğü Üzere Git, Arka Planda, Oluşturduğumuz
Lokal Repository'de (Klasörde) Yapılan Tüm Değişikliklerde Aktif Olarak Çalışıyor. Aklınızı Şu Soruların
Geldiğini Duyar Gibiyim :
" Peki Her Değişiklikten Sonra Komut Penceresini Açıp Git
Komutlarını Yazmak mı Gerekiyor ? "
" Git Her Zaman Bu Şekilde mi Kullanılıyor ? "Git
Bu ve Bunun Gibi Daha Birçok İşlemi Kendine Özgü
Git
Komutlarını Kullanarak Gerçekleştirir . Aslında Şu Ana Kadar Yaptığımız Tüm İşlemler Git
Komutlarını ve Çalışma Prensibini Açıklamak ve Anlatmak Amacıyla Yapılan İşlemlerdi. Çünkü Git'i İyi
Anlarsak O'ndan Maksimum Verim Alır ve Yaptığımız Tüm İşlemleri İşin Mutfağını da Bilerek
Gerçekleştirmiş Oluruz.
Dilerseniz Bu Şekilde de Çalışabileceğiniz Gibi ; Projenizin Bir Git
Repository'si Olması Koşuluyla , Tüm Bu Git Komutlarını Sizin İçin Arka Planda Otomatik Olarak Yazıp
Çalıştıran Birçok Uygulama / Code Editor /
IDE (Integrated Development Environment) Mevcut .
Bunlardan En Çok Kullanılanlardan Bazıları :
->
Masaüstü (Desktop)
Uygulamalar : GitHub
Desktop ,
SourceTree
,
Git GUI vb.
->
IDE / Code Editorler : Visual Studio Code ,
Visual Studio ,
Android Studio ,
xCode vb.
Tek Yapmanız Gereken Bu Uygulamaları Kullanarak Yeni
Bir Git Repository Oluşturmak veya Var Olanı Klonlayıp Klonladığınız Klasörü Bu Uygulama / IDE 'leri
Kullanarak Açmak. Git , Arka Planda Otomatik Olarak Devreye Girecek ve Yapılan Tüm İşlemleri Size
Detaylıca Raporlayacaktır.
Son İşlem Olarak, Oluşturduğumuz Klasörü (Repository)
Visual Studio
Code veya Başka Bir Editör ile Açın. Yaptığınız Tüm Değişikliklerin Gösterildiğini ve Siz
Değişiklik Yaptıkça Arka Planda Git'in Devreye Girip Komutlarının Otomatik Olarak Çalıştığını
Göreceksiniz.
->
push :
Git 'de 2. Aşama
Olan Commit İşlemini Yaptık . Ama Tabiki Biz Şu Ana Kadar Kendi Oluşturduğumuz Lokal Bir Repository'de
Çalıştık . Peki Ya Bu Projede Çalışan Bizim Dışımızda Başka Kullanıcılar da Olsaydı ?
O Zaman
Bizim ; Tüm Bu Kullanıcıların Rol , Yetki ve Yaptığı İşlemleri Yönetecek , Karmaşıklığı ve Çakışmaları
Önlemek Adına Tüm Kullanıcılardan Gelen Dosya ve Değişiklikleri Bir Yerde Toplayıp Derleyip Düzenleyip ;
Her Kullanıcının Projenin Son Halini Çekebileceği Remote Server Gibi Çalışan Bir Ana Respository'e
İhtiyacımız Olurdu. İşte Bu Repository'e
Bare Repository Adı Verilir.
Resim-3 : Git Bare (Remote) Repository Çalışma
Prensibi
Bare Repository'lerde Git'in Kendisinin Kullanacağı Fiziksel Dosyaların
Dışında Dosya Bulunmaz ,
Git'in Çalışma Prensibi Gereği, Tüm Kullanıcılar Lokalde Projenin Bir
Klonunu Alıp Çalıştıkları İçin , Burada Repository'lerin Birnevi Log'ları Tutulur. İşte
push
İşlemi Bizim Yapmış Olduğumuz Tüm Commit(leri) Bu Remote (Uzak) Repository'e Gönderme
İşlemidir.
->
pull : Remote Repository'den Projenin
Son Halini Lokal Repository'e Çekme Komutudur.
->
clone :
Remote Repository'i Yetki Dahilinde Lokalde Çalışmak İçin Kopyalama Komutudur.
Resim-3'te Bir Projenin Git Akış Diyagramı Görüntülenmektedir. Branch ve
Versiyon Kontrol Yapılarını Daha İyi Kavramak Adına ; Birlikte Bu Diyagram Üzerinden Bu Projenin
Versiyon Oluşturma Aşamalarını Yorumlayalım :
Resim-4 : Git Versiyon Kontrol Akış Diyagramı
-> " Bu Projede ; Mavi Renk ile Gösterilmiş
master branch'ından
develop
Adında Yeni Bir Branch Türetilmiş ve Bu Branch Üzerinden Bir Ekip Bu Projeyi Geliştirmeye Devam
Ettiği Esnada, Projenin Beta Sürümünde Oldukça Önem Arz Eden Bir Hatanın Olduğu Farkedilmiş ve
Bunu Düzeltmek Adına
master 'dan
hotfix Adında Yeni Bir Branch Daha Türetilmiş ve
Bu Branchta Düzeltmeler Yapıldıktan Sonra ,
hotfix ve
master Branchları
merge Edilmiş ve Projenin Son Düzenlemelerini de Barındıran
"v0.5" Versiyonu
Çıkarılmış.
->
develop Branch 'ında Çalışan Diğer Ekip ise Bu Projeyi Geliştirmeye
Devam Ederken ; Başka Bir Ekip , Projede Yer Alması Planlanan Ekstra Bir Özelliği Geliştirmek
Adına ,
develop Branch'ından
feature Adında Yeni Bir Branch Oluşturmuş ve Bu
Branchta Yeni Eklenecek Özelliği Geliştirmiş ve Sonunda
feature ve
develop
Branchları
merge Edilerek , Projenin Ara Bir Versiyonu Olan
"v1.0" 'ı Çıkarılmış.
Ve En Son v1.0 'da Tüm Testler ve Geliştirmeler Tamamlandıktan Sonra ,
develop ve
master branchları Son Kez
merge Edilip En Son Versiyon Olan
"v1" Ortaya
Çıkarılmış.
-> Burada Vurgulanması Gereken En Önemli ise ; Git Branch Yapısı Sayesinde ,
Tüm Ekipler Aynı Projede , Birbirlerinin Yaptığı Değişikliklere Basmadan ve Birbirlerinin
Çalışmasını Engellemeden Organize Bir Şekilde Bu Projeyi Geliştirip Ortaya Yeni Bir Versiyon
Çıkardılar."
" Artık Git Çalışma Sistemi ve Repository / Bare Repository (Remote) Mantığı
Hakkında Bilgi Sahibiyiz ve Lokalde
Kendi Git Server'ımızı Kurmak İçin Bir Sonraki
Aşamaya Geçebiliriz ".