Github.com sayfasından ücretsiz yararlanabiliyorsunuz ancak projeleriniz public olarak paylaşılıyor, private yapmak isterseniz belirli bir ücret ödemeniz gerekmektedir. Projenize başka geliştiriciler ekleyebiliyorsunuz ve projeniz için farklı branchlar oluşturabiliyorsunuz. Şimdi gelelim git işlemlerine. İşlemleri yine linux üzerinden anlatacağım ve terminal komutları şeklinde göstereceğim. Git işlemlerini aynı şekilde kullandığınız yazılım geliştirme araçlarından da yapabiliyorsunuz. Windowsta çalışırken de eclipse üzerinden git işlemlerini gerçekleştiriyordum ama çıkabilecek hataları ve çakışmaları yönetmek oldukça zorluyor. Bu yüzden terminalden bu işlemleri yapmak çok daha kolay bence.
Bu yazımda git komutlarını anlatacağım, git nedir, komutların anlamları vs derinlemesine yazmayacağım. Zaten bunları anlatan internette oldukça fazla kaynak bulabilirsiniz. Oyüzden ben bu yazımda daha çok nasıl kullanıldıklarını anlatacağım. Bakmak isterseniz diye en gerekli komutları aşağıya yazıyorum:
Git Komutları
config
clone
init
remote
add
commit
push
merge
pull
fetch
stash
rebase
vb.
Git Komutları Kullanımı
Git işlemlerinizi https veya ssh üzerinden yönetebiliyorsunuz. Ssh üzerinden yaparsanız her komutta kullanıcı adı ve şifre girmenize gerek kalmıyor, ama https üzerinden girerseniz her pushlama işleminde kullanıcı adı ve şifre gerekmekte.
Tabiki bu işlemlere başlamadan önce github sitesine üye olmanız gerekmekte. Üye olduğumuzu düşünerek işlemlere devam edelim.
Git'i install etmek için terminalden:
$ sudo apt-get install git
Yapılandırma için:
$ git config - -global user.name "kullanıcı adınız"
$ git config - -global user.email "email adresi"
Ssh işlemleri için ssh-key lazım eğer yoksa yeni oluşturmak için aşağıdaki komutu yazıyoruz:
$ ssh-keygen
Bu komut üzerine bazı onay işlemleri gelir hepsini onayladıktan sonra,
the key fingerprint is :bf:80... seklinde key gelir ya da ~/.ssh/id_rsa.pub dizininde key'in oluşmuş olması gerekli. Bu key'i github'a eklememiz gerekmekte, Github sayfasında ayarlar menüsünden Ssh bölümünde Add ssh butonu ile ekleyebiliriz.
Bu işlemi bir kez yapmanız yeterli olacaktır. Ben github için ssh ile deneme yapmadım. https kullanarak işlemlerimi gerçekleştiriyorum.
Github'tan Bir Projeyi Localinize Çekmek İçin:
Github'ta bir projenin sayfasına girdikten sonra sağ tarafta Https clone URL diye bir alan var buraya tıklayınca projenin URL'ini kopyalıyor daha sonra aşağıdaki tek bir komutla projeyi çekebiliyorsunuz.
$ git clone URL
Github'a Proje Yüklemek İçin:
İlk önce github'ta projenizi konumlandıracağınız bir repository açmanız gerekmektedir. Githubta kendi profil sayfanızda yer alan repositories tabbına tıkladıktan sonra orada yeralan new butonu ile repository oluşturabiliyorsunuz. Repository'i oluşturdukdan sonra, repository'inin url'ini veriyor.
Repository'miz için default olarak "master" branchını bize vermektedir. Branch dediğimiz ise projeyi dallara ayırmak için kullanılır. Yani projemizin iki dalı olsun biri develop biri master olsun. Ben yazdığım kodları ilk önce develop branchına göndersem daha sonra doğruluğunu test ettikten sonra bu komutları master branchına göndersem bu durumda projenin düzgün, çalışan bir versiyonu master branchında tutulmuş olur. Yani doğru çalıştığından emin olduğum bir kodu master branchına göndermem oldukça yararlı olacaktır. Tabi bu durum proje canlıda ise yani proje hali hazırda kullanılıyorsa projenin çalışan halinin üzerine yapacağım güncellemeleri önce develop branchına gönderip orada denemek daha sonra master branchına göndermek oldukça mantıklı bir durum olacaktır. Bu kullanım takım çalışmalarında da oldukça yarar sağlamaktadır. Takımın her üyesi tarafından kod gözden geçirildikten sonra master branchına alınmasına olanak sağlar, hem hata olasılığı oldukça azaltılmış olur hem de kodun kaliteliği güvence altına alınmış olur bu sayede de canlı ortamda çalışan programı bozmadan düzgün güncellemeler gitmiş olur. Bu kadar açıklamadan sonra dilerseniz yeni branch oluşturup, projenizi dallara ayırabilirsiniz. Şimdilik sadece master branchım var gibi komutları yazacağım.
Şimdi aşağıdaki komutları sırası ile yazıyoruz:
$ cd myApplication (Projemizin olduğu dizine gidiyoruz)
$ git init
$ git remote repositoryURL (buraya repositorynin url'ini yazmanız gerekmekte)
$ git add . veya $ git add --all (bu komutla projenizdeki yeni dosyaları eklemiş oluyorsunuz, projemizi ilk defa git'e yükleyeceğimiz için bu komutla projenin tüm dosyalarını yeni olarak algılayacağı için tüm dosyalar eklenmiş oluyor. Daha sonra commit yapılacağı zaman, git'te var olan projenin üzerine hangi değişiklikler yapılmışsa onları ekler.)
$ git commit -m "buraya commit mesajınızı yazabilirsiniz "
$ git push veya $ git push origin master (bu komutla projemizi git'e göndermiş olduk. git push yaptığımızda branch adını vermezsek default olarak master'a pushlayacaktır. Şuan bizim başka bir branchımız olmadığı için her koşulda master'a pushlayacak oyüzden branch adı vermesek de olur)
Şuan projemizin ilk commit'ini gerçekleştirmiş olduk. Daha sonra projemize yeni özellikler ekledik diyelim ve şuan makinemizdeki projemiz git'teki yüklenmiş halinden farklı oldu. Projenin son halini (kodda silebilirsiniz veya ekleyebilirsiniz sonuç olarak bizim localimizdeki proje git'te olandan bir satır bile olsa farklı hale geldiyse, bu değişikliği algılayacaktır.)
Şimdi projemize yeni bir commit ekleyelim.
$ cd myApplication
$ git status (olduğumuz branchı ve değişiklik yapılan dosya isimlerini gösterir)
$ git diff (bu komutla yaptığımız değişiklikleri detaylı bir şekilde görebiliriz. enter ile ilerler, q ile bu komut satırından çıkış yaparız)
$ git add . (yapılan değişiklikleri ekledik, istersek burada eklemek istediğimiz dosyaların path'lerini de verebiliriz.)
$ git commit -m "mesajınız"
$ git push origin master
Eğer gönderdiğiniz son committe değişiklik yapacaksanız aşağıdaki komutları yazmanız yeterli:
$ git add .
$ git commit --amend (bu komutla commit mesajınızın olduğu bir alan açılır, burada commit mesajınızı düzenleyebilirsiniz. Eğer düzenlemeyecekseniz, ctrl+x ile bu alandan çıkarsınız. Değişiklik yaparsanız ctrl+x ile çıkarken size yapılan değişikliği kaydedip kaydetmediğinizi soracaktır. Bu mesaja "yes" veya "y" yazmanız yeterli.)
$ git push -f origin master (bu komutla force push yapmış oluyoruz. Force push şuan benim localimde kod nasılsa, aynı şekilde onu git'e gönderir. Bu komuta dikkat etmek gerekir. Çünkü eğer gitteki değişiklikleri localimize çekmeden force push yaparsak git'e projenin eksik hale gönderilmiş olabilir. İşte bu noktada yine branch açmak fayda sağlayabiliyor.)
Projenin son halini localimize çekmek için:
$ cd myApplicaiton
$ git status (hangi branchtayız bir bakalım)
$ git checkout origin master (Eğer başka branchlarımız varsa master branchındaki son güncellemeleri localimize çekiceksek, master branchında olmamız için kullandık)
$ git fetch (tüm değişiklikleri çektik)
$ git pull (tüm değişiklikleri localimizdeki kod ile birleştirdik bu komut için branch adı vermek de mümkündür- git pull origin master gibi.)
Localimizdeki projeyi herhangi bir branch'a resetlemek için:
$ git reset --hard origin/master (bu komutla bizim localimizdeki kod, pull komutuyla master branchının çekilmiş en son haline resetlenmiş olur, eger değişiklik yaptıysak ve bunu commitlemediysek bu değişikliği kaybederiz)
Şimdi localimizi master'a resetlemek istiyoruz ancak commitlemediğimiz değişikliklerimiz var ve bunları da kaybetmek istemiyorsak:
$ git stash (bu komutla yapılan değişiklikleri farklı bir depolama alanına taşımız oluruz. değişiklikler burada saklanır.)
$ git stash pop (bu komutla ise yaptığımız değişiklikleri tekrar alırız)
$ git stash drop (artık ihtiyaç yoksa saklanan değişiklikleri bu komutla temizleriz)
$ git stash list (bu komut ile yapmış oldugumuz her değişikliği görüntüleriz, çünkü her yaptığımız stash işleminde bunları ayrı ayrı kaydeder ve pop ile bu değişikliği almak istediğimizde listenin en üstündekini alır.)
Yeni branch açmak için:
$ git checkout -b yeniBranchAdı
veya;
$ git branch yeniBranchAdı
$ git checkout yeniBranchAdı
Localimizde çektiğimiz veya açtığımız tüm branchları görmek için:
$ git branch
Bir branchı silmek için:
$ git branch -D branchName
Git-flow Komutları:
- Öncelikle git-flow'u install etmemiz gerekmekte:
- Flow komutuyla yeni bir branch açmak için:
$ git flow feature start branchName
- Bir branch'ı flow komutuyla localimize çekmek için:
Farklı branchları Birleştirme:
Diyelim ki projemizde iki farklı değişikliği iki farklı brachta yaptık yani şöyle:
Ben bir özellik geliştirdim ve bunu özellik1 branchında yaptım, commitledim ve bu brancha pushladım.
Diğer özelliği ise özellik2 branchında yaptım, commitledim ve bu brancha pushladım diyelim.
Projenin güncel hali ise master branchında olsun. Benim bu iki branchtaki özellikleri master branchına taşımam yani orada da bu iki özelliğin bulunması için bu iki branchı master branchı ile birleştirmem gerekiyor. Bu işleme ise merge işlemi deniliyor
Açıkcası hiç terminalden bu işlemi yapmadım. Hep git sayfasından merge işlemi yapıyorum. (bir buton ile :) ) Oyüzden yanlış bir şeyler söylemim. Şu sayfa belki size yardımcı olabilir-> http://git-scm.com/docs/git-merge
Rebase İşlemi:
Yukarıdaki verdiğim branch örneğinde, master branchına merge olmamış iki branchta özellikler vardı diyelim ki bu iki özellikte de aynı dosyalar üzerinde değişiklik yaptık. ozellik1 branchını master branchına merge ettikten sonra diğer ozellik2 branchını merge etmek istersem, çakışma olacaktır ve rebase işlemi yapmam gerekecektir.
ozellik1 branchını master branchına merge ettikten sonra:
öncelikle master branchına geçiyoruz:
$ git checkout master
Şimdi master branchındaki tüm değişiklikleri almamız gerekiyor:
$ git fetch
$ git pull
Şimdi ozellik2 branchına geçiyorum:
$ git checkout feature/ozellik2
Sıra geldi rebase işlemine, ozellik2 branchını hangi brancha merge edeceksek rebase yanına o branchı yazıyoruz:
$ git rebase origin/master
$ git status
Eğer herhangi bir conflict yoksa sorunsuz bir şekilde rebase işlemi gerçekleşmiş olacaktır ve o şekilde bir mesaj gelir.
Eğer conflict varsa bu durumda manuel olarak merge etmeniz gerekir. Rebase olamayan dosyalara girip masterdan gelen güncellemeleri silmeyip onun üzerine düzenleme yapmalısınız. Dosyanın içinde ">>>>HEAD" gibi şeyler olacaktır onları silmeniz gerekiyor. Düzenlemene bittikten sonra:
$ git add .
$ git rebase --continue
$ git commit --amend
$ git push -f origin feature/ozellik2
Şimdi rebase işlemi tamamlanmış ve son halini pushlamış olduk. Şimdi ozellik2 branchı merge olabilcek hale gelmiş oldu.
Benim git ile ilgili anlatabileceklerim şimdilik bu kadar:)

