git dersleri

Git ile Uzak (Remote) Sunucularla Çalışmak

Merhabalar, Git derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde remote sunucularla çalışmayı göreceğiz.

Önceki derslerimizde git ile commit, branch, merge ve conflict konularını görmüştük. Bu dersimizde sürekli sorduğunuz uzak depo (remote repository) konusunu inceleyeceğiz.

Depo Türleri

Öncelikle günümüzde en çok kullanılan git servislerinden bahsetmek istiyorum. Bu sistemlerin en temel özelliği bir git deposunu bir sunucu üzerinde yönetebilmenizdir. Bunun dışında da proje yönetimi, dökümantasyon, CI gibi bazı ekstra özellikler de sunmaktadır.

Günümüzde bir git sunucusuna sahip olmak için illaki bir ücret ödemeye ihtiyacımız yok. Bu konuda ücretli/ücretsiz farklı alternatifler de mevcut.

Açık Depolar (public)

Açık depo* aslında adından anlaşılacağı gibi internette erişime herkesin açık olduğu depolardır. Bu tarzda projelerin kaynak koduna istediğiniz gibi erişebilirsiniz. İstediğiniz zaman projeyi yerelinize indirip istediğiniz editörle de inceleyebilirsiniz.

Özgür ve açık kaynak kodlu projeler aslında bu şekilde paylaşılmaktadır. Bu projelere isterseniz kendiniz de geliştirme ve iyileştirme yapıp bunun projeye dahil olmasını sağlayabilirsiniz. Bu şekilde sosyal bir ortam da sunar.

Bu arada dipnot olarak belirtmek gerekirse her kaynak kodunu gördüğünüz proje özgür yazılım olmayabilir. Yani bu projeyi istediğiniz gibi değiştirip dağıtma hakkınız olmayabilir. Bu yüzden bu depolarda lisans bilgisi de yer alır. Lütfen bu lisanslara dikkat ediniz. Özgür yazılım lisanslarına örnek vermek gerekirse GPL, LGPL, Apache, MIT, Eclipse Public License, BSD örnek verilebilir.

Bu tarz depolarda genellikle sadece kaynak koduna erişebilirsiniz. Bu depoya bir commit yapmak istediğinizde ya bir süreçten geçmeniz ya da o depoya yazma yetkisine sahip olmanız gerekir.

* Tekrardan hatırlatayım ben kelimesini Türkçe’ye depo olarak çeviriyorum. Eğer daha iyi bir kelime var ise tavsiye edebilirsiniz.

Özel Depolar (private)

Bu tarz depolar adından da anlaşılacağı üzere internete kapalı, dışardan varlığı bile belli olmayan depolardır. Bu depoları illa kapalı veya sahipli projeler olarak düşünmeyin. Örneğin elinizde bir proje vardır. Proje paylaşılmaya hazır değildir. Daha sonra paylaşabilirsiniz. Özgür yazılımlar ise o yazılımı birine verdiğinizde veya sattığınızda bununla birlikte kaynak kodu dahil olmak üzere 4 temel hakkı vermeniz anlamına gelir. Tabi eğer sahipli bir yazılım geliştiriyorsanız mecburen özel depolara ihtiyacınız var.

Bu projelere açık depolarda olduğu gibi istediğiniz kişilere istediğiniz yetkileri verebilirsiniz. Tek farkı isimsiz kullanıcılara açık olmamasıdır.

Şimdi en çok bilinen git servislerinden bahsedelim.

Git Servisleri

Gitlab

Gitlab logo

Gitlab ile başlamak istedim. Çünkü GitLab’ın topluluk versiyonu MIT lisanslı tamamen özgür bir yazılım. https://gitlab.com/gitlab-org/gitlab-ce/ adresinden inceleyebilirsiniz. Aynı zamanda ücretsiz. Eğer kendi sunucunuza bir git servisi kullanmak istiyorsanız, GitLab’ı ücretsiz kurup kullanabilirsiniz. GitLab’ın ücretli versiyonları da var. Bu versiyonlarda ekstra özellikler bulunuyor. Sunucuyu kendiniz yönetmek istemiyorsanız GitLab’dan veya başkasından bu hizmeti alabilirsiniz.

Özellikle kendi sunucunuza kurup sunucunun bulunduğu ağı da yönetmek istiyorsanız gitlab tam size göre. Örneğin bir VPN aracılığı ile ya da belirli IP’lerin erişmesini isteyebilirsiniz. Özellikle devlet projelerinde bu tarzda ihtiyaç oluşabilmekte bu durumda internete kapalı sunuculara gitlab kurabilirsiniz.

GitLab’ın bir diğer alternatifi de gitlab.com servisi. Bu servis GitLab’ın ücretli versiyonlarından biri ama bunu servis üzerinden ücretsiz sunuyorlar. Ayrıca bu versiyonda serviste proje yönetimi, iş yönetimi gibi araçlara sahip olabilirsiniz. GitLab.com üzerinden ücretsiz açık ve özel depolar oluşturabilirsiniz.

Bu depolara ücretsiz olarak istediğiniz sayıda insanı dahil edebilirsiniz.

Github

github logoEn popüler servislerden biridir. Çoğu yazılımcının, özgür ve açık kaynak yazılım üreten her firmanın github üzerinde bir hesabı vardır.

Nerdeyse hemen hemen her açık kaynak projeyi burada bulabilirsiniz. Bu projelere destek olabilir , gelişmesine katkı sağlayabilirsiniz. Bir taraftan yazılımcıların CVsi gibidir. Eğer yaptığınız projeleri github üzerinde paylaşırsanız sizin için artısı olacağını söyleyebiliriz.

Github eskiden ücretsiz özel depolar sağlamıyordu. Artık bunu sağlamaya başladılar. Eğer kodunu paylaşabileceğiniz projeniz varsa mutlaka github da paylaşmanızı öneririm. Github ile çalışabilen bir sürü ücretsiz uygulama da bulunmaktadır. Github’ın şu anki sahibi ise Microsoft.

Bitbucket

atlassian bitbucket logoGit servislerinden bahsedip de çalıştığım firma olan Atlassian’ın ürünü Bitbucket’dan bahsetmemek olmaz. Bitbucket, 5 kişiye kadar ücretsiz özel depo sağlıyor. Github’ın ücretsiz depo sunmasından sonra belki bu sayı artabilir. Bitbucket’ı diğerlerinden ayıran önemli bir özelliği ise aynı zamanda Mercurial depolarını da desteklemesidir. Özellikle Jira, Confluence gibi Atlassian ürünlerini kullanıyorsanız, Bitbucket’ı tercih edebilirsiniz. Ayrıca Trello firmasını satın alması ile beraber her depoya özgü Trello Kanban uygulamasını kullanabilirsiniz.

En çok kullanılan üç servisi ele aldım. Bununla birlikte birçok ücretsiz veya ücretli servis bulmanız mümkün.

Yapacağımız işlemleri her üç serviste de yapabilirsiniz. Hatta aynı depoyu üçüne birden gönderebilirsiniz. Ne de olsa git dağıtık bir sistem.

Uzak Depolarla Çalışmak

Hesabınızı oluşturun

Eğer hesabınız yoksa şimdi bu üç servisten dilediğiniz birinde hesap açın. Bu arada tavsiyemiz lütfen bu servislerden sadece birini seçiniz. Dikkat etmeniz gereken önemli nokta eposta adresinizi mutlaka doğrulayın. Bu yüzden ilgili servis sizin yapacağınız işlemleri kısıtlayabilir.

Uzak depo yaratmak

Uzak depo yaratmak oldukça basit olmasına rağmen yine de aşağıya adımları anlatacağım. Bu servislerin UI’ları değişebileceğini de hatırlatayım.

Gitlab’da giriş yaptıktan sonra sağ üstte görünen i’New Project’ ile depo yaratma ekranına ulaşabilirsiniz. Burdan projenize isim veriniz. Eğer deponuzun açık olmasını istiyorsanız ‘Public’i istemiyorsanız ‘Private’ı seçebilirsiniz. Şu anda biz repomuzda README dosyası oluşturulmasını istemiyoruz. Bunu daha sonra kendimiz oluşturabiliriz. ‘Create Project”e bastığınızda deponuz yaratılacaktır.

Github’da ise ‘Repositories’ sekmesinde ‘New’ butonuna basarak ilgili ekrana ulaşabilirsiniz.

Bitbucket’da ise + butonuna basıp reponuzu yaratabilirsiniz. Burda dikkat etmeniz gereken Mercurial değil de Git’i seçmeniz.

Yarattığınız reponun https://git.servisi/:username/:repository-name formatında bir URL’i olacaktır.

Uzak Depoyu Yerel Depoya tanımlamak

Yerelimizdeki git’in sunucu ile iletişime geçerken birden fazla protokolü desteklese de genellikle SSH ve HTTPS protokolü kullanılır. SSH ile ilgili daha sonraki dersimizde detaylı inceleyeceğiz. Şu an için HTTPS protokolünü kullanacağız.

Öncelikle bir URL’e ihtiyacımız var. Bu URL browser üzerinden ulaşmak için değil git deposuna commitleri göndermek için tanımlanan bir URL.

Gitlab için ‘Clone’ butonundan SSH ve HTTPS URL leri görebilirsiniz. Şimdilik HTTPS kullanacağımız için HTTPS linkini kopyalayın. Örnek: https://gitlab.com/omerozkan/half-life-test.git

Github da zaten URL göreceksiniz. HTTPS seçeneğini seçmeyi unutmayınız. Örnek: https://github.com/omerozkan/half-life-test.git

Bitbucket da ise örnek URL https://[email protected]/omerozkan/half-life-test.git şekilde olacaktır.

Şimdi tanımlama işlemine geçelim. Bu işlem oldukça basit komut satırı uygulamasından git deponuzun bulunduğu dizine gidin. Daha sonra URL ile birlikte şu komutu çalıştırın.

git remote add origin <URL>

Bu komutla yeni bir uzak (remote) depo tanımladık. git remote add‘in ne anlama geldiğini anlamışsınızdır. ‘origin’ ise uzak depoya verdiğimiz isimdir. origin yerine başka birşey de tanımlayabilirdik. Branch kavramında nasıl master defacto olarak kullanılıyorsa uzak sunucularda ‘origin’ varsayılan repo adı olarak kullanılır.

Commit’leri göndermek

Şu anda commit’leri değil aslında ‘master’ dalını göndereceğiz. Bunun için aşağıdaki komutu çalıştıralım.

git push -u origin master

Git uygulaması size kullanıcı adınızı ve parolanızı soracaktır. Bilgileri girdikten sonra aşağıdaki gibi bir çıktı alırsınız.

Counting objects: 39, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (39/39), 4.70 KiB | 1.57 MiB/s, done.
Total 39 (delta 13), reused 0 (delta 0) remote:
Resolving deltas: 100% (13/13), done.
To github.com:mobilhanem/half-life.git
* [new branch] master -> master Branch ‘master’ set up to track remote branch ‘master’ from ‘origin’.

Şimdi ilgil servise browser’ınızdan tekrar gidip bir bakın. story.txt dosyasını ve daha önce yaptığımız commit’leri burada görebilirsiniz.

Anlayacağınız gibi git push komutu yerelimizdeki commitleri veya branch’leri uzak depoya göndermemizi sağlar. Uzak depomuzda herhangi bir branch olmadığı için new branch ibaresini görürsünüz. -u parametresini ise yeni bir branch olduğu için gönderdik ama zorunlu değildik. Bunu da ilerleyen derslerimizde detaylı olarak göreceğiz.

Uzak Depolar

Biz de bu dersleri uzak depolara gönderdik. Bir sonraki dersimizden sonra direkt bu depolardan kod alabileceksiniz.

Ev ödevi

Bu dersimizde bildiğiniz gibi üç servis gördük ve bunlardan birine branchimizi gönderdik. Sizden istediğim diğer servislere de aynı işlemi yapmanız. Böylece dağıtık bir sistemde çoklu uzak sunucu ile nasıl çalışılacağını da öğrenmiş olacaksınız. İpucu vereyim. Diğer uzak depoları eklerken ‘origin’ yerine farklı bir isim verebilirsiniz.

Dersimizin sonuna geldik. Bu dersimizde bazı kavramları inceleyip, bir uzak sunucuya ‘master’ branch’ini gönderdik.

Bir sonraki dersimizde birden fazla kişi bir projede nasıl çalışır konusunu inceleyeceğiz.

Konu hakkında görüş ve sorularınızı yorum kısmından veya Soru & Cevap sitemizden sorabilirsiniz.

Bir sonraki derste görüşmek üzere…

Git derslerinin tamamı için tıklayınız.

30

Ömer Özkan

Genelde Java teknolojileri ile geliştirme yapar. Özgür ve açık kaynak yazılımlara meraklıdır. Boş zamanlarında gönüllü eğitimler verir. Onun için Clean Code, Test Driven Development gibi konular oldukça önemlidir.

6 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?