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/
- Free and open source distributed version control system
- Cheap local branching
- Convenient staging areas
- Multiple workflows
Cheap Local Branching
https://git-scm.com/
- Diğer SCM'lerden farklı olarak dallanma özelliği
- Tamamen bağımsız yerel branchler
- Branchler arası geçiş, birleştirme, silme, ekleme çok hızlı
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
Windows
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