Git Sürüm Kontrol Sistemi

Benzer belgeler
Versiyon Kontrol Sistemleri

DOSYA NEDİR? Verilerin HDD de saklanması. Verilerin HDD de saklanması DOSYA SİSTEMİ NEDİR?

Çekirdek Nedir? Ne yapar?

Dosya, disk üzerinde depolanmış verilerin bütününe verilen isimdir. İşletim sistemi genel olarak iki çeşit dosya içerir.

Bilgisayar İşletim Sistemleri BLG 312

B-Tree Dosya Sistemi (BTRFS)

BİLGİ İŞLEM DERS 1. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

Linux işletim sistemlerinde dosya hiyerarşisinde en üstte bulunan dizindir. Diğer bütün dizinler kök dizinin altında bulunur.

SparkleShare. Çağrı Emer. Ekim, 2011

Acarix CD-DVD/Ağ üzerinden çalışan GNU/Linux Dağıtımı

SUBVERSION VE TRAC A GİRİŞ

I. Oturum: GNU/LINUX A GİRİŞ

MongoDB. Doğan Aydın. Eylül, 2011

Dosya sistemi (File system), dosyaların hard disk üzerinde nasıl yerleşeceğini ayarlayan bir sistemdir. Diğer bir tanıma göre dosya sistemi, bir

Linux Çekirdek Geliştirme Süreci

Temel Linux Eğitimi 1., 2. ve 3. Bölümler

Samsun Çocuk Hizmetleri İ l Koordinasyon Sekretarya Birimi

Subversion Sürüm Kontrol Sistemi Kurulumu ve Apache Yapılandırması. Çağrı Emer

Finans Dünyasında Linux ve Özgür Yazılımlar

2-Veritabanı Yönetim Sistemleri/ Temel Kavramlar

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Kurumsal Masaüstü ve Sunucularda Pardus

Giriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir

Program Kurulum. Turquaz Muhasebe. İçindekiler

AHTAPOT Merkezi Güvenlik Duvarı Yönetim Sistemi Kontrol Paneli

İŞLETİM SİSTEMLERİ. (Operating Systems)

LİNUX. Dosyalar ve dizinler

JAVA RMI ve Hibernate teknolojileri kullanılarak çok amaçlı bir yazılım altyapısı hazırlanması

Subversion. KimTutarBizi bilgi takımı adına, Ahmet KAKICI

Özgür Yazılım ve Pardus. Erkan Tekman TÜBİTAK UEKAE 7 Aralık 2006

Spring Giriş Eğitimi

Hızlı Başlangıç Kılavuzu

Veri Tabanı Yönetim Sistemleri Bölüm - 3

Web Servis-Web Sitesi Bağlantısı

Tekir (Ön Muhasebe Yazılımı)

Basit Mimari, Katmanlı Mimari ve doğrudan çalıştırma olarak üçe ayrılır.

08217 Internet Programcılığı I Internet Programming I

LİNUX İŞLETİM SİSTEMİNİN KÖPRÜ MODUNDA ÇALIŞTIRILMASI VE GÜVENLİK DUVARI İŞLEMLERİ

Bilindik engelleme yöntemlerinin dışında olan, kurumsal web filitreleri nasıl aşılır?

Adli Analiz İşlemlerine Başlamak

Linux İşletim Sistemleri. Eren BAŞTÜRK.

Vpn nedir? VPN Nedir?

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

Apache üzerinden Red Hat 5 yüklenmesi

ASP.NET TEMELLERİ. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

Bilgisayar Yazılımları

Giriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var.

Kabuk Programlama (Bash)

Nasıl Pardus Geliştiricisi Olunur?

Bilgi ve iletişim teknolojileri Dersi Ders Notlarıdır?

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ

GNU/Linux'un Tarihi ve Önemi

Pardus. S.Çağlar Onur, 21 Aralık Pardus Projesi [TÜBİTAK / UEKAE] Linux Kullanıcıları Derneği

Linux İşletim Sistemi Tanıtımı

Pardus. A. Murat Eren, 25 Mart Pardus Geliştiricisi. Pardus Yenilikleri Sık Sorulan Sorular

ProFTPD FTP Sunucusu. Devrim GÜNDÜZ. TR.NET Sistem Destek Uzmanı.

JSON Korsanlığı. Mesut Timur, Şubat 2010, WGT E-Dergi 4. Sayı

Servis olarak Altyapı

PHP ile İnternet Programlama

Kaynak Kodları GitHub Üzerinden Yönetilen ve Debian Depolarında Bulunan Yazılımların Geliştirme İstatistikleri. Dilara Koca

Python Programlama Dili

BitTorrent İstemci Kullanımı

01 WASTE Windows Linux ve macos (Sınırlı İşlevsellik)

Kurumsal Güvenlik ve Web Filtreleme

Ağ Üzerinde MATLAB kurulum rehberi (Sunucu makine)

18/09/2013. Sayın Av. Kemal Yener SARAÇOĞLU,

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

NFS (Network File System) & NIS (Network Information System) H. Coşkun Gündüz cgunduz@cs.bilgi.edu.tr

Y. Nasuh Erturan- Nergis Gürel Rafet Çevik Prof. Dr. Kürşat Çağıltay

Temel Kavramlar-2. Aşağıda depolama aygıtlarının kapasitelerini inceleyebilirsiniz.


Virtual Router Redundancy Protocol (VRRP)

Kurumsal Güvenlik ve Web Filtreleme

Bilgi ve Olay Yönetim Sistemi

1.1. Yazılım Geliştirme Süreci

DNS Nedir? HİKMET TÜYSÜZ

Gitlab ile Web Tabanlı Git Deposu Yönetimi

Trickbot Zararlı Yazılımı İnceleme Raporu

TÜBİTAK UEKAE ULUSAL ELEKTRONİK ve KRİPTOLOJİ ARAŞTIRMA ENSTİTÜSÜ

Mobil Cihazlardan Web Servis Sunumu

Balon & Banka Teslim tarihi: 17 Kasım 2008

S.O.S Günışığı Lojistik Saha Operasyon Sistemi

EYLÜL 2012 İŞLETİM SİSTEMLERİ. Enformatik Bölümü

Fstab Rehberi. Ceren Çalıcı. Nisan, 2012

Linux Ubuntu Kurulumu

Hoş Geldiniz! Yandex.Disk aracılığıyla neler yapabileceğiniz konusunda açıklamaları bu dosyada bulabilirsiniz:

Google Dokümanları Kullanmak

Bilgi ve Olay Yönetim Sistemi

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

İşletim Sistemleri; İÇERİK. Yazılım BİLGİ TEKNOLOJİLERİ VE UYGULAMALARI Yazılım Türleri

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

Açık Kaynak Kodlu Yazılım Nedir?

İZMİR EKONOMİ ÜNİVERSİTESİ. Central Disc System Merkezi Disk Sistemi

LKD Kendi İlacını Kullanıyor

Google Chrome Kullanıyorsanız; Microsoft Internet Explorer Kullanıyorsanız;

Veri Tabanı Yönetim Sistemleri Bölüm - 02

man komut man ls (ls komutu hakkında bilgi verir.) man pwd (pwd komutu hakkında bilgi verir.)

Linux Dosya ve Dizin Yapısı

MOBIL UYGULAMA GELIŞTIRME

Transkript:

Git Sürüm Kontrol Sistemi Çağrı Emer Eylül, 2011

İçindekiler 1 Giriş.................................................... 2 2 Blob mu? O da ne?............................................ 3 3 Tree Nesnesi............................................... 4 4 Commit ve Tag ler............................................ 5 5 Git, SVN e karşı.............................................. 6 1

1 Giriş Daha önceki yazımda Subversion dan bahsetmiş ve Git e ileriki bir zamanda değineceğimi söylemiştim. Bu yazıda Git in temel yapısı ve Subversion ile arasındaki farklardan bahsetmeye çalışacağım. 2005 yılında Linus Torvalds tarafından başlatılan ve geçtiğimiz yıllar içerisinde de oldukça gelişen açık kaynak Git sürüm kontrol sistemi, Linux Çekirdeği, Perl, Gnome, PostgreSQL ve Debian gibi pekçok büyük projenin geliştirilmesinde kullanılıyor. Şimdi merkezi şekilde çalışan Subversion ın aksine, dağıtık bir sürüm kontrol sistemi olan Git in nasıl çalıştığına bakalım. 2

2 Blob mu? O da ne? Git, Subversion gibi dosyaları takip etmekten ziyade içeriği takip eder ve içeriğin SHA1 toplamını veri adı olarak kullanır. Adreslenebilir içerik olarak adlandırılan bu kavram, nesnenin tuttuğu ham veri dışında başka bir şeyden haberdar olmamasını sağladığından, nesnelere verilen referanslar tek yönlüdür. Yani blob adı verilen nesne bir dosyayı ve dosyanın içinde ne olduğunu tutmaktansa direkt olarak dosya içeriğini alır ve SHA1 toplamını isim olarak kullanır. Böylelikle, kriptografik açıdan güçlü olarak addedilen SHA1 algoritması sayesinde her değişikliğin farklı bir isime sahip olacağından emin olunur. Blobları, üzerinde değişiklik yaptığımız belgelere benzetirsek çok da yanılmış sayılmayız. Yalnız şunu eklemek gerekir ki bu benzetme yalnızca kavramın daha rahat anlaşılması için kullanılmıştır. Bloblar aslında geleneksel anlamda bizim bildiğimiz belgeler değillerdir. 3

3 Tree Nesnesi Blobların içinde tutulduğu dizinler Git altında tree olarak adlandırılırlar. Aynı blob nesneleri gibi, tree nesneleri de sadece tuttukları blobların adlarını bilirler. Tree nesneleri de SHA1 toplamları alındığından, Subversion da olanın aksine tuttukları verinin SHA1 toplamı değiştiğinde değişirler. Tree leri bilgisayarımız içinde bulunan dizinlere benzetebiliriz. Yine bloblarda olduğu gibi bu benzetme kavramın sadece daha iyi anlaşılması için kullanılmıştır. SHA1 toplamlarının alınması birbirlerine oldukça benzeyen fakat küçük değişikliklere sahip olan iki adet büyük boyutlu dosya için ilk başta etkin bir yöntem olarak görünmeyebilir. Fakat Git, bu işi dosya arasındaki farklılıkları tutan delta lar ile optimize eder ve oldukça yer tasarrufu sağlar. 4

4 Commit ve Tag ler Commit adı verilen nesne bir depoya yapılan değişikliğin tutulduğu veriden ibarettir. Commit ler aslında tam olarak yapılan değişikliklerin listesini tutmazlar gerçi bunu yapmaları da gerekmez çünkü bir commit ile, içinde bulunduğu tree ve değişiklik yapılan dosya karşılaştırılarak değişiklikler kolayca hesaplanabilir. Commit i geleneksel bir sistemde en son değişikliği kimin nerede yaptığını tutan bilgi olarak düşünebiliriz. 1 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Git içinde bulundurduğu her nesneyi 40 karakterden oluşan SHA1 toplamı ile ifade ettiğinden dolayı bir dosya ismini okumak insanlar için oldukça zordur. Örneğin, yukarıdaki sayılar aslında Linus Torvalds ın, Linux Çekirdeği ne Git üzerinden yaptığı ilk commit i temsil etmektedir. Dolayısıyla bu problemin çözümü adına tag denen etiketleri kullanıma sunmuştur. Tag ler bir nesneyi işaret eden kullanıcı dostu isimlerden oluşur. Bu tip nesneler için de dizinlerimizi tuttuğumuz kısımlar üzerine yapıştırdığımız ufak hatırlatıcı notları verebiliriz. 5

5 Git, SVN e karşı Git in temel mantığını anladıktan sonra sıra şimdi SVN ile arasındaki farklara geldi. Yazının başında da belirttiğimiz üzere bu iki sistemin en büyük farkı birinin dağıtık birinin ise merkezi bir sistem olmasıdır. Git ile çalışmak için her seferinde ana sunucuya bağlanmak zorunda kalmazsanız. Dağıtık olmasının güzel yanı budur. Zira depoyu bir kere yerelinize aldığınız zaman hiç ana depoya bağlanmaya gerek duymadan yerelde istediğiniz gibi çalışmanıza olanak verir. Subversion ise merkezi bir sistem olduğundan çalışmak için ağ bağlantısına ihtiyacınız vardır. Günümüzde sürekli ağ bağlantısına sahip olmak büyük bir problem teşkil etmeyebilir. Fakat çalıştıracağınız her komutun ağ erişimine ihtiyaç duyması bekleme zamanı olarak size geri dönecektir. Bu açıdan bakıldığında Git, Subversion a göre oldukça avantajlıdır. Yine merkezi bir sistem olmadığından Git üzerinde çalışırken veri kaybetme ihtimalimiz Subversion da çalışırkenkinden daha azdır. Zira dağıtık olması nedeniyle ana deponun kopyaları pek çok istemcide bulunur ve ana depoya zarar gelmesi halinde diğer istemcilerden depo kurtarılabilir. Öte yandan Subversion merkezi bir depoda tutulduğundan, herhangi bir hatada veri kazanımı oldukça zordur ve tutulan yedeklerden geri dönülmesini gerektirebileceğinden son yapılan değişikliklerin tamamen kaybolmasına yol açabilir. İki sistemin disk kullanımına geldiğimizde avantajın yine Git ten yana olduğunu görürüz. Subversion her verinizin iki kopyasını tutar. Biri çalıştığınız biri de sunucunuza yaptığınız commit leri bildirmek için kullanılan referans dosyalardır. Dolayısıyla bu diskte olması gerektiğinden fazla yer kaplamasına neden olur. Sayısal bir örnek verecek olursak Mozilla vakfının on senelik çalışmalarının tutulduğu Subversion deposu 12GB ın üzerinde yer kaplarken, aynı deponun Git eşleniği 420MB kadar yer kaplamaktadır. Arada otuz kata yakın bir fark vardır. Disk kullanımı bu haldeyken Subversion ın aslında bir depo içindeki herhangi bir dizini yerelinize indirmeye olanak sağlaması görece avantajdır. Yani yukarıdaki örnek için konuşursak Firefox 3.6 nın kodlarını incelemek için 12GB veriyi yerelinize çekmek zorunda değilsinizdir. İhtiyacınız olanı indirir ve işinizi görürsünüz. Öte yandan Git deposu ile çalışacak olursanız Mozilla nın 420MB lik tüm verişini indirmeniz gerekir. Görüldüğü gibi aslında iki sistem burada birbirini dengelemektedir. Birini kısmen çekebilmeniz, diğerinin ise tamamını çekmek zorunda olmanıza rağmen depo boyutunun küçük olması avantajlardır. Eğer sahipli kod yazıyorsanız Git yararınıza olmayabilir. Zira dağıtık bir sistem olduğundan kullanıcılar bir kere deponun kopyasını aldıklarında isterlerse bunu başkalarıyla paylaşabilirler. Subversion böyle değildir. Herkes merkezi bir depoda çalışmak durumunda olduğundan depoya kimin ne zaman nasıl erişeceği bellidir ve kodun istemsizce dağıtılması konusunda avantaj sağlar. Öte yandan merkezi depolar, yaptığınız her değişikliğin herkes tarafından görülmeden istediğiniz birkaç kişiyle çalışmanızı sağlamak için ekstra erişim kontrol sistemlerine gerek duyarken Git için bir arkadaşınızla istediğiniz commit leri paylaştığınız bir ortamda ana depoya commit yapmanıza dolaşıyla geliştirmenin erken safhalarındaki kısımları herkesin görmesine izin vermenize gerek kalmaz. Bu aslında yaptığınız geliştirmeyi olgunlaştırabileceğiniz bir alan demektir. Dolayısıyla bir projenin farklı kısımlarında çalışan takımlara sahip olan kullanıcılar için Git kısmen daha avantajlıdır diyebiliriz. Git i öğrenmesi Subversion a göre biraz daha zordur denilebilir. Fakat öğrenme süreci tamamlandıktan sonra Git in kodu dallara ayırma ve birleştirme konusunda olan eksikliği öğrenmek için geçirilen süreyi tolare edecektir. Subversion üzerinde de kodu dallandırma ve istendiğinde birleştirme işlemleri yapılabilse de bu Git e göre oldukça hantal kalmakta ve uzaktaki bir sunucuda asıl kodun kopyaları çıkarılarak yapılmaktadır. Linux altında Git oldukça performanslı çalışmaktadır fakat diğer platformlar için aynı şeyi söylemek pek doğru olmayacaktır. Öte yandan Subversion her platform altında sunucu performansına bağlı olarak öldükça iyi çalışmaktadır. Bunu Subversion projesinin Git ten daha uzun süredir ortada olmasına bağlamak yanlış olmayacaktır. Zira aynı şey görsel araçlar için de geçerlidir. Subversion ın daha uzun süredir kullanılıyor olması görsel geliştirme araçlarının Subversion için daha gelişmiş olmasını mantıklı kılar. Subversion üzerinde geri ve ileriye doğru gitmek dosya versiyonları 1, 2, 3 gibi değiştiğinden oldukça kolay ve içgüdüseldir. Git için bu böyle değildir çünkü isimlendirme için başka bir altyapı kullanır. Öte yandan Git için GitHub gibi sosyal bir kodlama platformu mevcut ve çeşitli kullanımlar için ücretsizken Subversion için bildiğim kadarıyla böyle bir organizasyon ya da şirket yoktur. Dolayısıyla Subversion kullanmak için kendi sunucunuzu kurmanız gerekir. Yazının geneline bakıldığında, yazarın Git in daha iyi bir sistem olduğunu düşündüğü yanılgısına kapılabilinir. Halbuki durum böyle değildir. Yukarıda verilenler her kaynakta bulabileceğiniz genel geçer doğruları ifade etmektedir. Şahsi 6

görüşlerim yazının dışında tutulmuştur. Ayrıca bu satırların yazarı olarak ben, Git i öğrenmek için çok tembel olduğumu bahane ederek Subversion kullanmaktayımdır :) Dolayısıyla kullanacağınız sürüm kontrol sistemini tamamen kendi ihtiyaçlarınız ve öğrenmek için üzerine ayıracağınız vakit belirleyecektir. İki sistemi de kullanan dünya çapında oldukça büyük projeler olması da zaten bu savı destekler niteliktedir. 7