Özellikle açık kaynak ve/veya özgür yazılım geliştirmeye adım atan hemen herkesin bir şekilde duyduğu kavramlardan biridir Git. Bu alanlarda geliştirici olma gibi bir düşünceniz, bir hayaliniz varsa Git’i sadece duymuş olmanız yetmez, kullanmayı da çok iyi bilmelisiniz.

Bu yazıda da basitçe Git kullanımını sizlere aktarmaya çalışacağım. Her şeyden önce cevap verilmesi gereken önemli bir soru var, Git Nedir?

Git Nedir?

Tanım olarak söylemek gerekirse:

Git, yazılım geliştirme süreçlerinde kullanılan, hız odaklı, dağıtık çalışan bir sürüm kontrol ve kaynak kod yönetim sistemidir. İlk olarak Linux çekirdeği’nin geliştirilmesinde kullanılmak üzere 2005 yılında bizzat Linus Torvalds tarafından tasarlanıp geliştirilmiştir. (…)

Vikipedi

Bu tanımı biraz daha açalım. Bir yazılım geliştirirken yaptığınız her değişikliği aşama aşama yazabileceğiniz, yapılan değişiklikleri kolayca görebileceğiniz ve hatta hızlıca geri dönebileceğiniz, tek bir projede birden fazla kişiyle çalışmayı kolaylaştıran, kısacası sürüm takibini kolaylaştırarak yazılımcılara büyük faydalar sağlayan bir sistemdir. Git, yerel bir depoda çalışabileceği gibi çevrimiçi veya çevrimdışı uzak depolarda da çalışabilir. Günümüzde popüler olan GitHub ve GitLab, en çok kullanılan çevrimiçi Git servislerindendir. GitHub/GitLab ve Git birbiriyle karıştırılmamalıdır. Git bir sistem, GitHub ve GitLab ise birer servistir.

Başlayalım

Yukarıda Git’in ne olduğunu açıkladıktan sonra artık başlayabiliriz. İlk olarak yapmamız gereken şey ise tabii ki kurulum.

Kurulum

Pardus gibi Debian tabanlı Linux dağıtımlarına Git’i kurmak için uçbirim ortamını açıp aşağıdaki komutu girebilirsiniz.

sudo apt install git

Pisi Linux dağıtımını kullananlar ise hemen aşağıdaki komutu kullanarak sistemlerine Git’i kurabilirler.

sudo pisi it git

Bu komutlar diğer paket sistemlerini kullanan dağıtımlarda değişkenlik gösterebilir.

Kurulum tamamlandıktan sonra ise kurduğunuz versiyonu aşağıdaki komutu yazarak öğrenebilirsiniz.

git --version

İlk Yapılandırma

Kimliğinizi Git sistemine tanıtmak, ilk yapmanız gereken şeylerden biridir. Böylece geriye dönüp baktığınızda yapılan değişikliklerin kim tarafından yapılmış olduğu belli olur ki, bu son derece önemlidir. Sırasıyla aşağıdaki komutları uçbirime girerek bu aşamayı da tamamlayalım.

git config --global user.name "kullanici-adi"
git config --global user.email "eposta-adresi"

Örnek Kullanım:

git config --global user.name "prdsmehmetstc"
git config --global user.email "info@mehmetsutcu.com"

Kullanım

Öncelikle Git’i kullanmak istediğiniz dizine uçbirim arayüzü vasıtasıyla gitmelisiniz. Git komutlarını kullanırken çalışmak istediğiniz dizinden çalışmalı ve o dizinden çıkmamalısınız.

İstediğiniz dizine ulaştıktan sonra aşağıdaki komutu girmelisiniz.

git init

Eğer bu komutu girerken bulunduğunuz dizine dosya yöneticisinden bakarsanız içinin boş olduğunu görebilirsiniz, eğer gizli dosyaları göster seçeneğini işaretlemediyseniz tabii. Aslında klasör boş değil, içinde .git adlı bir klasör oluştu. Artık o klasör bir “Git Deposu”.

Klasörde yani depoda çalışmalarınızı yaptınız, dosyalarınızı oluşturdunuz. Şimdi ise aşağıdaki komutu girerek oluşturduğunuz dosyaları depoya ekleme vakti.

git add .

Yukarıdaki komutta görüldüğü gibi git add . yazarsanız bütün dosyalar geçiş bölgesine alınacaktır. Sadece tek bir dosyayı almak istiyorsanız ise git add dosyaAdi şeklinde; bir dizini içindekilerle beraber almak istiyorsanız git add dizinAdi yazabilirsiniz.

Yukarıdaki komutla bütün işler bitmiyor, şimdi geçiş bölgesine aldığınız dosyaları “commit”lemeniz, yani sisteme işlemeniz gerekiyor. Bunun için ise aşağıdaki komutu girin.

git commit -m "Açıklama"

Artık dosyalar sisteme işlendi. Şimdi diğer faydalı ve bilinmesi gereken komutlara geçelim.

git log

Bu komut ile commit’leri görebilir, şu ana kadar ne zaman ne yapılmış hepsini görebilirsiniz.

git status

Bu komut size projenizin durumunu gösterir. Commit’lenecek bir dosya var mı, silinmiş veya eklenmemiş bir dosya var mı gibi bilgileri size gösterir.

git diff

Bu komut size dosyalarınızda yapılmış olan bir değişikliği satır satır gösterir. Değişiklikleri eğer ekleme yapıldıysa yeşil renk ve (+) işaretiyle, çıkarma yapıldıysa kırmızı renk ve (-) işaretiyle gösterir. Yapılan değişiklikleri uygulamak için tekrar commit etmeniz gerekir. Ayrıca geçiş bölgesi ve depo arasındaki farklılıkları görmek için ise git diff --staged komutu kullanılır.

git rm

Git’te dosya silmek için iki yöntem vardır. Birisi elle silme, diğeri ise git komutu kullanarak. git rm dosyaAdi yazarsanız ilgili dosyayı, git rm -r dizinAdi/ yazarsanız da ilgili dizini ve içindekileri siler. Bu işlemin ardından commit işlemini tekrarlamanız gerekir.

git mv

Bu komut ile dosyaların isimlerini değiştirebilir, veya taşıyabilirsiniz. Dosya ismini değiştirmek için git mv dosyaAdi yeniDosyaAdi şeklinde, dosyaları taşımak için ise git mv dosyaAdi dizinAdi/ şeklinde yazabilirsiniz. Bu işlemden sonra da tabii ki tekrar commit’lemelisiniz.

Yapılan değişiklikleri geri alma

Git projelerinde yapılan değişikliklerin geri alınması, dosyanın bulunduğu bölgeye göre değişkenlik gösterir. Geçiş bölgesinde farklı, çalışma alanında farklı işlem yapılır.

Çalışma dizininde geri alma

Çalışma dizinindeki bir dosyada yapılan değişikliği geri almak istiyorsanız aşağıdaki komutu girmelisiniz.

git checkout -- dosyaAdi

Geçiş bölgesinde geri alma

Geçiş bölgesinde bulunan bir dosyada yapılan değişikliği geri almak istiyorsanız sırasıyla aşağıdaki komutları girmelisiniz.

git reset HEAD dosyaAdi
git checkout -- dosyaAdi

Belirli bir commit’e tamamen geri dönüş yapmak istiyorsanız aşağıdaki komutu girmelisiniz. 

git checkout 95a6e33d877afbfe6e43419996cda613bdd4936a -- .

Yukarıda kalın olarak işaretlenmiş kısım ilgili commit’in ID’sidir. Bunu git log komutu ile öğrenebilirsiniz. Eğer o commit’teki yalnızca bir dosyayı geri döndürmek istiyorsanız . yerine dosya adını yazmanız yeterli olacaktır. Bu durumdan sonra değişikliklerin uygulanması için tekrar commit etmeniz gerekir.

Eğer yerelde çalışmak yerine GitHub veya GitLab’te çalışmak istiyorsanız bilmeniz gereken birkaç şey daha var.

GitHub/GitLab Nedir?

GitHub ve GitLab, Git sürüm kontrol sistemini barındıran bulut tabanlı hizmetlerdir. Aynı zamanda yazdığınız kodları ve yazılım projelerini depolayabileceğiniz hizmetlerdir.

GitHub ile GitLab Arasındaki Farklar

GitHub, yalnızca GitHub sunucularında çalışmanıza izin verirken GitLab, kendi sunucunuza kurarak veya GitLab sunucularında kullanabilmenize olanak tanır. GitHub açık kaynaklı projelerin barındırılmasını desteklese de, tamamen açık kaynaklı değildir. Özel/gizli depolar oluşturmak için ekstra ücret ödemeniz gerekir.

GitHub’da şu anda 3 adede kadar özel/gizli depo oluşturmak herkes için ücretsiz, ancak bunun üstüne çıkmak için ücret ödemelisiniz.. GitLab’te ise özel depo oluşturmak sınırsız ve tamamen ücretsiz. GitLab’te ayrıca CI/CD hizmeti ücretsiz olarak sunulur. GitHub’ta ise bu özellik 3. parti uygulamalarla sağlanabilir.

GitHub/GitLab Nasıl Kullanılır?

Kullanımları hemen hemen aynı olmakla birlikte yalnızca arayüzsel farklılıklar bulunmaktadır. Bu yazıda GitLab üzerinden anlatım yapılacaktır.

İlk olarak yapmanız gereken şey, tabii ki kullanacağınız servise üye olmaktır. 🙂 Daha sonra ise bir depo (repository) oluşturmaktır. Bunun için üst kısımda bulunan + simgesine tıklayın ve “New repository” seçeneğine tıklayın veya sağ tarafta bulunan “Yeni proje” düğmesine basın.

Ardından, gelen sayfada “Boş proje oluştur” seçeneğine tıklayarak bir sonraki aşamaya geçin. Gelen sayfada boşlukları kendinize uygun doldurmaya başlayın. Bu sayfa deponuzun adını, açıklamasını, herkes tarafından erişilebilir (Public) veya sadece izin verilenlerin erişebileceği (Private) bir depo mu olsun gibi bilgileri girebileceğiniz bir sayfadır. Bu sayfadaki ayarlamalar tamamen size kalmış.  

Artık deponuzu oluşturdunuz. Şimdi ise biraz daha detaya inelim.

Branch (Dal) Oluşturma

Branch’lar yani dallar, ana depoya dokunmadan üzerinde dilediğinizce değişiklik yapabileceğiniz bir iç depo oluşturmanıza yarar. Bir dal oluşturduğunuzda ana dalınızın bir kopyasını alır. Daha sonra işiniz bittiğinde oluşturduğunuz dalı ana dalınız ile birleştirebilirsiniz. Yeni bir dal oluşturmak için deponuzdaki main veya master yazan yerin yanında bulunan + düğmesine basın ve “Yeni dal” seçeneğini seçin.

Çekme İsteği (Pull Request) ve Birleştirme İsteği Oluşturma (Merge Request)

Pull Request ve Merge Request, bir dalda yaptığınız değişikliği başka bir dala aktarmayı talep etmenizi sağlar. Merge, yani birleştirme işlemi de istekte yapılan değişiklikleri dala aktarırsınız. GitHub’ta Pull Request olarak, GitLab’te Merge Request olarak karşılaşacağınız bu iki kavram aynı amaçla ve aynı şekilde kullanılır.

İstek oluşturmak için ilk olarak deponuzun bulunduğu sayfanın üst kısmında bulunan “Birleştirme isteği oluştur” düğmesine basmalısınız. İlgili alanları doldurduktan sonra birleştirme isteğini gönderebilirsiniz. Birleştirme işlemi içinse ilgili isteğe gelip sayfanın sonunda bulunan “Merge” düğmesine basmalısınız.

Komutlar

Şimdi ise Git komutlarıyla bu işlemleri nasıl yapabileceğimizi görelim.

git remote

Bu komut uzak depolara bağlanmanızı ve orada çalışmanızı sağlar. git remote add takmaAd depoAdresi şeklinde kullanılır. git remote yazarsanız da şu anda hangi uzak depoya bağlı olduğunuzu gösterir. 

Örnek Kullanım: git remote add https://gitlab.com/prdsmehmetstc/test-project.git

git branch

Bu komut dalları yönetmenizi sağlar. git branch dalAdi şeklinde yazarak yeni bir dal oluşturabilirsiniz. Oluşturduğunuz dala geçiş yapmak için ise git checkout dalAdi yazmalısınız. git branch -d dalAdi yazarak oluşturmuş olduğunuz dalı silebilirsiniz.

git branch --all yazarak oluşturulan bütün dalları listeleyebilirsiniz. Dallar arası farkları görmek istiyorsanız, git diff dal1 dal2 yazabilirsiniz. git merge dalAdi yazarak dalları birleştirebilirsiniz.

git push

Bu komut ile yerelde bulunan commit’leri uzak depoya aktarabilirsiniz. Kullanımı git push uzakDepoTakmaAdi uzakDepoBranch şeklindedir. 

git stash

Dallar arası geçişler yapmanız gerekiyorsa ve halihazırda çalışıyor olduğunuz dalda yaptığınız ancak henüz commit’lememiş olduğunuz değişiklikler varsa ve o yaptığınız değişikliklerin kaybolmasını istemiyorsanız bu komutu kullanmalısınız. git stash list yazarak geçici olarak kaydedilen değişiklikleri görebilir, değiştirdiğiniz dalda işinizi bitirip eski dalınıza geri döndüğünüzde git stash pop yazarak kaldığınız yerden devam edebilirsiniz.

git clone

Bu komut, yerelinizdeki veya uzak bir depoyu kopyalamanızı sağlar. git clone /depoDiziniYolu şeklinde yazarak yerelinizde bulunan depoyu, git kullaniciadi@host:kullaniciadi/depoAdi.git (Örnek Kullanım: git clone git@gitlab.com:prdsmehmetstc/test-project.git) şeklinde yazarak da uzak depoyu kopyalayabilirsiniz.

git pull

Bu komut uzak depodaki -varsa- değişiklikleri yerel depoya çekerek yerel depoyu güncellemenizi sağlar.

Faydalanabileceğinizi düşündüğüm ekstra kaynakları da aşağıda listeliyorum. Kaynakların hepsinin İngilizce olduğunu baştan söyleyeyim. 🙂

Bu yazının özgün halleri Pardus Topluluk Portalı gonullu.pardus.org.tr için yazılan burada ve burada bulunan yazılardır.

Mehmet SÜTCÜ – prdsmehmetstc

Mehmet SÜTCÜ

Pisi Linux Tasarım Ekip Lideri, Özgür Yazılımcı, Teknik Yazar, Maker, Elektronikçi ve Eğitmen. Küçüklükten zehri almış sıkı bir Linux kullanıcısı. @prdsmehmetstc kullanıcı adı ile bilinir ve tanınır. 2021 yılı itibariyle Pardus Topluluk Yöneticisi görevini üstlenmekte.