Ö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. 🙂
- GitHub’ın yayınladığı Git ve GitHub kullanımına yönelik rehberler.
- GitLab’in yayınladığı Git ve GitLab kullanımına yönelik rehberler.
- GitHub’ın yayınladığı Git Kopya Kağıdı (Git Cheat Sheet)
- Git geliştiricileri tarafından yayınlanan rehber yazıları.
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