Git sürüm kontrol sistemini kullanan her bir çalışma dizini (proje), internet erişimi ya da merkezi bir depo olmaksızın tüm tarihçeyi tutan ve sürüm kontrol sisteminin tamamını içinde barındıran tam yetkili birer depodur. Aynı çalışma dizininin birçok depodan birindeki kopyasında yapılan değişiklikler diğerlerine güven temelli bir değerlendirmeyle kabul edilir; Güvenilmeyenden değişiklik alınmaz, o kendi ayrı sürümünü geliştirmeye devam eder.
Git'in şu anki yazılım bakıcılığını Junio Hamano üstlenmiş durumda. Git, GNU Genel Kamu Lisansı'nın 2. sürümüyle lisanslanmış bir özgür yazılımdır. 2.26.0 sürümünden itibaren Türkçe dil desteği sunmaktadır.
- Depo (Repository): Git projelerinin temelini oluşturan depo, proje dosyalarının ve sürüm geçmişinin saklandığı yerdir. Bu depo, yerel bir bilgisayar üzerinde veya uzak bir sunucuda bulunabilir.
- Taahhüt (Commit): Bir taahhüt, projenin belirli bir anında yapılan değişikliklerin bir görüntüsünü temsil eder. Taahhütler, projenin sürüm geçmişini oluşturan temel yapı taşlarıdır.
- Dal (Branch): Git projeleri genellikle farklı özellikler veya geliştirmeler üzerinde çalışırken farklı dallara ayrılır. Ana dal (genellikle
"master"
veya"main"
olarak adlandırılır), projenin ana sürümünü temsil eder. - Birleştirme (Merge): Farklı dallardaki değişiklikleri birleştirme işlemidir. Bu, farklı geliştiricilerin çalışmalarını bir araya getirme veya yeni bir özellik eklerken ana dala dahil etme sürecini içerir.
- İstemci ve Sunucu (Client and Server): Git, hem yerel bilgisayarlarda çalışabilen bir istemci olarak hem de uzak depolara erişim sağlayabilen bir sunucu olarak kullanılabilir. GitHub ve GitLab gibi hizmetler, uzak sunucular sağlar ve işbirliği yapmayı kolaylaştırır.
Projeniz yeni olsun veya olmasın tek satır komutla projeniz için Git deposu oluşturabilirsiniz.
Komut ekranını açın ve komut ekranından proje klasörünüze ilerleyin. Projenizin ana klasöründe olduğunuzdan emin olduktan sonra ‘git init’
komutunu girin.
Projemizde .git
adında gizli bir klasör oluşması gerekiyor. Şimdi de ‘git status’
komutunu girelim. Bu komut projemizde en son yapılan kayıttan (commit) sonra yapılan değişiklikleri gösteriyor. Biz daha önce herhangi bir kayıt yapmadığımız için de şu an bütün dosyalar yeni birer değişiklik olarak görünmekte.
Şimdi de bütün dosyalarımızı kayıt listesine ekleyip ardından da kayıt yapacağız. Bunun için ‘git add .’
komutunu girin. Normalde ‘git add’
komutunun en sonuna eklemek istediğiniz dosyayı belirtirsiniz. Bizim komut sonunda kullandığımız nokta ise bütün dosyaları ekle anlamına gelmekte.
Fakat bunu yaparken bir hata alıyorum ve kullanıcı adı ile mailimi git yazılımına tanıtmamı istiyor:
Kayıt işlemi için de ‘git commit -m “ilk kayit” ’
komutunu girin. Bu komutu girdiğiniz anda ekrana projenizdeki bütün dosyaların tek tek eklendiğini belirten satırlar görürsünüz.
Şu an tekrar ‘git status’
komutunu girersek ekranda en son yapılan kayıttan sonra herhangi bir değişiklik yapılmadığını gösteren bir yazı görücez.
Artık bilgisayarımızda projemiz için Git depomuz var. Projemiz üzerinde istediğimiz çılgınlıkları yapabiliriz. Çünkü bir şeyleri bozarsak projemizi eski çalışan haline döndürmek artık tek satır komutla mümkün olacaktır.
Şimdi de Git komutlarından en çok kullanılanları açıklayıp bir iki örnek göstereceğim.
Gidip projenizde herhangi bir dosyada birkaç değişiklik yapın ve sonra ‘git status’
komutunu kullanarak bu değişikliklerin deponuza nasıl yansıdığını görün. Ben projemde App.js
dosyasında değişiklik yaptım ve sonuç bu şekilde oldu.
Komut satırında son kayıttan sonra değişen dosyaların listesini görebilirsiniz. Şu an da yapacağımız şey dosyaları kayıta eklemek ve sonra da kayıt işlemini yapmak. Bunu biraz önce yaptığımız gibi sırasıyla ‘git add .’
ve ‘git commit -m “ikinci kayıt” ‘
şeklinde yapabilirsiniz. Ama bu sefer dosyaları ekleme komutunu kayıt komutuyla birleştirerek yapacağız. Komut satırına ‘git commit -am “ikinci kayıt” ‘
komutunu girin. Burada ek olarak kullandığımız a harfi kayıt işlemini yaparken bütün değişikliğe uğramış dosyaları da kayıta ekleyecektir.
Kayıt işlemini yapmadan önce ‘git diff’
komutunu kullanarak kaydedilmeyen değişikliklerin (eklenen ve çıkarılan satırların) ne olduğunu görebilirsiniz. Uzun bir dosyada değişiklik yapıldıysa ‘enter’
tuşunu kullarak satır satır ilerlemeniz gerekmektedir. Dosyanın sonuna gelmek istemiyorsanız da klavyeden ‘q’
tuşuna basıp çıkabilirsiniz.
Eğer yaptığınız değişiklikleri kaydetmek istemiyorsanız (örneğin son değişiklikler projenin bozulmasına sebep oldu ve geri eski haline döndürmek çok uzun sürüyorsa) ‘git reset —hard HEAD’
komutuyla projenizi en son kayıt yapılan haline döndürebilirsiniz.
Projenizi uzak bir depoya yerleştirmek için önce öyle bir depoya sahip olmanız gerekmekte. İnternette bu hizmeti sağlayan GitHub ve BitBucket gibi servisler bulabilirsiniz. Ben yazının devamında GitHub üzerinden devam edeceğim.
GitHub’a kayıtlı değilseniz kaydolun. Eğer programcı olarak uzun yıllar çalışmayı düşünüyorsanız kesinlikle bir GitHub hesabı açmanız gerek. Profil sayfanızı açtığınızda orta kısımda üç tane sekme göreceksiniz. Bunlardan ilki (contributions) sahip olduğunuz veya katkı yaptığınız projeleri gösterir. İkinci kısım da (repositories) sahip olduğunuz veya üzerinde yetki sahibi olduğunuz depoları gösterir. Son sekme de (public activities) GitHub üzerindeki projelerde aleni yaptığınız faaliyetleri görürsünüz.
Şu an yapmamız gereken şey depolar sekmesine girip oradaki yeni düğmesine (en sağdaki yeşil düğme) basarak yeni bir depo oluşturmaktır.
Karşınıza çok basit bir form çıkacaktır. Formun en üstünde deponun sahibi olacak hesabı seçebileceğiniz (GitHub’da birden fazla hesap ile çalışıyorsanız) ve deponun ismini girebileceğiniz kısımlar var. Onların hemen altında da projenin basit bir açıklamasını gireceğiniz ve projenin herkese açık olup olmadığını seçebileceğiniz kısımlar var. Formun en altında da projenizi ‘beni oku dosyasıyla beraber oluştur’ diye bir seçenek var biz onu kullanmayacağız. Onun hemen altında da iki tane seçenek var. Bunların açıklaması kısaca şöyle:
- .gitignore: Bu dosya proje içinde bulunan ama uzak depoda bulunmasını istemediğiniz dosyaları içerir. Genelde asıl kullanım amacı, proje derlendiği zaman oluşan dosyaları uzak depoya koymamaktır. Ayrıca kullandığınız IDE e bağlı dosyaların da uzak depoya konmasını engelleyebilirsiniz. Çünkü bu dosyalar siz bilgisayarınızda derleme yaptığınızda oluşacaktır. Ayrıca her proje türünde (web, ios, android) konması gereksiz olan dosya türleri farklıdır.
- licence: Lisans da depoya koyduğunuz projenin başkaları tarafından kullanılması durumunda sorumlu olacakları lisans şartlarını içerir.
Bu projemiz için bunları da geçeceğiz ama ileride
.gitignore
kullanmanızı şiddetle tavsiye ederim.
Ben şimdilik deneme adında bir proje oluşturuyorum. Daha sonra depoları silebildiğiniz şuan için isime çok da önem vermeyebilirsiniz.
Create repository düğmesine basarak deponuzu oluşturun. Depo oluştuktan sonra karşınıza çıkan sayfada projenizi bu depoya nasıl koyabileceğinizi anlatan bir kısım göreceksiniz. Bizim zaten bir git projemiz olduğundan sadece projemizi bu depoya yükleme işlemi yapacağız. O da dökümantasyonun bu kısımda anlatılmış vaziyette zaten.
Projenizde yapılan değişiklikleri tekrar git status
komutuyla kontrol edin ve kayıt edilmemiş bir değişiklik varsa bunları git commit -am “kayıt mesajı”
komutuyla kaydedin. Ve artık bize GitHub sayfasında da gösterildiği gibi git remote add origin https://github.com/DifferenTismail/deneme.git
komutuyla projenizi uzak deponuz ile eşleştirebilirsiniz. (Tabi bu komutu kullanırken kendi deponuzun URL’sini kullanmalısınız.) Bu esnada size github hesabınız için kullanıcı adı ve parola sorulacaktır. Bu bilgileri de girerseniz projeniz uzak depo ile eşleşmiş olacaktır.
Ancak projenizi deponuzda hemen göremezsiniz. Projenizi depoya göndermek için de git push -u origin main
komutunu kullanmalısınız. Bu komutu girdikten sonra komut satırında yükleme işlemi yapıldığını göreceksiniz. Bu esnada projeniz uzak depoya yükleniyor olacaktır ve sonuç olarak da komut ekranınız buna benzer bir sonuç göstermelidir.
Şimdi GitHub’daki proje sayfanıza giderseniz biraz önce size projenizi nasıl ekleyeceğiniz anlatan mesajlar yerine projenizin dosyalarını göreceksiniz.
Artık bilgisayarımızda yerel bir git projesi ve uzakta da buna karşılık gelen bir uzak depo bulunmakta. GitHub içinde klasörlerde gezinerek dosyalarınıza bakabilirsiniz. Şimdi projede değişiklik yapıp bunu uzak depoya kaydedeceğiz.
Ben kendi projemde App.js dosyamdaki veriyi değiştiriyorum.
Uzak deponuzda GitHub sayfasından değişiklik yaptığınız dosyayı açarsanız orada bir değişikliğin olmadığını göreceksiniz.
Şimdi de git commit -am “ilk degisiklik”
komutuyla değişikliği kayıt altına alın. Bu aşamada hala uzak deponuzda bir değişiklik olmayacaktır. Push komutunu kullanana kadar yaptığınız bütün değişiklikler yerel git deponuzda kalır. Bu değişikliklerin uzak depoda da etkisini göstermesini istiyorsanız git push origin main
komutunu kullanın.
Bu komuttan sonra GitHub sayfasından değişiklik yaptığınız dosyayı açarsanız değişikliklerin buraya da yansıdığını görebilirsiniz.
Burada üst kısımda da baktığınız dosya üzerinde bu zamana kadar kaç kişinin değişiklik yaptığını, en son değişikliğin kim tarafından ne zaman yapıldığını ve bu değişikliğin mesajının da ne olduğunu görebilirsiniz.
Profil fotoğrafı bulunan satırda satırın en sonunda yazan ilk degisiklik yazısına tıklarsanız o kayıtta hangi değişikliklerin yapıldığını görebilirsiniz. (Aynı şekilde sağ üstteki History düğmesine basarak bu dosya üzerinde bu zamana kadar yapılan kayıtların listesini görebilirsiniz)
Sonuç olarak artık projemizde git kullanmaya başlamış olduk. Artık projenizde git’i nasıl kullanacağınızı, değişiklikleri nasıl kaydedeceğinizi, nasıl uzak depo oluşturup projenizi oraya aktarabileceğinizi biliyorsunuz. Umarım bu anlatılanlar size zor gelmemiştir çünkü bu anlattıklarım daha buz dağının görünen kısmı. Asıl git kullanımı daha yeni başlıyor diyebilirim. Siz ilk olarak git’e alışmaya ve onu anlamaya çalışın. İleride, bir proje üzerinde birden fazla kişi olarak nasıl ve hangi yollarla çalışabilirsiniz onlardan da bahsedeceğim.