Yazılım Genel

Detaylı Git Proje Yönetimi Kullanmanız Için Gerekli Olan Git Comutları ve Anlatımları

Evet git i ilk kez duydunuz ve araştırma yapıyorsanız,  önce git i anlamak için bu makalemi de okumanızda fayda var.

Konumuza geri dönecek olursak, bir repoya sahipsiniz veya herkese açık bir repoyu kullanmak istiyorsanız, bu iki durumda da projeyi locale çekmeniz gerekir ve bu işlem için birkaç yöntem mevcut. Ama bundan önce Git’i yapılandırmanız ve yapılması gerekenler ile başlayıp yavaştan geçiş yapacağım.

 

1-  Git ‘in kullanımı için gerekli olan yazılım (lar).

Aslında tüm işletim sistemleri için bir çok kullanımı vardır, ancak bunların en basit yada en çok kullanımlarına göre bir kaç örnek vererek anlatalım.

a- Linux ve Mac Bilgisayarlarda Git

Linux ve MacOs larda bu özellik ön tanımlı gelmekte.Terminal ortamından direk erişe bilirsiniz, yönetebilirsiniz Git servisini bi yoklamak isterseniz, kontrol etmek için;

 git --version

b- Windows Bilgisayarlarda Git

Windows ortamında, sanal bir terminal yaratan, özel bir git yazılımı mevcuttur. Yazılımcı bir abim onu ilk gördüğünde verdiği tepkiyi hui unutamam, Tam bir şeytan şaplağı, yıkıldım  kapat kapat. :) Bu yazılıma direk buradan ulaşabilirsiniz.

Kurulumdan sonra, sizlerde artık bir linux terminali gibi bir arayüz ile, git projelerinizi yönete bileceksiniz. Kontrol etmek için sizde; 

git --version

Not : Bu aşamadan sonra, yazının geri kalanında,  terminal dediğimde, Windows’taki bu uygulama da geçerlidir.

Bunların haricinde kullandığımız yazım editörleri veya ide ler de, eklenti olarak veya ön tanımlı olarak, Git kontrol sistemini yönetmeniz için, işlemi kolaylaştıran yazılımlar mevcuttur. Belli kısa yollar veya menülerden erişimler ile projenizi güncel tutabilirsiniz.

2-  Git ‘in Yapılandırılması

Git ‘e bir imza bırakmak her zaman iyidir. Bunun için Mail ve kullanıcı adımızı tanımlamamızı zaten ilk gönderimlerde uyarılar ile belirtmektedir. Bu tanımlamayı yapmak için terminal kullanacağız.

Git Kullanıcı Adı Tanımlama : 

git config --global user.name "Onur TEZ"

 

Git E-Posta Tanımlama :

git config --global user.email "[email protected]"

 

Bu tanımları görmek için ise aynı komutu parametre girmeden çalıştırabiliriz.

Öncelikle işin basit kısmı ile, sistemin yapısını anlatmak için, en çok kullanılan git servislerinden biri olan github tan örnek vererek anlatmaya çalışacağım. Günün sonunda en temel kodlar ile git sistemini kullanmış olacağız.

 

Örnek Repo https://github.com/onurtez/PhpDersler. Bu link benim zaman bulup Php hakkında yazdığım makalelerin, çalışır hallerini yayınladığım, Php Dersleri adlı bir repo. Sayfa herkesin kullanımına açıktır. 

GitHub

Bu projeyi klonlamak için bir çok yöntem vardır, Bunların en temili Http isteği ile Klonlama ve SSH ile klonlama diyebiliriz. GitHub gibi uygulamalar zaten bu ikisini kullanmanız için sizi ilk başlarda yönlendirmeler yapmaktadır ama ben inceden değişerek devam edeceğim.

 

Git Fork nedir ? Git Fork ne işe yarar?

Git fork ‘u (çatal) kullanmak için iki temel etmen vardır.

 

  1. Projenin bir kopyasını kendi git deponuz üzerine alıp, artık o kopya üzerinden çalışmanız.

  2. Fork ile alınan proje üzerinde geliştirmeler yapıp, projeye katkıda bulunup, projenin asıl sahibine projenin iyileştirmeler yaptığınızı sunabilirsiniz. Proje sahibinin onayı ile projeye katkıda bulunabilirsiniz.

Git GitHub Fork

 

Projeyi fork yapmak için proje sayfasına göz atarsanız Fork adında buton göreceksiniz. fork olayına daha detaylı değinmek lazım kafanız karışmasın, birazdan bir repoyu klonlamayı göreceğiz bunu bilmenizde fayda vardır.

 

1- Git Repo ‘sundan Projeyi indirme. Git Http Clone

Üstte yer alan repo sayfasına gittiğinizde, üstteki sayfa açılmaktadır. sayfanın sağ tarafında yeşil button (Clone or download) a tıklarsanız açılan alanda Download Zip i göreceksiniz. Tıklarsanız bilgisayarınıza zip olarak projenin son hali inecektir.

Terminal veya git terminal üzerinden Http isteği kopyalamak için;

git clone https://github.com/onurtez/PhpDersler.git

GitHup HTTP

2- Git Repo ‘sunu kendi bilgisayarınıza çekme SSH ile Klonlama

 

SSH Güvenli bir protokol olduğundan dolayı git reposuna erişmek için SSH anahtarı (keypair) oluşturmalı ve o repoya tanımlı olmalıdır.

GitHup SSH

Projeyi http isteğindeki gibi SSH ile klonlama için terminalinden bu komutu yazmanız yeterli ancak unutmayın terminalde hangi klasörde iseniz direk oraya indirecektir.

git clone [email protected]:onurtez/PhpDersler.git



Git Http ve Ssh ile işlem yapma arasındaki fark nedir ?

Aslında ikiside aynı şeye hizmet vermektedir. Tek farkları, birisi web portunu kullanarak işlem yapar, diğeri ssh üzerinden işlem yapar. Avantajları ve dezavantajlarına göre sıralarsak;

Http isteklerinde, git reposuna yapılacak her güncelleme işlemlerinde projenizin üyelik bilgilerini girmeniz istenir. Biraz sıkıcı hal alabilir.

Ssh ile istek işlemlerinde işler biraz daha hızlıdır, zaten güvenli bir iletişim ağı olması ve ssh anahtarınız zaten üyeliğinize tanımlı olduğu için, devamlı şifre girmek zorunda kalmazsınız. 

Yani işin özü iki yöntemde de aynı komutlar ile, aynı işlemleri gerçekleştirirsiniz.

Yeni bir repo yaratma ve local den repo’ya dosyaları gönderme

 

Bilgisayarınızda yeni bir proje oluşturdunuz yada hali hazırda olan bir projeniz var, Bunu git ortamında bulundurmak istiyorsanız. Öncelikle hangi git servisini kullanacağınıza karar vermeniz gerekiyor. Eğer bu proje sadece sizin veya sizin izin verdiğiniz kullanıcılar tarafından erişilsin, gizli bir içerik olsun istiyorsanız, ben BitBucket öneririm. 

Tabiki BitBucket boşuna önermedim :) onun üzerinden biraz detaya girelim.

 

 

Üyeliğinizi açtınız ve giriş yaptınız. Sol menülerde “+” butonuna basın ve “CREATE” sekmesi altında yer alan menülerden “Repository” e tıklayın. 

BitBucket Creat Repo

 

Üstteki resimde olduğu gibi, Projenizi yayınlayacağınız Repoyu  web ortamında yaratmak için doldurun. Sizi direk Repo sayfanıza yönlendirecektir.

 

GIT REPO

 

Yukarıda anlatılan temel özellikler burada da karşımıza çıkıyor. Bu repoyu yönetmek için http veya ssh kullanmamız gerekiyor. Ssh üzerinden kullanacaksanız bu üyeliğinize ayarlar kısmından SSH anahtarı oluşturup oraya kaydetmeniz gerekiyor. Http isteği kullandığınızı farz ederek anlatmaya devam ediyorum, zaten bir fark yok aralarında.

 

Öncelikle terminal üzerinden buraya göndermek istediğiniz projenin dosyalarının olduğu klasöre gelelim.

 

Adım 1 Bilgisayarın masaüstünde yer alan “deneme” isimli klasöre gidelim. 

[email protected] TMP % cd
[email protected] ~ % cd /Users/onurtez/Desktop/deneme 

 

Adım 2 Artık bu klasörün içerisinde yer alan tüm dosyaların Git tarafından kontrol edileceğini anlatalım (git init)

[email protected] de % git init

Yukarıdaki işlemden sonra gizli bir ayar dosyası oluşturmaktadır (.git

). Bu ayar dosyasına repomuz hakkında bilgiler eklenecektir.

 

Adım 3 Repo Tanımlama (git remote add)

 

Projeyi oluşturduğunuz sayfada projeniz hakkında bilgiler ve repo bilgilerini göstermektedir. Resimdeki örnekte ; “git remote add origin [email protected]:onurtez/deneme.git” repo’muz budur. Şimdi terminalden bu tanımlamayı yapalım yalnız unutmayın http isteği ile yapacağımız için repo bilgilerinin başına https:// ekleyeceğiz

git remote add origin https://[email protected]/onurtez/deneme.git

Adım 4 Proje dosyalarını gönderme işlemi

Bu işlem 3 adımda oluşmaktadır. Add, Commit, Push. önce hızlıca projemizi repomuza gönderelim ondan sonra detaylandıralım.

  1. Repoya gönderilecek dosyaları tanımlama (add)

git add .

  1. Dosya hakkında bilgi vermek ve işleme (commit)

git commit -m “ilk gönderi”

  1. Dosyaları repoya gönderme (push)

git push origin master

Bu aşamada eğer ssh ile işlem yaptınız ise dosyanız direk gidecektir ama örnekteki gibi https ile istek yaptıysanız size bir şifre soracaktır. “Password for 'https://[email protected]':” buraya üyeliğinizin şifresini yazdığınızda projeniz gönderilecektir.

Örnek çıktı:

[email protected] sshKey % cd /Users/onurtez/Desktop/deneme 
[email protected] deneme % git init
Initialized empty Git repository in /Users/onurtez/Desktop/deneme/.git/
[email protected] deneme % git remote add origin [email protected]:onurtez/deneme.git
[email protected] deneme % git add .
[email protected] deneme % git commit -m "ilk gönderi"  
[master (root-commit) 7caf68d] ilk gönderi
 1 file changed, 1 insertion(+)
 create mode 100644 deneme.text
[email protected] deneme % git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 232 bytes | 232.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To bitbucket.org:onurtez/deneme.git
 * [new branch]      master -> master
[email protected] deneme % 

Repo Git Örnek

Repo ‘muzun son hali üstte görüldüğü gibi, artık proje dosyamız gönderilmiş durumdadır. Biraz biraz aşina olduğumuza göre, en çok kullanılan git komutları ve bu komutların aldığı parametreleri konuşalım arkadaşlar.

 

$ git status - Projenizde yaptığınız son işlemleri gösterir. Projenizi son yaptığınız gönderiden sonra oluşturulan, güncellenen veya silinen dosyalar sergilenir.

Eğer herşey yolunda son göndermeden sonra bir değişiklik yok ise  “On branch master nothing to commit, working tree clean” yazısı görmeniz gerekiyor.

Yeni bir dosya eklediyseniz kırmızı yazı ile dosya adı yazacaktır. “deneme2.text

Eğer bir dosya güncellendi ise yine kırmızı yazı ile dosya adı yazacaktır. “modified:   deneme.text

Bir dosya kaldırdıysanız yine bir kırmızı uyarı alacaksınız. “deleted:    deneme.text

 

$ git add Projenizde yer olan dosya veya dosyalar bütününü kuyruğa eklemenize yarar. İçerisine 1 parametre alır ve hangilerinin kuyruğa ekleneceğini belirler.

$ git add deneme.text - Sadece bir kaç belirlediğiniz dosyayı eklemesini söylersiniz. $ git add * - Sadece değişen dosyaları almasını söylersiniz.

$ git add . - Tüm Dosya ve  Klasörlerde değişenleri almanı söylersiniz. Ben genelde bunu kullanıyorum. Zaten yaptığım değişiklikleri buluyor:), sizde kullanın tavsiyemdir.

 

$ git diff -  Git diff ile projelerde yaptığınız farklılıklar, dosya, dosya göstermektedir. Hangi satırlarda ne eklenmiş yada çıkarılmış veya neler değiştirilmiş gibi.

 

$ git commit - Commit aslında bi ön onay olmasının yanı sıra, bu eklenen, çıkarılan veya güncellenen alanların ne olduğunu anlatan metin ile etiketleme yapmamıza da yaramaktadır. Toplamda duruma göre iki, üç veya bir adet parametre alır. 

$ git commit - m <msj> - Gönderilen içeriğe not eklemenizi sağlar. Takım arkadaşlarınızın (ve kendinizin) neler olup bittiğini anlamaları için  kısa ama açıklayıcı bir açıklama yaptığınızdan emin olun.

$ git commit - a - Tüm dosyaları commit eder. Çalışma kopyanızda çok sayıda değiştirilmiş dosya varsa ve bunların bir sonraki işleme dahil edilmesini istiyorsanız - "-a" parametresini kullanabilir ve böylece "git add" adımını atlayabilirsiniz. Yalnız unutmayın yeni eklenen dosya ve klasörler buna tabi değildir.

$ git commit - a -m <msj> - Yukarıda yer alan a ve m parametrelerinin birleşimidir. :) o iki parametreyi anladınız ise bu da birleşimi.

$ git commit -amend -m <msj> -  "--Amend" parametresi kurtarıcı bir parametredir. Bir işlemi commit ettiğiniz, ama push etmeden bi güncelleme daha yaptınız. İşler karışmasın, iki commit e ne gerek var, diyerek son yapılan commit işlemini, güncellemeye  yarar.

 

$ git push origin - Yapılan değişikleri Git Repo ‘suna  göndermeye yarar. Aslında bu işi yapan Push dur, peki origin de ne oluyor ? Origin aslında .git dosyasında yer alan gir repo ‘sunun linkine bir işarettir. Her gönderide repo ‘nuzun linkini yazmayın diye atanan bir parametredir. Origin haricinde bir parametre daha almaktadır.

$ git push origin <branch> - Git ile çalışırken branch ler ile çalışabilirsiniz. Branch denilen şey kısaca adında olduğu gibi dallandırıyoruz. Bunu örnek vermeden anlatması zor. biraz daha alt kısımlarda bu konuya detaylı değineceğiz :). Normalde hiç branch oluşturmadıysanız master dasınızdır. $ git push orgin master diyerek projenizi gönderebilirsiniz.

 

$ git pull origin <branch> - Son güncellemeleri almamıza yarar , diyeceğim ama benzer çok terim kullanıldığı için örnek vermem lazım. İki bilgisayarınız var ve iki bilgisayarınızda da bu projeyi geliştiriyorsunuz.   Ofis ortamında bir sürü güncelleme yaptınız eve geldiniz ve evdeki projeniz eski kaldı. Önce hemen güncellemeniz lazım. Bu komut sizin için son halini güncellenecektir. NOT : Eğer güncellemeyi unutur, hemen kod yazmaya geçerseniz ve projenizde aynı dosya veya kod bloğu ile çalışırsanız, bu komut size eziyet olur. En başlarda bahsettiğim <HEAD> denilen hataları alırsınız. O yüzden önce güncel tutmayı unutmayın!

 

$ git fetch - Aslında çok tartışılan konudur. Git Pull vs Git Fetch ! Temelde aynı gibi görünürler, aralarında ayrılan en temel fark “pull origin master”, remote dan kodlarınızı local ortamınıza çekersiniz, default kendiliğinden merge işlemini yapar. “fetch”, remote daki kodların kopyasını local e oluşturur, ancak  merge yapmaz. Çünkü farklı branch (dallara) geçiş yapılabilir ve bu branch ‘e (dala) kodun son hali aktarılmış olur, yani yeni bir branch ile ilk çalışmalar :).

 

$ git merge FETCH_HEAD - Yukarıda fetch ile locale çektiğimiz projeyi yeni bir adala aktarmış ve geçmiş olduk olduk.

 

$ git branch -  Git reposundaki mevcut dalları listeler.  Ekstradan içerisine bir adet parametre alır. Aldığı parametre ile yeni bir branch (dal) oluşturulur.

$ git branch <dal_adi> -  Bu komut sadece yeni bir dal oluşturmanıza yarar. Bu dala geçiş yapmanızı sağlamaz.

$ git branch -d <dal_adi> - Oluşturulmuş bir dalı yerelde (local) siler.

$ git branch -dr Yenidal - a Oluşturulmuş bir dalı yerelde (local)  ve repo ’da siler. Nor : (Silme işlemlerini yaparken master dalında olduğunuzdan emin olun.)

 

$ git checkout  - Checkout kullanışlıdır. Biraz “branch”, parametresinin gelişmişi gibi diyebiliriz. Duruma göre değişebilir ancak iki parametreye kadar parametre alabilir. 

$ git checkout  <dal_adi> - Bulunduğunuz  branch ‘ten (daldan)  ayrılıp daha önce oluşturduğunuz başka bir dala geçmenize yarar.

$ git checkout -b <dal_adi> - Bu komut “git branch <dal_adi>”,  ile aynıdır. Tek farkı otomatik olarak o dala geçmenize yarar.

 

$ git merge <dal_adi> - Türkçesi birleştirmek. Bunu örnekle anlatırsak iki dalda çalıştınız ve artık ana projeye bunu eklemek istiyorsunuz, Yapmanız gereken tamda budur.

$ git reset --hard HEAD - Yerel (local) işlemlerinde yapılan değişikleri silmek için kullanılır.


Evet git derya deniz... büyük bir sistem, ancak bu temel bilgiler kullanmanız için iyi bir başlangıç olacaktır.