Githhub ve Versiyonlama Nedir?
Geçmişten günümüze kadar yazılım sektöründe çalışan kişilerin en büyük sorunu proje ve kod takibi olmuştur. İster tek başınıza kod yazın, isterseniz ekip olarak kod yazın, yaptığınız değişikliklerin üzerine yazılmaması, silinenlerin geri alınması ve en önemlisi projelendirme aşamalarının takibini yapma zorunluluğu doğmuştur. Bu yazımızda basitçe Github ve versiyonlama nedir, nasıl kullanılır bunları açıklamaya çalışacağız.
Bir projeniz olduğunu düşünelim; projenizde 150 HTML kodu, 46 CSS kodu ve 10 tane JS kodunuz var diyelim. Projeyi 1 yıl sonra açtığınızda hangi dosyanın nerede olduğunu, ne işe yaradığını, silinen var mı veya üzerine yazılan kısımlar neresiydi diye sorduğumuzda cevap yüzde 90 hatırlamıyorum olacaktır. İşte bu nedenle versiyonlama denilen çözümler hayat kurtarıcı olabiliyor.
Versiyonlama Sistemleri Nelerdir?
Başta Git olmak üzere Subversion gibi çeşitli versiyonlama sistemleri bulunmaktadır. Sektörde genellikle en popüler olan versiyonlama sistemi olan Git’i bu yazımızda anlatıyor olacağız.
Projeyi oluşturduğunuzda versiyonlama sistemini başlatırsanız ve her güncelleme sonrası yeni bir versiyona yükseltme yaparsanız, olası bir hata veya silinme durumunda bir önceki versiyona dönüş yapabilmesine olanak sağlamış olursunuz. Örneğin; Projenizi 1.1.2 versiyonuna kadar ilerlettiğinizi düşünün. Ancak, 1.0.0 versiyonunda kalan bir kod parçasına ihtiyacınız olduğunu varsayalım. Git sayesinde 1.0.0’dan alınan kod parçasını 1.1.2 versiyonuna ekleyebilir ve bu değişikliği de 1.1.3 versiyonuna uygulayabilirsiniz. Unutmadan söylemek gerekirse Git sadece yerel bilgisayarınızda kullanılıyor olacaktır. Bunu hem sunucuya hem de daha gelişmiş bir yapıda takip etmenize olanak sağlayan Github’ı biraz sonra anlatıyor olacağız.
Git hem solo hem de takım olarak çalışmanıza olanak sağlıyor. Örneğin, sizin yaptığınız bir yazılımı bir başkası başka bilgisayarda çalıştırdığında o da sizin versiyonunuzdan başlayarak çalışmaya devam ediyor. Daha sonra tüm değişikliklerinizi merge ederek uygulayabiliyorsunuz. Git sayesinde kodu kimin, ne zaman yazdığını da görüyoruz. Bu sayede kodlarımız karışmıyor ve olası anlaşmazlıkların önüne geçilmiş oluyor.
Github Nedir?
Github, günümüzde yazılımcıların sosyal medyası olarak anılıyor. Facebook, Twitter gibi düşünecek olursak herkesin bir profili ve gönderileri var. Bu gönderilerin Github’taki karşılığı repository dediğimiz kod depolarıdır. Eğer açık kaynak bir proje yapıyorsanız, bunu tüm Github’ın göreceği şekilde yönetebilirsiniz. Bu sayede sizin yaptığınız programlama diline göre dünyanın herhangi bir yerinden giren bir kullanıcı sizin projenizi geliştirebilir.
Github sayesinde WordPress, Joomla vb. CMS yazılımlarının geliştirilmesine katkı sağlayabilirsiniz. Tabi ki çeşitli kontroller ve testlerden sonra gerçekten bu işe yarayan bir geliştirme ise ancak o zaman geliştirmeniz yayına alınabilir.
Projelerinizi Github’a yüklemeniz için bir sınır olmasa da biraz önce anlattığımız Git kullanılarak son versiyonu Github’a yükleyebilirsiniz. Bu sayede tüm versiyonlarınız hem kendi bilgisayarınızda hem de Github üzerinde barındırılıyor olacaktır. Github sayesinde birden fazla ekibin çalıştığı projeleri çok kolay yönetebilir, silebilir veya güncelleyebilirsiniz.
Git, Github ve Sunucu İle Çalışma
Halen en popüler yöntemlerden biri olan FTP ile dosyalarımızı sunucuya göndermek mümkün ancak bu yöntem hem riskli bir yöntem hem de yönetilebilir değil. FTP ile sunucunuza saldırı olabilir, dosyalarınız karışabilir, üzerine yazılabilir ve bunu kimin nasıl yaptığını asla bulamayabilirsiniz. Bu nedenle Git, Github ve sunucu ile bağlantılı çalışmanın daha mantıklı olduğunu söyleyebiliriz. Örnek olarak şu şekilde açıklayabiliriz;
Bir internet sitesi tasarlıyorsunuz ve bunun için üç kişi çalışıyor diyelim. Bu üç kişi versiyonlama sistemi kullanarak kodlarını Github’a gönderiyor ve biz de bu kodları inceleyerek Github’ta pull request ediyoruz. Artık üç yazılımcının kodlarını tek bir yapıda birleştirdiğimize göre Github’ın bize sağlamış olduğu nimetlerden faydalanabiliriz. Github’ta bazı komutlardan sonra otomatikleştirilen ve tamamen insan faktörünün ve hatanın ortadan kalktığı çözümler mevcut. Bunlardan en önemlisi Github Actions isimli komutlardır. Bu komutlar sayesinde yazılımınızı otomatik test edebilir, e-posta yollayabilir, sıkıştırabilir ve çeşitli kontrolleri yapabilirsiniz.
Tüm bu test ve kurallardan geçen kodlarınız sunucuya gönderilmek için hazırdır. Github Actions ile sunucunuza bir istek atılır ve sunucunuza kodlarınızın güncellendiğini ve Github’tan çekmesi söylenir. Bu sayede tüm kodlarınız sunucuya çekilerek hata dönüp dönmediği Github’ta takip edilebilir. Eğer bu aşamada bir hata oluşursa sunucunuz bu değişikliği uygulamaz. Bu sayede kodlarınız eski ama stabil halde çalışmaya devam eder.
Eğer kodlarınız başarılı bir şekilde yüklendiyse bu sefer Github panelinizde kodlarınızın başarılı bir şekilde çalıştığıyla ilgili bilgiler görebilirsiniz. Görüldüğü gibi bir pull request talebi ile bu ekosistemi çalıştırmış olduk. Burada insan faktörünü ortadan kaldırarak olası bir hatayı veya dosya sisteminde yaşanacak üzerine yazma gibi felaket senaryolarını düşünmemiş olduk.
Github Actions İle Neler Yapabiliriz?
Bir sunucunuzun ve internet sitenizin olduğunu düşünelim. Bu sunucuya bir kod attığınızda aşağıdaki işlemleri yapıyor olalım;
Cache dosyalarını siliyoruz, görselleri yeniden boyutlandırmak gerekiyor, veritabanı temizliği ve optimizasyonu yapmamız gerekiyor, google ve diğer arama motorlarına sitemap.xml dosyamızın güncellediğimizi bildirmemiz gerekiyor, tüm yöneticilere yeni bir sisteme geçtiğimizi ve sisteme giriş yaparak şifrelerini değiştirme e-posta’sı göndermemiz gerekiyor, zararlı yazılım ve virüs taraması yapmamız gerekiyor, test’i çalıştırarak kodlarımızda bir hata var mı izlememiz gerekiyor.
İşte bu anlattığımız senaryoda yer alan insan iş yükü oldukça fazla. Github Actions ile bu insan yükünü makinelere aktarabiliyoruz. Github Actions’a tanımladığımız tüm bu işlemler sunucumuza attığımız her yeri kod ile baştan başlayarak çalışıyor ve bize de arkamıza yaslanıp bu süreci izlemek kalıyor.