TEKNOLOJİ 18 Mart 2021
22b OKUNMA     508 PAYLAŞIM

Günümüzün Popüler Yazılım Servislerinden Git Hakkında Giriş Seviyesi Bir Rehber

Yazılım geliştirme süreçlerinde kullanılan, sürüm kontrol ve kaynak kod yönetim sistemi Git hakkında nedir, ne değildir minvalinde öğrenebileceğiniz giriş bilgileri.

yazılım projeleri için kullanılan versiyonlama sistemidir “git”. bu sistem “github” ile karıştırılmamalıdır.

github nedir, git nedir?

sosyal medyada da çok defa gördüğüm, çevrede de çok defa duyduğuma göre ikisi karıştırılıyor. github ve git birbirinden çok farklı şeyler. github bir depolama servisi iken git ise versiyonlama, diğer adı ile surum kontrol sistemidir. kısaca git demek github demek değildir, biri diğerinin kısaltması değildir. github depolama servisine git versiyonlama servisini kullanarak kodlarınızı gönderip, alabilirsiniz. yani kısaca git bir otobüs ise, github da otobüs durağıdır.

versiyonlama sistemi nedir?

bir yazılım projesi yazdığınızı düşünün. yazılım projesi demek içinde kodların bulunduğu birçok dosya demektir. bu dosyaların içindeki kodlar birbirine bağlı ve ihtiyacı olan kod parçalarıdır. örneğin "dosya a"nın içindeki x kodu "dosya b"nin içindeki y koduna bağlı, birinde yapılan değişiklik bir diğerini etkileyecek niteliktedir. bu durumda kod üzerinde bir değişiklik yaptığımızda tüm projeyi bir bütün olarak ele almalıyız. yani kısaca kodumuzun içinde sadece bir karakter dahi değişse projemizin bir bütün olarak yeni bir versiyonu çıkmış olur. versiyonlama sistemi de bu işleri yönetmemizi sağlayan yardımcı programlardır.

nedir depolama servisi?

üzerinde çalışılan projelerin herhangi bir programlama dili ile yazılmış kaynak kodlarının saklandığı sunuculardır. bir kod yazarsınız, bu kodu github sunucularına yüklersiniz ve github size bir erişim linki verir. bu link üzerinden internet erişiminin olduğu her yerde siz veya başka yazılımcılar bu kodu görebilir, bilgisayarına indirebilir ve değiştirebilir.

versiyon nedir?

versiyon bir projede her bir değişikliğin bir diğerinin üzerine eklenerek artan bir ifadedir. örneğin bir yazılım projesinin versiyonu genelde 1.0.0 ile başlar daha sonra 1.0.1, 1.0.2 olarak ilerler. bu versiyon numarasında her bir ayraç genel ortak anlayışa göre farklı şeyleri ifade eder. genel ortak anlayışa göre (yani bu bu şekilde yapılmak zorunda değildir, ama uyulması faydalıdır) bu versiyon numaraları "major.minor.patch" seklindedir. örneğin bir yazılım projesinde bir hata düzeltilir ise üçüncü kısım, yani 0.0.1 olan versiyon 0.0.2 şeklinde artar. eğer o projede yapılan değişiklikler daha küçük değişiklikler ise versiyonun ikinci kısmı yani 0.0.2 olan versiyon 0.1.2 seklinde artar. ama yapılan değişikler çok büyük değişiklikler ise ilk kısım artar yani 0.1.2 olan versiyon 1.1.2 olur. yani özetle bir versiyon numarasının ilk kısmı arttıysa o üründe büyük değişiklik yapılmış demektir. son kısmı arttıysa küçük bir bug çözümü, büyük değişiklik yapılmamış demektir.

şimdi bu versiyonlama sistemlerinin bize yararı nedir?

öncelikle ilk yararı bu versiyon numaralarını otomatik bir şekilde kendi tanımlamamıza göre yükseltir bu sistemler. ikincisi projemizin bir bütün veya parça parça halinde geçmişini tutar. bu sayede örneğin günün birinde bizim şu versiyon numaralı halindeki kodumuz nasıldı dersek o koda birkaç komut ile ulaşabiliriz. yani kodumuzun geçmişteki haline gidebiliriz. bir problem olursa veya bireyler bozulur ise kodumuzu geriye alıp kurtarabiliriz.

peki geliştirme takımları için yararı nedir bu versiyonlama sistemlerinin?

bir projede aynı kod dosyasında, hata ayni kod satırında ayni anda birden fazla geliştirici çalışabilir. ama bu yapılan değişiklikler bir araya geldiğinde ayni dosyada iki farklı paralel versiyon var demektir. örneğin birinci kişi ahmet bir dosyada birçok kodu değiştirmiş olabilir. diğer taraftan ikinci kişi ayşe ise ayni dosyada birçok yeri değiştirmiş olabilir. simdi ahmet’in elindeki dosyada ayşe’nin değişiklikleri yok, ayşe’nin elindeki dosyada da ahmet’in değişiklikleri. bu durumda iki dosyanın birleştirilme işlemi “merge” ciddi bir problem, çünkü bu değişiklik yapılan yerede iki dosyada da farklı satırlar tespit edilmeli, eksik yerler birbirine eklenmeli ve tek bir, yani iki kişinin oluşturduğu değişiklikleri de içeren tek bir dosya yapılmalı. ama bu değişiklikler de kendi içinde birçok nitelik barındırabilir. örneğin ekleme, değiştirme, veya silme gibi. işte bu noktada çok uzun bir kod dosyası ile çalışılıyor ise içinden çıkılamaz bir durum olur. hatta ve hatta, örneğin ayni dosyada ahmet dosya içinde gecen “elma” kelimesini “armut”, diler taraftan da ayşe o “elma” kelimesini “portakal” yaptı ise ne olacak. kimin yaptığı değişikliğe göre tek bir dosya oluşturulacak derken ciddi bir karmasa olur. işte bu noktada versiyonlama sistemleri bu değişiklikleri birleştirme, gerektiğinde uyarma, gerektiğinde geri alma gibi özellikleri sayesinde bu karmaşayı basitleştirirler.

versiyonlama sistemi denilince sadece git mi var?

hayır, geçmişten günümüze birçok sistem kullanıldı, popüler oldu ve kayboldu. git dışında svn, cvs vs. gibi birçok alternatif de var ama günümüzde en popüleri git.

nedir bu git-github ilişkisi?

kodumuzu geliştirdik, git ile versiyonlamasını yaptık. kodumuz bilgisayarımızda duruyor, peki takımımızdaki arkadaşlarla, ya da tüm dünya ile nasıl paylaşacağız bu kodumuzu. ya da nasıl yedekleyeceğiz, bilgisayarımıza bir şey olur ise bu kodumuzu nasıl kurtaracağız. işte bu noktada github devreye giriyor. github'dan bir proje açıyoruz, github bize bir link veriyor. bu link bizim kod alanımıza erişmek için bir adres oluyor. ama ilk başta bu alanın içi boş. “git” kullanarak bu adrese tüm kodumuzu atıyoruz, ister sadece kendi ekibimiz ile paylaşıyoruz, ister tüm dünyadaki diğer geliştiricilerin inceleyebileceği ve değişiklik yapabileceği şekilde herkese açıyoruz. bilgisayarımıza bir şey olursa, çalınırsa, bozulursa bu github kaynağından tekrar kodumuzu güvenli bir şekilde kaldığımız yerden geri alıyoruz.

git ile versiyonlamasını yaptığımız kodu sadece github serverlarına mı atmalıyız?

hayır, ister github'a atarsın, ister amazon code commit, ister gitlab, ister bitbucket olur. bunlar gibi birçok servis var ve genelde birçoğunda aynı özellikler olsa da fiyat paketleri olarak birbirinden ayrışıyor.

peki niye github?

birçok yazılımcı buraya tercih ediyor çünkü en kalabalık grup burada. ayrıca kodların görülebileceğini web ara yüzüne de herkes çok alıştı, ve gerçekten çok kullanışlı bir ara yüz sunuyor. ayrıca github artık geliştiriciler arasında bir facebook gibi oldu diyebiliriz, bunu kimin ne bildiği, kimin ne yazdığı burada açılmış durumda ve birçok şirket de işe alım süreçlerinde geliştiricilerin github profillerini görmek istiyor.

nedir bu komut satırı olayı?

kodumuzu yazdık, yeni versiyonu oluşturmak istiyoruz, peki bunu nasıl yapacağız? temelde bunun yapmanın iki yolu var, birincisi bir yardımcı program kullanmak. bu programların görsel ara yüzleri var ve bu ara yüz üzerinde birkaç buton tıklaması, birkaç yazı yazma ile bu yeni versiyonu çıkarabiliriz. örneğin bunlar sourcetree, github desktop, ya da kullandığımız kod editörün entegre uygulamaları olabilir.

neden bu tarz programlar kullanalım?

bu programlar genelde bu tıklama ve yazma isini arka planda git komutlarına çevirip bu kodları çalıştırırlar. bazen git komutları çok karışık bir hal alabiliyor, örneğin geçmiş versiyonlardan birinin üzerine yeni bir versiyon oluşturup, ama en yeni versiyondan da birkaç dosyayı bu oluşturulan versiyona eklemek gerekirse. bu durumda uzun uzun komut yazmak yorucu olabiliyor, ve bu tarz programlar bize hem görsel ara yüzleri, hem de işlevleri ile yardımcı olabilirler.

neden komut satırı kullanalım?

komut satırı demek neyi neden yaptığına biliyorsun demek, böylece bu versiyonlama işlemi sırasında daha az hata yapmak ve kontrolün tamamen elinde olması demek. tabi diğer taraftan birçok komutu da ezberlemen gerekir. ayrıca komut satırı geliştiriciler arasında iletişimi de kolaylaştırır. örneğin bir grafik ara yüzünde birine bir şey tarif ederken şuraya tıkla, sağ üstte bu var, ona tıkla, şu kutucuğu doldur gibi ciddi iletişim problemi yaşatan tarifler gerektiriyor. komut satırında bir satır komutu sesli veya yazılı olarak diğer geliştiriciye göndermek çoğu zaman çok daha pratik oluyor.

git ve github öğrenmeye değer mi?

tavsiyeden daha çok bu bir zorunluluk diyebilirim. neredeyse her geliştirici bu tarz bir sistemle çalışmak durumunda. hatta sadece kendi projenizi bile geliştiriyor olun bunları veya farklı alternatiflerini kullanın. size en büyük yararı, bir kodunuz bozulduğunda ve “eskiden çalışıyordu simdi ne oldu da çalışmıyor” diye düşünürken iste bu sorunun cevabini çok kolay alabilecek olmanız, gerekirse eski durumuna geri getirmeniz, bilgisayarınızda kodlarınızı kaybettiğinizde arkasından soğuk su içmek zorunda kalmamanız demek.

bu github'ın arkasında kim var?

yakın bir geçmişte github tüm servisleri ile beraber microsoft tarafından satın alındı. eğer bu tarz büyük şirketlerin sunucularında kodunuzu tutmaktan çekiniyorsanız gitlab gibi farklı alternatifleri kullanabilirsiniz. ya da kendi kişisel sunucunuza git sunucusu kurabilirsiniz. ama kendi çalıştığım şirket de dahil olmak üzere milyonlarca dolar değerindeki kodlar bu şirketlerin (microsoft, amazon, google vs.) sunucularında okyanustaki küçük bir balık misali duruyor.

öğrenmesi ne kadar sürer?

bir 8 saat üzerinde çalışmakla rahatlıkla temelini öğrenebilirsiniz. ama tabi bu süre yazılım konusunda tecrübenize bağlı olarak uzayabilir de kısalabilir de. ama temelini öğrendikten sonra size lazım olan ismini lazım olduğu zaman öğrenebilirsiniz. tek seferde tamamen uzman olmanız gerekmez. nasıl yapılırdan daha ziyade bu araçlarla neler yapabileceğinizi bilmek yararlıdır.

peki nereden öğrenilir bu git, github vs?

hem bu teknolojilerin kendi sitelerinde, hem youtube'da, udemy gibi online eğitim platformlarında türkçe, ingilizce birçok kaynak var.

bunları kullanırken neye dikkat etmeli?

öncelikle neyi neden yaptığınızı bildikten sonra buralarda kodunuz güvende sayılır. birçok durumda kodunuzu geçmişe dondurup kurtarabilirsiniz. riskli hallerde de bu teknolojiler sizi gerektiği şekilde uyarır, uyarıları mutlaka dikkatle okuyun. ama bir durum var ki çok dikkatli okumalısınız, sizi maddi olarak zor duruma sokabilir. amazon web services gibi bulut sistemler bu server'lara bağlanmak için size uzun bir “anahtar” dosyası paylaşırlar. bu dosyayı yanlışlıkla bu gibi versiyonlama sistemine üzerinden paylaşırsanız, diğer taraftan bu tarz dosyaları bu sistemlerde tarayan kotu niyetli kod parçaları tarafından tespit edilebilir ve bunun sonucunda amazon web service ler üzerinden yapılan illegal bağlantı ve binlerce dolar kullanım faturası ile karşılaşabilirsiniz. bu durumla karşılaşan birçok geliştirici var, kimisi amazon müşteri hizmetlerinin bir defaya mahsus yardımları sayesinde bu faturaları ödemekten kurtulmuş ama siz bu heyecanı yaşamayın. bu dosyaları bu sistemlere atıp, silseniz bile eskiye donuk versiyon da tutulduğundan dolayı yine de açığa çıkarılabilir. o nedenle böyle bir hata yaparsanız mutlaka bu “anahtar” dosyasını cloud service üzerinden iptal edin ve mutlaka cloud servisinize bir fatura alarmı kurun.