2. `git`NEDİR?
Dağıtık çalışan sürüm kontrol (DVCS*) ve
kaynak kod yönetim (SCM*) aracıdır.
* DVCS : Distributed Version Control System
SCM : Source Code Management
5 Nisan 13 Cuma
3. SÜRÜM KONTROL ?
■
■
■
■
Kaynak kod yönetimi
■
Deployment (Sunucuya uygulamanın kurulumu)
5 Nisan 13 Cuma
Sürüm (Versiyon) Takibi
Birden fazla kişiyle çalışma ve paylaşma
Repository (Depo) hizmeti
4. TARİHÇE
★ Linus Torvalds
★ Aralık 2005, V 1.0
★ Nisan 2013, V 1.8.2
http://en.wikipedia.org/wiki/Linus_Torvalds
5 Nisan 13 Cuma
6. GIT`İ ÖNE ÇIKARANLAR
Dallanma ve Birleştirme
(Branch, Merge)
(Clone ve Depolama)
Dağıtık Çalışma
Ön İzleme
(Distributed)
(Staging)
Güvenlik
Açık Kaynak
(Checksum ve SHA)
5 Nisan 13 Cuma
Hız ve Boyut
(GPL V2)
7. TEKNİK FARKLAR
■
Dosya içeriği BLOB* şeklinde saklanır. Blob’ların
kendine ait modu, tipi, adı ve SHA**’sı bulunur
■
Dizinler’e Tree (Ağaç) adı verilir.
■
Her Tree, alt Tree’lere ve Blob’lara sahiptir.
■
Log, COMMIT OBJECT adı verilen bir sistemde
saklanır. (Author, Commiter ve ilişkili diğer bilgiler)
* Binary Large Objects
** Secure Hash Algorithm
5 Nisan 13 Cuma
9. İLK DEPO
$ mkdir merhaba
$ cd merhaba/
$ git init
Initialized empty Git repository in merhaba/.git/
$ git help init
5 Nisan 13 Cuma
10. BOŞ DEPO
■ İlk COMMIT yapılana kadar ortada
BRANCH yoktur!
■ İlk commit yapıldıktan sonra varsayılan
(default) branch oluşur ve adı MASTER
olur.
5 Nisan 13 Cuma
12. DOSYA OLUŞTURALIM
$ echo "Proje ile ilgili bilgiler..." > README.md
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
#! README.md
nothing added to commit but untracked files present (use "git add" to track)
$ git help status
5 Nisan 13 Cuma
13. `git add`
$ git add README.md
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#
(use "git rm --cached <file>..." to unstage)
#
#! new file:
README.md
#
$ git help add
5 Nisan 13 Cuma
15. `git commit`
Bir tür zamanı dondurmak, o an’ı
kaydetmek / yakalamak, SNAPSHOT
çıkartmaktır.
SNAPSHOT: An, enstantane fotoğraf anlamındadır...
5 Nisan 13 Cuma
16. MESAJ EDİTÖRÜ
İlgili çevre değişkenini (Environment
Variable) kullanarak istediğiniz metin
düzenleyicisini kullanabilirsiniz.
~/.bashrc # Örnek olarak
export GIT_EDITOR="emacs"
export VISUAL="vim"
export EDITOR="mate"
5 Nisan 13 Cuma
17. `git log`
$ git log
commit 58d35a7b277811bd07677c406a0615cfb3fc7806
Author: Uğur Özyılmazel <kullanici@eposta.com>
Date:
Wed Apr 3 06:48:03 2013 -0700
Initial commit
$ git help log
5 Nisan 13 Cuma
18. YENİ DOSYALAR EKLEMEK
$ echo "dosya1" > dosya1.txt
$ echo "dosya2" > dosya2.txt
$ ls
README.md
dosya1.txt
dosya2.txt
$ git status
# On branch master
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
#! dosya1.txt
#! dosya2.txt
nothing added to commit but untracked files present (use "git add" to track)
5 Nisan 13 Cuma
19. YENİ DOSYALAR EKLEMEK
$ git add .
$ git status
# On branch master
# Changes to be committed:
#
(use "git reset HEAD <file>..." to unstage)
#
#! new file:
dosya1.txt
#! new file:
dosya2.txt
#
$ git commit -m "dosya1 ve dosya2 eklendi"
5 Nisan 13 Cuma
NOKTA İŞARETİ
23. DEĞİŞİKLİK YAPMAK
$ git add dosya1.txt
$ git commit -m “dosya1’e ek satır”
# onayla
$ git checkout -- dosya1.txt
# iptal
$ git help checkout
5 Nisan 13 Cuma
24. DURUM KONTROLÜ
$ git log --oneline
c66dd49 dosya1'e ek satır
bc0a6a6 dosya1 ve dosya2 eklendi
58d35a7 Initial commit
5 Nisan 13 Cuma
25. AĞAÇ YAPISI
Yerel makinedeki en
son snapshot’a göre
HEAD ve branch.
Github’daki depo’nun
durumu. “origin” remote
adı. Son snapshot’daki
HEAD ve branch.
5 Nisan 13 Cuma
26. AĞAÇ YAPISI
$ git push -u origin master
# uzaktaki depoya
Hem uzaktaki, hem de yereldeki SNAPSHOT eşitlendi.
$ git help push
5 Nisan 13 Cuma
27. DEĞİŞİKLİĞİ GERİ ALMAK
EKLENMİŞ dosyayı geri almak (staged)
$ git reset HEAD DOSYA_ADI
DÜZENLENMİŞ dosyayı geri almak (modified)
$ git checkout -- DOSYA_ADI
REVİZYON seviyesinde projeyi geri almak
$ git reset --soft SHA
$ git help reset
5 Nisan 13 Cuma
29. VERSİYONLAMA YAPMA!
Bazı dosyaları ya da dizinleri sürüm
kontrolü dışında tutmak gerekebilir.
Bunun için: .gitignore dosyasını
kullanıyoruz.
5 Nisan 13 Cuma
30. .gitignore
$ touch .gitignore
$ echo "*.jpg" >> .gitignore
$ git status
# On branch master
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
## .gitignore
nothing added to commit but untracked files present (use "git add" to track)
$ git commit -m "jpg dosyaları sürüm kontrolünden çıkartıldı"
5 Nisan 13 Cuma
32. BRANCH (DALLANMAK)
$ git branch
$ git branch -r
# yerel branch’leri listeler
# uzak branch’leri listeler
Ağaç yapısını, kodu ve depoyu
bozmadan kopyalar çıkartmak ve
daha sonra bu kopyaları ana yapıya
entegre etmek
$ git help branch
5 Nisan 13 Cuma
42. BRANCH SİLMEK
$ git branch -d BRANCH_ADI
$ git push origin :BRANCH_ADI
# yerel
# uzaktaki
İşi biten branch’i düzeni korumak
adına silebilirsiniz.
5 Nisan 13 Cuma
43. TAG (ETİKET)
$ git tag
$ git ls-remote --tags
# yerel tag’leri listeler
# uzak branch’leri listeler
Bulunduğunuz an’dan / branch’den
versiyon oluşturmak ya da o an’ı
etiketlemek için kullanılır.
http://bit.ly/git-tag
5 Nisan 13 Cuma
44. TAG (ETİKET)
$ git tag ETİKET_ADI
$ git tag -a ETİKET_ADI -m “COMMIT Mesajı”
İstediğiniz herhangi bir revizyondan da
TAG yapmanız mümkün.
Annotated TAG / Not düşülmüş Etiket
$ git help tag
5 Nisan 13 Cuma
45. TAG (ETİKET)
Aynı branch gibi çalışır. checkout
edilebilirler.
V1.0 İlk commit. İçinde
hiçbir şey yok. *.jpg’de
ignore edildiği için kontrol
dışında!
5 Nisan 13 Cuma
46. TAG (ETİKET) SİLMEK
$ git tag -d ETİKET_ADI
$ git push origin :ETİKET_ADI
# yerel
# uzaktaki
Aynı branch’lerdeki gibi, tag’leri de
silebilirsiniz.
$ git help tag
5 Nisan 13 Cuma
47. `git-blame`
$ git blame DOSYA_ADI
$ git blame dosya1.txt
Hangi kullanıcı, hangi dosyada ne
işlem yapmış, ne değiştirmiş,
kim kod’u bozmuş!
$ git help blame
5 Nisan 13 Cuma
60. UZAK DEPO (REMOTE)
Yerel git deposunu Bitbucket’a
taşımak için önce Bitbucket’da depo
oluşturun daha sonra yereldeki
depoya REMOTE ekleyin.
$ git remote add REMOTE_ADI URL
$ git help remote
5 Nisan 13 Cuma
65. UZAK DEPO (REMOTE)
Uzaktaki değişiklikleri almak için
pull ve fetch
$ git pull
$ git pull REMOTE_ADI BRANCH_ADI
$ git pull --all
$ git help pull
5 Nisan 13 Cuma
66. UZAK DEPO (REMOTE)
Uzaktaki değişiklikleri almak için
pull ve fetch
$ git fetch
$ git fetch REMOTE_ADI BRANCH_ADI
$ git fetch --all
$ git help fetch
5 Nisan 13 Cuma
67. UZAK DEPO (REMOTE)
pull ve fetch arasındaki fark;
pull : önce fetch sonra merge
fetch : sadece fetch
$ git help pull && git help fetch
5 Nisan 13 Cuma