Türkçe Git Rehberi 2— Git Nedir — Git Kullanımı — Git Servisleri — Git Komutları
Serinin birinci yazısında; Git nedir, Git yapısı, Git katmanları, Git servisleri, Git masaüstü uygulamaları, Görsel Git istemcileri, Git kurulumu ve konfigürasyonu gibi Git hakkındaki temel bilgiler paylaşmıştım.
Bu yazımda daha detaylı olarak Git kullanımı, Git komutları, Git kodlarının ne işe yaradığı ve nasıl kullanıldığı, hangi işlemi nasıl yapacağımız hakkında bilgiler paylaşacağım.
Git Kurulumu
Kurulum için Git Download linkine giderek işletim sisteminize uygun bir versiyon indirmeniz ve basit adımlarla kurulum yapmamız gerekiyor.
Git ile çalışabilmek içinmak için GitBash ( Git’in kendi komut satırı arayüzünü — Git Command Line Interface) veya görsel kullanıcı arayüzü olan masaüstü uygulamalar (GitHub Desktop, SourceTree, GitKraken, Auress, Tower vb) kullanabilirsiniz.
Git Komutları, Git Kodlarınının Kullanımı için GitBash
GitBash, Git kurulumu sonrası default olarak genelde C:\Program Files\Git\git-bash.exe dizininde bulunabilir. GitBash kurulum dizini dışında daha pratik şekilde projenin dosya dizininde sağ tık yapılarak windows context menu üzerinden de çalıştırılabilir.
Git Konfigürasyonu — Git Ayarları
Git’i kurduktan sonra Git ile çalışmak için bazı ayarlar yapabiliriz. Bu ayarlar için git config komutunu kullanmaliyiz. Git ayarlarını bir defa yapmak yeterli olacaktır.
Git ayarları üç konumda kaydedilir ve hiyerarşik olarak bu konumlardan yüklenir
- Seviye (<git-install-root>\mingw64\etc\gitconfig ) : Tüm kullanıcı ve projeler için geçerli olan ayarlar bu dosyada kaydedilir. Aşağıdaki kodala çalıştırırsanız ayarlar bu dosyada kaydedilecek ve bu dosyadan okunacaktır.
git config --system
2.Seviye (C:\Users\username\.gitconfig) : Sadece kullanıcınız için tanımlanan ayarların kaydedildiği dosya. Aşağıdaki kodala çalıştırırsanız ayarlar bu dosyada kaydedilecek ve bu dosyadan okunacaktır.
git config --global
3.Seviye (<git-repo>\.git\config) : Üzerinde çalışılan proje (Git ile versiyon kontrolüne alınmış) klasörünün altında yer alan .git/config dosyasında proje bazındaki git ayarları yer alır. Aşağıdaki şekilde key içermeyen kodala çalıştırırsanız ayarlar bu dosyada kaydedilecek ve bu dosyadan okunacaktır.
git config
Git ayarlarından en önemlisi kullanıcı adınız ve email adresiniz.
Git, ayar olarak tanımladığınız değerleri commit vb işlemlerde otomatik olarak kullanır. Git kullanıcı bilgilerini ayarlamak için örnek kod:
git config --global user.name "Ubeyde Akgül"git config --global user.email "ubeyde.akgul@huawei.com"
Git Komutları, Git Komutlarınının Anlamları
En çok kullanılan temel Git komutlarını aşağıdaki görselde inceleyebilirsiniz.
git init
Bulunduğunuz dizinde .git adında bir dizin oluşturur ve dosyayı bir local repository haline getirir.
git config
Kullanıcı adı, mail vb. yapılandırma ayarlarını yapmanıza imkan verir.
git status
Üzerinde çalışılan repository branch’inde yapılan değişiklikleri ( ekleme, değiştirme, silme ) dosya bazında gösterir.
git clone <url>
Uzak sunucudaki (github,gitlab,bitbucket vs) bir projeyi üzerinde geliştirme yapmabilmemiz için bilgisayarımıza kopyalamamızı sağlar. Bu şekilde çalışmaya başladığımızda git remote repository url bilgileri de ayarlanmış şekilde olacaktır. HTTPS ve SSH url ile iki yöntemi vardır.
// https url
git clone https://github.com/Team-M3/HiNewsEvents.git
// ssh url
git clone git@github.com:Team-M3/HiNewsEvents.git
// veya local bir repository klonlamak için
git clone C:\AndroidStudioProjects\ProjectTwo
FORK
Fork (çatallama) paylaşılmış bir repository’nin o anlık ayrı bir örnek kopyasının kendi remote reponuza alınmasıdır. Clone komutu ile benzerdir fakat fakları vardı. Temel anlamda kullanım amacı; kendi remote reponuza alınan kopya üzerinde değişiklikler yaptıktan sonra projenin fork’landığı ana reposuna gönderilerek Açık Kaynak Projenin gelişmesine katkı sağlamaktır.
Fork edilen proje üzerindeki değişiklikleri ana repository’e gönderme, o projenin sahibi olan geliştiricinin değerlendirmesine sunma işlemi : GitHub için Pull Request (PR)
git remote
Üzerinde çalışılan projenin uzak depo, remote repository isimlerini listeler.
git remote -v
Üzerinde çalışılan projenin uzak depo, remote repository isimlerini listelerini ve url lerini listeler.
git remote -v
// or
git remote --verbose
git remote set-url <isim> <yeni_url> [<eski_url>]
Üzerinde çalışılan projenin uzak depo, remote repository isimlerini listelerini ve url lerini listeler.
git remote set-url origin new.git.repo/newrepository.git
// or
git remote set-url origin newGitRepo/newrRepository.git newGitRepo/newrRepository.git
git remote add <isim> <url>
Üzerinde çalışılan projeye uzak depo, remote repository ekler. Remote repository bilgilerini ayarlar. Birden fazla remote url ,multi remote url, çoklu remote repository eklemesi yapılabilir.
git remote add communityHub https://github.com/Team-M3/HiNewsEvents.git
//
git remote add origin ssh://git@git.huawei.com:2222/hms---turkey-dtse-branch/hinewsevents.git
git remote prune <isim>
Remote repository url kaydını siler.
git remote prune origin
// Remote repository url kaydının silinecek olduğunu bildirir.
// fakat silmez
git remote prune --dry-run origin
git remote rename <eski> <yeni>
Remote repository için kaydedilen ismi değiştirir.
git remote rename secondRemote communityHub
git fetch
Remote branch’deki değişikliklerin bilgilerini indirmek için kullanılır. Değişikliklerin bilgilerini indirir fakat local repository’e değişikliklikleri eklemez, entegre etmez.
git pull
Üzerinde çalışılan repository için Remote branch’deki değişiklikleri indirerek local repository’e ekler, entegre eder. Bir bakıma fetch komutundan sonra local repository için merge komutunun kullanılmış halidir.
git pull <remote_isim> <branch_ismi>
Üzerinde çalışılan projeye belirtilen Remote branch’deki değişiklikleri indirerek local repository’e ekler, entegre eder. Birden fazla remote repository, multi remote url kullanılan durumlarda veya remote repositorydeki farklı bir branch’ten pull işlemi yapılacağı zaman isim ve url belitilerek kullanılır.
git pull origin master
// or
git pull origin development
// or
git pull communityHub development
git diff
Remote repository ve Local repository branch’leri arasındaki farkları inceler, dosya bazında farkları gösterir.
git diff <local_branch_ismi> <remote_branch_ismi>
git diff
// or
git diff origin development
// or
git diff source_branch..other_target_branch
Daha fazlası için : Show changes between commits , Git Diff
git log
Yapılan commit bilgilerini ve loglarını görüntülememizi sağlar. commit id , commit message vs.
Commit bilgilerini ve loglarını commit id, commit code ve commit mesage olarak tek satırda görüntülemek için kullanılacak git kodu:
git log --oneline
//or
git log --pretty
//or
git log --pretty=oneline
//
// Commit bilgilerini ve loglarını özet olarak görüntülemek için
git log --summary
// veya
git log --decorate
// Eklenen-Silinen-Değişen dosyaların isim bilgilerini listelemek için
git log --name-status
// Her commit’te değiştirilen dosyaların istatistiğini göstermek için
git log --stat
Daha fazlası için : Viewing the Commit History
git branch
Proje içinde Local repository’de bulunan tüm brach’leri görüntülememizi sağlar.
Peki Branch nedir? Branch kavramı; projeyi geliştirirken kullandığımız repository’nin çoğaltılmış dalları, aynı projede farklı scope’lar üzerinde çalışmamıza imkan sağlayan kopyalanmış repository yapısıdır.
production, release, testQA, master, hotfix, develop, feautureA gibi ana branch’ler dışında proje üzerinde çalışan herkes çalışacağı kısım için güncel branch’ten yeni bir branch oluşturarak rahatça ve sağlıklı bir şekilde geliştirme yapabilir.
git branch <branch_ismi>
Proje içinde Local repository’de yeni brach oluşturur.
git branch –d <silinecek_branch_name>
Proje içinde Local repository’deki branch siler
git branch –m<branch_yeni_ismi>
Üzerinde çalışılan mevcut branch ismini değiştirir.
HEAD
Birçok insanın sorduğu soru : Git HEAD nedir? HEAD üzerinde çalışılan mevcut dal, current branch anlamına gelir. Yani üzerinde çalıştığınız branch için yapılan son commit’i gösterir. Branch değiştirdiğiniz zaman geçiş yapılan branch HEAD olarak güncellenir.
cat .git/HEAD
// In my case, output is:
ref: refs/heads/feature_mlkit_faceandbody_related_services
git checkout
Üzerinde çalışılan dalı değiştirmek için, Branch değiştirmek için kullanılan git kodu.
Aynı zamanda herhangi bir commit’e geri dönmek, herhangi bir dosyanın önceki commit’teki haline geri dönmek için de kullanılır.
// Branch'i önceki commit'e çekmek için
git checkout <commit_id>
// Herhangi bir dosyayı önceki commit’teki haline getirmek için (dosyanın HEAD : en son sürüm hali )
git checkout – <dosya_adi>
git checkout <branch_ismi>
Local repository’deki branch’ler arası geçiş yapar. Üzerinde çalışılan branch’i değiştirir.
git checkout -b <branch_ismi>
Proje içinde Local repository’de yeni bir branch oluşturur ve oluşturulan branch’e geçiş yapar.
Commit edilmemiş değişiklikler varken branch değiştirmek, kayıt yapmadan branch değiştirmek için zorlayıcı (force) komutu kullanabilirsiniz.
git checkout -f <branch_ismi>
// or
git checkout --force <branch_ismi>
git add
Değişiklik yapılan dosyaları git repository’sine ekler. Working Tree’den Staging Area’ya taşır. Yani değişen dosyaları commit öncesi unTracked scope’tan changesToBeComitted scope’a aktarır.
git add .
Tüm dosyaları Staging Area’ya ekler.
git add <dosya_ismi>
Sadece belirtilen dosyayı Staging Area’ya ekler.
git add </dizin_ismi>
Sadece belirtilen dizindeki tüm dosyaları Staging Area’ya ekler.
git add src/main/res/anim/
git rm
Belirtilen dosyaları git repository’sinden çıkartır. Staging Area’dan Working Tree’ye taşır. Yani dosyayı changesToBeComitted scope’tan unTracked scope’a aktarır.
git rm ReadMe.md
// or
git rm '*.txt'
// or without security check
git rm -f ReadMe.md
// or
git rm -r app/src/main/java/com/data/
Bu yazımda; daha detaylı olarak Git kullanımı, Git komutları, Git kodlarının ne işe yaradığı ve Git kodları nasıl kullanılır, Git’te hangi işlemi nasıl yaparız hakkında bilgiler aktarmaya çalıştım.
Serinin üçüncü yazısında; daha detaylı olarak Git kullanımı ve Git komutları hakkında bilgilerin devamını paylaşacağım.