Semantik Versiyonlama ve Git

 

 

Neden versiyonluyoruz?

  • Takım çalışmasını olanaklı hale getirir
  • Kaynak kod merkezileşir
  • Yazılan kodun sahibi bellidir
  • Sunucu güncelleme ve backup kolaylığı sağlar
  • Kaynak kodun geçmişi tutulur

Semantik versiyonlama nedir?

https://semver.org/

  • Dependency Hell
  • Majör değişiklik (1.0.0) database, architecture, dil
  • Minör değişiklik (1.1.0) yeni özellik(feature), arayüz
  • Bug fix, build (1.1.1) yama, hataların giderilmesi
  • Bug fixes not affecting the API - patch version
  • Backwards compatible API additions/changes - minor version
  • Backwards incompatible API changes - major version

Bir kısım sürüm atlarsa sağ tarafı sıfırlanır

Versiyonlama araçları ve sistemleri

  • Subversion - SVN (Apache)
  • Git - Dağıtık versiyon kontrol sistemi (Linus Torvalds)
  • Mercurial
  • TFS - Team Foundation Server (Microsoft) Microsoft servisleri ile uyumlu
  • VSS - Visual Source Safe
  • CVS - Concurrent Versions System

GIT

https://git-scm.com/

Cheap Local Branching

https://git-scm.com/

Convenient Staging Areas

https://git-scm.com/

  • Git has something called the "staging area" or "index"
  • This is an intermediate area where commits can be formatted and reviewed before completing the commit.
  • You can just stage the change you need for the current commit

Multiple workflows

https://git-scm.com/

  • Subversion-Style Workflow - Git will not allow you to push if someone has pushed since the last time you fetched

  • Integration Manager Workflow - number of developers then clone from that repository, push to their own independent repositories, and ask the integrator to pull in their changes

  • Dictator and Lieutenants Workflow

Guido van Rossum: the author of the Python programming language. "Benevolent dictator for life" (BDFL)

 

Linus Torvalds, Matz, DHH, Jose Valim

Git kurulumu

Fedora

 

Debian-Ubuntu

 

Git Ayarları

Text

GitHub


cat .ssh/id_rsa.pub

ssh anahtarınızı paylaşmayın!

Bu işlemler için aynı e-posta hesabını kullanın

Hepsi bu kadar

GIT TIPS

https://git-scm.com/book/en/v2

https://twitter.com/chacon

'git notes' ile Commit'e Yorum Yapmak

  • SHA‘yı değiştirmeden commit’e comment (yorum) eklemek

Daha Detaylı 'git-branch'

  • Local’deki ve Remote’daki yani varolan tüm branch‘leri göstermek için;    
    git branch -a
  • Hem revizyon (SHA) hem de commit mesajını  görmek  
    git branch -av

'git-bundle' Repo’yu Tek Dosya Haline Getirmek

 

git bundle create ~/Desktop/repo.bundle develop
git ls-remote ~/Desktop/repo.bundle
# SHA refs/heads/develop şeklinde görülür

 

 

git clone /path/to/FILE.bundle -b TARGET_BRANCH /path/to/repo

# develop branch’ine clone ettim
git clone ~/Desktop/repo.bundle -b develop /tmp/test-repo

 

'git-bundle' Repo’yu Tek Dosya Haline Getirmek

 

git bundle create ~/Desktop/commits.bundle develop ^origin/develop

 

git bundle verify ~/Desktop/commits.bundle

 

git fetch ~/Desktop/commits.bundle develop:friends-develop



 

'git-show' ile Revizyon Görüntülemek

Acaba 2 commit önceki index.html‘in durumu neydi?

git show REVISON:/path/to/file
git show HEAD~2:index.html     # 2 commit önce
git show HEAD~1:index.html     # son commit
git show 42bc7e2:index.html

'gitconfig2 - Konfigürasyon Dosyası

  • .git/config    Repository bazında ayar için kullanılır. Sadece bulunduğu repository’i etkiler.

  • ~/.gitconfig    Kullanıcı bazında ayarları içerir. Tüm repoları etkiler.

  • /etc/gitconfig    Tüm sistemi kapsayan ayar dosyasıdır. (System-wide)

'gitconfig2 - Konfigürasyon Dosyası

# kullanıcı bazında
git config --global user.name "Kullanıcı Adı"
git config --global user.email "kullanici@eposta.com"

# repo bazında
git config user.name "Kullanıcı Adı"
git config user.email "kullanici@eposta.com"

# konfigürasyonu göster
git config -l

'gitconfig2 - Konfigürasyon Dosyası

# user.email’i sildik / repo bazında
git config --unset user.email

# user.email’i sildik / user bazında
git config --unset --global user.email

'git-config' İçinden Bilgileri Okumak

git config --get user.email

Kısa ve Öz 'git-log'

git log
git log --graph --decorate --oneline

 

git config --global alias.logs "log --graph --decorate --oneline"

 

git log --format='%Cblue%h%Creset %Cgreen%an%Creset %s (%Cred%ar%Creset)'

 

git config --global alias.logs-pretty "log --graph --format='%Cblue%h%Creset %Cgreen%an%Creset %s (%Cred%ar%Creset)'"

 

git logs -10

git logs-pretty -10

'git-log' ve 'less' ile İlgili Sorun


Renkli log çıktılarında ilk satırı görmüyor ya da kaybediyorsanız bu sistemdeki less komutunun konfigürasyonu ile ilgilidir.




git config --global core.pager "less -FRX"

 

Belli Tarihler Arasındaki Log'a Bakmak / Filtrelemek

git log --since="2019-01-01" --until="2019-04-19" --reverse --format="%ad | %h : %s" --date=short

 

--date

relative : "2 hours ago"
local    : "Tue Sep 4 23:57:50 2018" (Tarih ayarınıza göre)
default  : "Tue Sep 4 23:57:50 2012 +0300"
iso      : "2018-09-04 23:57:50 +0300"
rfc      : "Tue, 4 Sep 2018 23:57:50 +0300"
short    : "2018-09-04"
raw      : "1346792270 +0300"

Commit'leri Sayalım

git shortlog -s -n

 

 

'git-rm' Dosyayı versiyon kontrol altından çıkarmak

Versiyon kontrol altındaki bir dosyayı daha sonradan .gitignore'a eklediniz.

.gitignore’un değiştiğini gördünüz ve git add ile eklediniz. Daha sonra ignore ettiğiniz dosyada değişiklik yaptınız ve halen kontrol altında olduğunu gördünüz.

 

Bu durumu düzeltmek için;

 

git rm --cached file.txt

 

'git-tag' İle Versiyon Belirlemek ya da Tag’lemek

git tag ETİKET                # o anki revizyona etiketi’i oluştur

# ya da
git tag -a ETİKET -m "Mesaj"

 

git tag  # listeleme

 

Aynı branch gibi çalışan tag’lere de checkout etmek mümkün. Zaten bu versiyonlama durumu da burada işe yarıyor.

 

 

 

'push.default' ve Ayarı

git push origin master # ya da
git push

 

current

git config --global push.default current

 

matching

git config --global push.default matching

 

upstream (tracking)

git config --global push.default upstream

'push.default' ve Ayarı

simple

git config --global push.default simple

'git stash' Anlık Müdahale

Tam işin ortasındasınız ve aniden acil bir durumla karşılaştınız. Bir çok dosyayı da değiştirdiniz ama commit etmek istemiyorsunuz. Ne yapacaksınız?

 

git stash

 

Çalışmaya devam edin, işlerinizi tamamlayın ve kaldığınız yere gere dönmek için:

 

git stash apply

İstediğiniz Revizyondan 'branch' Oluşturmak

git checkout -b testing_branch 8bab7c4

'git reset'

Reset komutu, yaptığımız herhangi bir committen sonraki bütün commitleri kaldırmaya yarar. İşinize yarayacağını düşündüğüm üç tane parametresi var, bunlardan bahsetmek istiyorum. Bu parametreler: Soft, mixed ve hard.

 

--soft

Git reset komutuna soft parametresini verip bir commit belirtirseniz eğer, Git bu belirttiğimiz commiti ve sonrasındaki commitleri silecektir, düzenlenmiş dosyalar da Git’e eklenmiş hale gelecektir. Dosyalardaki değişiklikler bozulmayacaktır.

'git reset'

--mixed

Git reset komutuna mixed parametresini verdiğimiz zaman ise Git, bu belirttiğimiz commiti ve sonrasındaki commitleri silecektir. Dosyalarımızdaki değişiklikler gitmeyecek ancak dosyalarımız Git’e eklenmemiş olacaktır, yani untracked hale gelecektir.

 

--hard

Git reset komutuna hard parametresini verip bir commit belirttiğinizde ise bu belirttiğiniz commiti ve sonrasındaki commitleri tamamen silip dosyalarda yaptığınız değişiklikleri de geri alıyor. Yani yaptığınız her şey uçup gidiyor. Bunu kullanacağınız zamanlarda çok dikkatli olun.

'git reset'

git reset --soft 08d467a

 

git reset --soft HEAD~1

 

semantik versiyonlama

By Kader Sucuk

semantik versiyonlama

  • 1,726