Merhaba arkadaşlar bu yazımda sizlere bir versiyon kontrol sistemi (VCS) olan git'ten bahsedeceğim. Bu konuda daha önceki şu yazımı okumadınız ise okumanızı öneririm.
Git bir versiyon kontrol sistemidir. Peki versiyon kontrol sistemi nedir? Versiyon kontrol sistemi (VCS), en basit tanımıyla, projenizi geliştirirken yaptığınız değişiklikleri adım adım kaydedebildiğiniz ve isterseniz bunu internet üzerinde uzak bir depoda (remote repository) saklayabildiğiniz bir sistemdir.
Versiyon Kontrol Sistemi nedir diyenler için biraz açıklayalım. Git veya benzer işleri yapan sistemlerin faydalarından bahsetmek için herhangi bir versiyon kontrol sistemi olmadığında neyin nasıl yapıldığına bakalım.
Örneğin; elimizde bir web sitemiz var ve üzerinde bir takım değişiklikler yapmamız gerekiyor. Böyle bir durumda en yaygın olarak yapılan, FTP'yi tek başına kullanmak oluyor. Eğer yalnızca FTP kullanıyor olsaydık dosyayı bilgisayarımıza indirip değiştirip sunucumuza tekrar yüklerdik. Ama belki de çoktan yaşadığınız gibi değişiklik gerektiren dosya sayısı arttıkça bu iş biraz daha zorlaşıyor. Bir de yapmamız gereken değişiklik uzun sürüyorsa değiştirdiğimiz dosyaların hepsini hatırlamamız gerekmekte.
"Hatırlamaya ne gerek var? Bütün dosyaları tekrar yükleyebilirim." diyebilirsiniz. Eğer projede çalışan arkadaşınız yoksa bu da mümkün tabii ki.
Arkadaşınızla bütün gün aynı projede uğraştığınızı düşünelim. İkiniz de birden fazla dosyada değişiklik yaptınız, hatta belki aynı dosyalarda uğraştınız. İkinizin birbirinden ayrı olan ve birbiriyle iç içe geçen çalışmalarını bir araya getirmek için yardımcı olacak bir araç olsa ne güzel olurdu. Bütün bunları bir kenara bırakalım. Belki de yalnızca dün yaptığınız yenilikler bugün hoşunuza gitmedi. Eski haline nasil dönebiliriz? Belki her değişiklikten sonra projeninin bir kopyasını almak mümkün olabilir.
İşte, bütün bu sıkıntılara ve daha fazlasına çözüm getirmek için bir versiyon kontrol sistemi kullanmak en akıllısı olacaktır. Versiyon kontrol sistemi size bir depo sağlar ve burada projenin dosyalarındaki değişiklikler geçmişiyle birlikte tutulur.
Son zamanlara kadar versiyon kontrol sistemleri, projenin merkezi bir depoda tutulduğu ve bu projeden olan insanların değişikliklerini bu merkeze işlediği bir düzen ile çalışıyorlardı. Git ise dağıtılmış bir depolar düzeni ile çalışıyor. Bu da demek oluyor ki projenin olduğu her yerde bir depo var ve hiçbiri diğerinden farklı değil. Örneğimizden devam edersek web sitenizin bulunduğu sunucuda da, sizde de, projenin üzerinde çalışan diğer arkadaşınızda da aynı deponun bir kopyası bulunuyor. Bu sistem çalışma düzeninize biraz daha esneklik katmanızı sağlıyor. Ayrıca herkes deponun bir kopyasını tuttuğu için otomatik olarak birden çok yedeğiniz olmuş oluyor.
Şimdi git'in komut satırı üzerinden nasıl kullanabileceğimize bakalım.
https://www.git-scm.com/downloads adresinden yüklememizi yapıp komut satırı üzerinden git'in çalıştığından emin olduktan sonra devam edebiliriz.
Öncelikle genel olarak git'i yapılandıralım. Git, yapılan değişikliklerin yanında değişikliği yapanı da depomuza kaydeder. O zaman kendimizi tanıtarak başlayalım.
$ Git config --global user.name "Cahit Soyman"
$ Git config --global user.email "soyman@ornek.com"
"--global" sayesinde ilgili bilgisayarda şu an olan ve gelecekte oluşturulacak depolarda bu yapılandırmanın kullanılmasını sağlamış oluyoruz.
Buradaki isim ve mail bilgilerini vermediğiniz zaman proje üzerinde commit yaptığınızda, commit mesajlarınızda github kullanıcı adınız değil de commiti yaptığınız bilgisayarın kullanıcı adı görünüyor.
Komut satırı renklerle daha okunabilir olacaktır. Git'in renklerini açalım.
$ Git config --global color.ui gerçek
Artık bir depo oluşturabiliriz. Herhangi bir klasörde git deposu oluşturmak için "git init" komutunu yazmamız yeterli. Basit olması için boş bir klasörde başlayalım.
$ Git init
Bu komut,bulunduğunuz klasörde ".git" isimli bir klasör oluşturacaktır. Bu klasörle doğrudan işlem yapmanız gerekmiyor; ama isterseniz bu dosya içerisinde projenizin geçmişi, bu depoya özel yapılandırmalarınız, etiketleriniz ve benzeri verileri tutabilirsiniz.
Şimdi projemize bir şeyler ekleyelim. Ben örnek olarak "index.html" isimli bir dosya oluşturuyorum. Depomuza işlemeden önce yaptığımız değişikliklerin listesini görmek için aşağıdaki komutu kullanabiliriz.
$ git status
Yukarıdaki komutu çalıştırdığımızda bir dosya yeni oluşturulmuş ise "takip edilmeyen" (untracked), daha önceden depoya işlenmiş bir dosya değiştirilmiş ise "değiştirilmiş" (modified) gibi durumlar gösterilecektir.
Evet, artık bu dosyayı depomuza kaydetmek istiyoruz. Kendi bilgisayarımızda çalışırken değişiklikler depoya işlenmeden önce bir sahne alanından (staging area) geçer; yani projemize yaptığımız değişiklikleri önce bu alana yerleştiririz, sonrasında da bu alandan depoya işleriz.
Sahne alanına eklemek için "git add" komutunu kullanıyoruz.
$ git add index.html
Yazdıktan sonra tekrar "git status" komutuyla şu andaki durumumuza bakabiliriz. Başka dosyalar da eklemek istiyorsak tercih ettiğimiz editörümüz ile yeni dosyalar oluşturup tekrar "git add" komutu ile sahne alanımıza ekleyebiliriz. Örneğimiz için şimdilik bu kadar yeter diyip ilk depoya işleyişimizi tamamlamak için:
$ git commit -m "index.html eklendi"
komutunu yazıyoruz. "-m" seçeneği sayesinde bu işlemede yaptığımız değişikliklerle ilgili ufak bir açıklama ekleyebiliyoruz. Böylece sonradan işleme geçmişine baktığımızda neler olup bittiğini anlamamız hayli kolaylaşıyor. Bu komut ayrıca bize eklenen, çıkarılan veya değiştirilen dosyaları tekrar özetliyor.
Diyelim ki birkaç işleme yaptık ve bu süre boyunca neler yapatığımıza bakmak istiyoruz.
$ git log
Yukarıdaki komutu çalıştırdığımızda geçmişte yapılan işlemler bu işlemleri yapanlarla birlikte yapılma sırasına göre gösterilecektir.
Şimdiye kadar hep kendi bilgisayarımızda çalıştık. Diğer bilgisayarlarla çalışmak için diğer bilgisayara "veya daha doğrusu uzaktaki bir bilgisayardaki depoya" ait linki git'in "uzak bilgisayarlar" (remote) listesine eklememiz gerekiyor.
$ git remote add merkez git@github.com:kullaniciadi/repo_adi.git
Bu komutu çalıştırdığımızda git, git@github.com:kullaniciadi/repo_adi.git adresini şu an kullandığımız bilgisayardaki depoya "merkez" isminde kaydediyor. Bilgisayarımızdaki depoda yaptığımız değişikliklerimizi daha sonra bu depoya göndermek için ise aşağıdaki komutu kullanıyoruz.
$ git push -u merkez master
Burada göndermek istediğimiz uzak bilgisayarın adını (merkez) ve depomuzun hangi dalını göndermek istediğimizi belirtiyoruz. "-u" ise, özellikle başka bir depo adresi vermediğimiz sürece, bundan sonra göndermek istediğimiz değişiklikler için "merkez" isimli uzaktaki depomuzu kullanacağımızı git'e söylememizi sağlıyor. Yani daha sonra bu depoya bir değişiklik göndermek istediğimizde "git push" yazmamız yeterli.
Diyelim ki biraz zaman geçti. Başka insanları bu proje üzerinde çalışmak üzere davet ettik. Onlara uzaktaki depomuzun linkini verdik, onlar da kendi değişikliklerini yaptılar ve o depoya gönderdiler. Uzaktaki depomuza yapılan bu değişiklikleri almak için ise "git pull" komutumuz var.
$ git pull merkez master
Bu komutla birlikte depomuza gönderilen değişiklikler bilgisayarımıza indiriliyor ve bilgisayarımızdaki depomuz ile uzaktaki depomuz aynı hale geliyor.
Bütün bu öğrendiklerimiz kullanıldıkça daha iyi anlaşılabilir. Şimdi de "git diff" komutuna bir göz atalım. Depomuzda yaptığımız değişikleri ayrıntılı olarak görmek için bu komutu kullanabiliriz.
$ git diff HEAD
Yukarıdaki komutla birlikte depomuza en son işleme yapıldıktan sonra yapılan değişiklikleri satır satır görebiliriz. Burada "HEAD", en son yapılan işlemeye (commit) karşılık gelen bi göstergedir; yani bu komut en son işleme ile şu an arasında ne fark var sorusunun cevabını bulmamıza yardımcı olur. Sahne alanımızı hatırlıyorsunuz; işlemeye hazır olduğunu belirttiğimiz dosyalar burada tutuluyordu. Buradaki değişikliklere bakmak istersek "git diff" komutuna "--staged" seçeneğini eklememiz yeterli olacaktır.
Bu yazımızda öğrendiklerimiz git'i basit özellikleriyle kullanmaya başlamanız için yeterli olacaktır. Bir sonraki yazımızda dallanmalardan, çakışmalardan, etiketlerden ve daha birçok özelliğinden bahsederek git'i daha yakından tanımaya çalışacağız. Yazımızı beklemeden kendiniz öğrenmek isterseniz aşağıdaki kaynaklar arasında verilen git'in anasayfasından pek çok kaynağa ulaşabilirsiniz. Bir sonraki yazımda buluşmak üzere!
Kaynaklar:
Git Resmi Web Sitesi
Git İçin Basit Rehber
Github Üzerinde Kod Yapısı
Github Tarafından Hazırlanmış İngilizce Eğitim Sayfası
Git İçin Basit Rehber
Github Üzerinde Kod Yapısı
Github Tarafından Hazırlanmış İngilizce Eğitim Sayfası
0 Comments
Yorum Gönder