4 Eylül 2017 Pazartesi

Git server ve gitosis.


Bir önceki yazılarımda versiyon kontrol sisteminin ne olduğundan ve git'in bu sistemdeki rolünden bahsedip bi kaç temel git komutunu siz değerli okuyucularıma aktarmıştım.Bu yazımda ise bir linux tabanlı server kurulumunun bir git server'a nasıl evrilebileceğinden ve gitosis server arayüzünden bahsedeceğim.git mimarisine göre bütün projeler bir repository içerisinde bulunmak zorunda.Repository ise içerisinde git config ve log dosyları bulunan bir dizine verilen isimdi.Bir repository başlatmak bir dizin açıp içerisinde git init --bare komutunu yazmak kadar basit.Bu komut yazıldığında dizin içerisinde gerekli dosylar oluşturulur ve bu dosyalar sayesinde repository'de pull push vb. işlemler gerçekleştirilebilir.bir git repository'sini kurmak görüldüğü üzere bu denli basit bir işken , kurulu repository'e erişim yönetimi yapmaksa bir o kadar zor bir iş.Tek kullanıcılı server'da commitleri yapanların kimliklerinin ayrımını yapmak imkansız,çok kullanıcılı bir server'da ise repository erişim ayarlarını ayarlamak zor.Ayrıca yetkilendirme gibi bir kavram yok örneğin istediğiniz kullanıcılara pull,push hakkı verip istemediklerinizden pull,push hakkını alamıyorsunuz.İşte bu ve buna eklenebilecek bir çok eksiklikten ötürü gitosis isimli  proje başlatılmış.Bu proje ssh ile sunucu arasında bir katman oluşturup kullanıcıların sunucuya doğrudan ssh ile bağlanmasını engelleyip kendi izin politikaları çerçevesinde bağlanmalarını sağlıyor.Kimlik tespiti için basit bir sistem kullanıyor.Gitosis kurulumu yapıldığında otamatik olarak bir gitosis-admin dizini oluşturuyor.Bu dizin içerisindeki keys dizinine ssh public ya da private key'lerinizi yerleştiriyor ve eşi olan diğer key ile sistemde kimlik doğrulaması yapabiliyorsunuz.Keylerin isimlerini kullanarak  gitosis.conf dosyasına yazacağınız politikalara göre kullanıcıların hangi repository'lerde hangi haklara sahip olacağını belirleyebiliyorsunuz.Yeni bir repo oluşturulacağı vakit gitosis-admin reposuna erişim hakkına sahip olan kullanıcı gitosis.conf dosyasını düzenleyerek önce politikaları ayarlıyor sonrasında ise repository'i başlatmak isteyen kullanıcı aynı isimde init yaptığı lokal repository'sini server'a push'luyor.Pushladığı anda sunucuda repository oluşturulmuş oluyor.Yani sistem sahibinin her seferinde gidip sunucuda yeni dizin açıp git init --bare komutunu vermesi gerekmiyor.Politika yönetimi standartlara uygun olup gruplara ve bireylere özel yetki atamaları yapılabiliyor.Bunların yanısıra gitweb ile de uyumlu çalışması, sunucuya ait bilgileri görselleştirmek için gitlab vb. ekstra bir arayüz kullanma ihtiyacını ortadan kaldırıyor.Bir sonraki yazımda kurulumdan ve kurulum sırasındaki bazı tuzaklardan bahsedicem.Gitmeden önce projeye ait github linkini buraya ilişitiriyorum.İyi çalışmalar.
https://github.com/tv42/gitosis

git init ve git init --bare arasındaki fark

Bu yazımda genel olarak aralarındaki farkın anlaşılmakta zorlanıldığı iki git komutunu açıklamaya çalışacağım.

git init : Bu komut bir dizini çalışma dizini haline getirip bu dizinde bir git repository'si oluşturur.Bu repository sayesinde yerelde yapmış olduğunuz commit'leri takip edebilir,bir repository server'a bu commitleri push'layabilirsiniz.Komutu verdiğiniz dizin içerisinde .git isimli bir dizin oluşur.Bu dizin içerisinde repository'e ait config ve log dosyaları bulunur.Server'a push yaparken bu dosyalar kullanılır.Diff vb. komutlar bu dosyalar kullanılarak çalıştırılır.



git init --bare : Bu komut aynı diğer komut gibi bir git repository'si oluşturur. İlk farkı repository'nin oluştuğu dizin bir çalışma dizini değildir yani üzerinde değişiklikler yapılmaz(yapılabilir ancak yapılmamalı).Yine diğer komut gibi config dosyalarını oluşturur ancak diğerindeki gibi .git isimli bir dizin oluşturmaz.B
u dosyalar direkt dizin içerisinde oluşturulur.Bu komutla oluşturulan repository'lere pull ve push işlemleri ile değişiklikler yapılır.Doğrudan dizin üzerinde değişiklikler yapılmaz.Bu özelliklerden anlaşılabileceği üzere komutun amacı, sunucuda merkezi git repository'si oluşturmaktır.

Konuyu bir örnekle netleştirmek gerekirse ;

ilk komut gitkraken ya da source tree vb. gibi bir programda lokal git reposu oluşturduğunuzda çalışır.
ikinci komut ise github ya da gitlab vb. gibi bir uzak repository sağlayıcısında bir repository oluşturduğunuzda bu sağlayıcıların server'larında çalışır.

Aşağıdaki görsel ile konunun daha da net anlaşılacağını umuyorum ;