Türkçe Git Rehberi 2— Git Nedir — Git Kullanımı — Git Servisleri — Git Komutları

Ubeyde Akgül
Huawei Developers - Türkiye
7 min readOct 16, 2020

--

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

  1. 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
location of Git config files

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 cheat sheet by pinterest
git cheat sheet by reddit

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.

--

--