Showing posts with label git nedir. Show all posts
Showing posts with label git nedir. Show all posts
Git ile bir proje üzerinde çalışırken yaptığımız değişiklikleri geri alabilir dilersek daha sonra tekrar ileri alabiliriz. Yaptığımız her değişiklik bir versiyonlama mantığı ile düşünebiliriz. Git'te yapılan her değişikliğin yani her commit'in bir id bilgisi tutulur. Bu id bilgileri ile projemizi istediğimiz commit'in olduğu andaki duruma getirebiliriz. İstersek bu değişiklikler hiç olmamış gibi tüm olanları silebiliriz, istersek sadece geri dönüp kontrol edebilir sonra tekrar ilk hale dönebiliriz. Git'te değişiklikleri geri alabilmek için üç farklı yöntem vardır. Bu yöntemlerin etkileri farklıdır ve farklı durumlarda kullanılırlar.
Revert
Bu komut, commit id ile belirttiğimiz commit'in yaptığı tüm değişiklikleri geri alacak şekilde proje dosyalarımızın üzerinde değişiklik yapar. Bu değişiklikleri daha sonra staging area'ya taşırız ve daha sonra depomuza commit ederek projemizi o ana döndürürüz. Bu işlemler projemizin tarihçesine yansır. Örnek verecek olursak bir proje oluşturduğumuzu ve commit1, commit2, commit3 mesajlarıyla üç commit yaptığımızı varsayalım. Daha sonra revert komutunu commit2'nin id si ile çalıştırdığımızı düşünürsek bu komut commit2 ile yapılan değişiklikleri geri alacak şekilde dosyalar üzerinde değişiklik yapar. Daha sonra biz bu değişiklikleri normal değişiklikler gibi commit edebiliriz. Tarihçemizi kontrol ettiğimizde(git log) şöyle bir sıra ile karşılaşırız.
Commit1
Commit2
Commit3
Revert Commit2
Buradaki mantık değişiklikleri geri alan bir commit atılmasıdır ve tüm süreç daha sonradan tarihçede görülebilir.
Aşağıdaki gösterildiği gibi revert komutunu kullanabiliriz. Commit id yazan kısma değişikliklerini geri almak istediğimiz commit'in id bilgisini yazarız. Bu bilgiyi 'git log' komutu ile öğrenebiliriz.
git revert commitId
Reset
Bu komut projemizi, commit id ile belirttiğimiz commit olduktan sonraki hale getirir. Commit id ile belirttiğimiz commit olduktan sonra yaptığımız tüm değişiklikleri siler. Bu komutun iki farklı kullanımı vardır. Hard kullanımı ile dosyalar tamamen silinir ve tarihçe kaydı da temizlenir. Yani belirtiğimiz commit id den sonra yaptığımız tüm commit'ler sanki hiç yapılmamış gibi silinir ve tamamen temizlenir. Soft kullanımı ise hard kullanımı ile aynıdır tek farklı değişiklikleri git deposundan siler ancak local'imizden silmez. Daha sonra istersek local'den silebiliriz veya o değişiklikler üzerinde istediğimiz değişikliği yapıp tekrar commit edebiliriz.
git reset commitId --hard
git reset commitId --soft
Checkout
Bu komut, projemiz üzerinde bir zaman tünelindeymişiz gibi hareket etmemizi sağlar. Git deposuna yaptığımız her commit'in olduğu durumu bir zaman dilimi olarak düşünürsek, local'imizi istediğimiz bir zaman dilimindeki hale getirir. Bu durumdan git deposundaki proje dosyaları etkilenmez sadece biz local'imizde bir zaman tünelindeymişiz gibi zamanı geri veya ileri alabiliriz. Ayrıca bu işlem tarihçe dosyasına da yansımaz.
git checkout commitId
Bir önceki yazıda Git'in ne olduğunu ve nasıl kurulacağını anlatmıştım. Bu yazıda Git'in nasıl kullanıldığını ve en basit işlemlerini anlatacağım. Daha detaylı işlemlerini daha sonraki yazılarda anlatacağım.
Kısaca Git Ortamları
Git projelerimizde birden fazla ortam bulunur. Bunlar sırasıyla local'imiz, geçiş bölgesi, git deposu(local repository) ve uzak depo'dur(remote repository). Bu ortamlar kısaca şu işe yarar;
- Local'imiz, projemizin bir örneğini bulundurduğumuz kendi proje dizinimizdir ve bu örnek üzerinde değişikliklerimizi yaparız.
- Geçiş bölgesi, git deposuna göndermek istediğimiz değişiklikleri eklediğimiz bir liste olarak düşünebiliriz. Commit işleminde sadece bu listeye eklediğimiz değişiklikler git deposuna eklenir.
- Git Deposu, kendi bilgisayarımızda bulunan Git'in kendi standartlarına göre bizim projemizi sakladığı depodur. Projemizin son halini bu depoda saklarız. Local'imizde yaptığımız değişiklikleri bu depoya gönderiririz.
- Uzak Depo, aslında Git'i kullanmamızdaki temel amaçları sağlayan ortamdır. Proje üzerinde çalışan herkesin kendi local'i, geçiş bölgesi ve git deposu bulunur. Bu ortamlar herkesin kendi bilgisayarında bulunur. Biz birden fazla kişi olarak bir proje üzerinde çalıştığımızda ortak bir ortam ararız. İşte bu ortamı sağlayan uzak depodur. Herkes kendi deposundaki dosyaları uzak depoya gönderir(push etmek) ve bu şekilde ortak olarak bir proje üzerinde çalışılır. Aynı zamanda kendi bilgisayarımızdaki depomuz yanlışıkla silinse bile uzak depodan biz projemizi tekrardan kendi bilgisayarımıza indirebiliriz. Uzak deponun en güzel örneği Github'tır. Github bizim için bu hizmeti sağlar.
Git Kullanımı
Aşağıdaki komut ile bulunduğumuz dizinde bir Git projesi oluşturabiliriz. ProjeAdi olan yere projenizin adını girmelisiniz. Bu bilgi opsiyoneldir. Eğer bu bilgi girilmezse hangi klasörde isek o klasör bir git projesine çevrilir. Eğer proje adını girersek bulunulan klasör içerisine proje adında bir klasör açılır ve bu klasör git projesine çevrilir.
git init projeAdi
Git projesine çevirdiğimiz klasörün içerisine git adında bir klasör oluşturulur. Gizli klasör olarak oluşturulur bu yüzden görüntüleyemeyebilirsiniz. Bu klasör bulunduğu klasörün bir Git projesi olduğunu belirtir ve gerekli ayarları içerir. Git projesine dönüştürdüğümüz klasöre ben bundan sonra kısaca projemiz diyeceğim. Projemize bir dosya eklediğimizde veya projemizdeki bir dosyayı değiştirdiğimizde Git bu değişiklikleri otomatik algılar. Bu değişiklikleri görmek için aşağıdaki komutu kullanabiliriz.
git status
Yaptığımız değişiklikleri istersek geçiş bölgesine(staging area) taşıyabiliriz. Projemizde bir çok deişiklik yaptığımızda hepsini depomuza göndermek istemeyebiliriz. Burada depo dediğimiz şey Git'in projemizi sakladığı ortamlara denilebilir. Biz bazı değişiklikleri bu depoya göndermek istediğimiz için depoya göndermek istediğimiz değişiklikleri geçiş bölgesine taşırız. Bu işlemi aşağıdaki komut ile yapabiliriz. Dosya adı ile geçiş bölgesine taşımak istediğimiz dosyayı belirtiriz. Eğer nokta koyarsak Git'in tüm dosyaları geçiş bölgesine taşıması gerektiğini söyleriz.
git add dosyaAdi
git add .
Eğer geçiş bölgesindeki değişikliklerimizi Git deposuna göndermek istersek aşağıdaki komutu kullanırız. Bu işleme commit denir. Git projemizi kendine uygun şekilde depo(repository) adı verdiğimiz yerde saklar. Daha sonra Git üzerinde yapabileceğimiz tüm işlemleri (değişiklikleri geri alma, birden fazla kişinin yaptığı değişiklikleri birleştirme, vs) bu depo sayesinde yapabiliriz. Commit mesajı olarak istediğiniz bir mesaj girebilirsiniz. Proje büyüdüğü zaman projeye eklediğiniz her bir değişikliğin ne anlama geldiğini takip etmeniz açısından anlamlı bir şeyler girmeniz daha doğru olacaktır.
git commit -m "commit mesajı"
Aşağıdaki komut ile projemizde yaptığımız commit'lerin hepsini görebiliriz. Bu şekilde projemizde ne gibi değişiklikler olmuş ekipteki kimler ne zaman projeye kod eklemiş, neler eklenmiş bunları takip edebiliriz. Her commit'in üzerinde bulunan uzun sayılardan oluşan kod commit'lerin id bilgisidir. Commit'ler üzerinde işlem yaparken bu id bilgisini kullanırız.
git log
Aşağıdaki kod ile commit'ler üzerinde hareket edebiliriz. Örneğin projemizde 10 commit olmuş ve biz projenin daha eski bir haline erişmek istiyoruz. Örneğin projeyi 5. commit'in yapıldığı zamandaki haline döndürmek istiyoruz. Bu durumda aşağıdaki komutu kullanırız. Bu komuttaki commitId dönmek istediğimiz commit'in id bilgisidir. Yukarıdaki komut ile bu id bilgisini öğrenebileceğimizi söylemiştik. Burada dikkat edilmesi gereken bir noktada projeyi zamanda geri aldığımızda proje sadece bizim local'imizde değişiklik gösterir. Git deposunda bulunan projemizde herhangi bir değişiklik olmaz.
git checkout commitId
Git asenkron çalışan bir dağıtık versiyon kontrol sistemidir. Asenkron olmasının anlamı bir proje üzerinde çalışan birden fazla kişinin aynı dosya üzerinde aynı anda değişiklik yapılabilmesine izin vermesidir. Dağıtık olmasının anlamı ise projenizin sadece bir diskte değil birden fazla diskte senkronize olarak tutulabilmesine olanak vermesidir. Bu özelliği ile projenizin bulunduğu herhangi bir diske zarar gelse bile projenizin silinmemesini sağlar. Git bu özellikleri ile en popüler versiyon kontrol sistemi olmuştur. Git açık kaynaklı bir yazılımdır bu yüzden ücretsizdir ve gönül rahatlığı ile kullanılır. Peki git bir versiyon kontrol sistemiyse version kontrol sistemi nedir kısaca açıklayalım.
Versiyon Kontrol Sistemi Nedir?
Bir yazılım projesi yapıyorsanız ve bu projede tek başınıza çalışıyorsanız muhtemelen bu küçük bir projedir. Bu projeyi yazarken ekstra bir yazılıma ihtiyaç duymazsınız. Ancak eğer birden fazla kişi olaak büyük bir projeyi geliştiriyorsanız ve proje çok değerliyse yani dosyalarının silinmesi veya bozulması durumunda kayıp büyük olacaksa işin içinden nasıl çıkacaksınız. İlkel yollarla bir çok yöntem ortaya atılabilir ama hepsi için çok fazla uraşmanız gerekir. İşte bu noktada imdada version kontrol sistemleri yetişiyor. Bir proje üzerinde birden fazla kişinin beraber çalışabilmesini sağlayan, disk bozulmalarına karşı proje dosyalarını koruyan, yazılım projeleri için hayati öneme sahip sistemlere versiyon kontrol sistemleri diyoruz. Bu yazımızda anlattığımız Git bir versiyon kontrol sistemidir. Versiyon kontrol sistemlerinden sadece biridir. Bitbucket, Gitlab gibi başka versiyon kontrol sistemleri de vardır.
Git Web Sitesi
Git Kurulumu
Git kurulumunu linux sistemler için anlatacağım. Windows sistemler için web sitesindeki setup ile rahatlıkla kurulabilir. Aşağıdaki komut ile Git'i kurabiliriz.
apt-get install git
Eğer kurulum başarılı olmuş ise aşağıdaki komutun çıktısı Git'in versiyon bilgisini dönecektir.
git --version
Aşağıdaki komutlar ile Git'te kullanacağımız kullanıcı bilgilerimizi giriyoruz. Ad soyad ve email kısmına kendi kişisel bilgilerinizi girebilirsiniz.
git config -global user.name "ad soyad"
git config -global user.email "email"
Aşağıdaki komut ile konfigurasyon dosyasının içeriğini görüntüleyebilirsiniz.
git config -global --list