`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
SÜRÜM KONTROL ? ■ Kaynak kod yönetimi ■ Sürüm (Versiyon) Takibi ■ Birden fazla kişiyle çalışma ve paylaşma ■ Repository (Depo) hizmeti ■ Deployment (Sunucuya uygulamanın kurulumu) 5 Nisan 13 Cuma
GIT`İ ÖNE ÇIKARANLAR Dallanma ve Birleştirme (Branch, Merge) Dağıtık Çalışma (Distributed) Güvenlik (Checksum ve SHA) Hız ve Boyut (Clone ve Depolama) Ön İzleme (Staging) Açık Kaynak (GPL V2) 5 Nisan 13 Cuma
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
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
DOSYA OLUŞTURALIM $ echo "Proje ile ilgili bilgiler..." > README.md $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add ..." 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
`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
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 ..." 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
YENİ DOSYALAR EKLEMEK # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # #! new file: dosya1.txt #! new file: dosya2.txt # $ git commit -m "dosya1 ve dosya2 eklendi" $ git add . $ git status NOKTA İŞARETİ 5 Nisan 13 Cuma
AĞAÇ YAPISI Github’daki depo’nun durumu. “origin” remote adı. Son snapshot’daki HEAD ve branch. Yerel makinedeki en son snapshot’a göre HEAD ve branch. 5 Nisan 13 Cuma
DEĞİŞİKLİĞİ GERİ ALMAK EKLENMİŞ dosyayı geri almak (staged) DÜZENLENMİŞ dosyayı geri almak (modified) REVİZYON seviyesinde projeyi geri almak $ git reset HEAD DOSYA_ADI $ git reset --soft SHA $ git checkout -- DOSYA_ADI $ git help reset 5 Nisan 13 Cuma
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
.gitignore $ touch .gitignore $ echo "*.jpg" >> .gitignore $ git status # On branch master # Untracked files: # (use "git add ..." 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
BRANCH (DALLANMAK) $ git branch # yerel branch’leri listeler $ git branch -r # 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
TAG (ETİKET) http://bit.ly/git-tag Bulunduğunuz an’dan / branch’den versiyon oluşturmak ya da o an’ı etiketlemek için kullanılır. $ git tag # yerel tag’leri listeler $ git ls-remote --tags # uzak branch’leri listeler 5 Nisan 13 Cuma
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
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
TAG (ETİKET) SİLMEK $ git tag -d ETİKET_ADI # yerel $ git push origin :ETİKET_ADI # uzaktaki Aynı branch’lerdeki gibi, tag’leri de silebilirsiniz. $ git help tag 5 Nisan 13 Cuma
`git-blame` Hangi kullanıcı, hangi dosyada ne işlem yapmış, ne değiştirmiş, kim kod’u bozmuş! $ git blame DOSYA_ADI $ git blame dosya1.txt $ git help blame 5 Nisan 13 Cuma
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
UZAK DEPO (REMOTE) $ git pull $ git pull REMOTE_ADI BRANCH_ADI $ git pull --all $ git help pull Uzaktaki değişiklikleri almak için pull ve fetch 5 Nisan 13 Cuma
UZAK DEPO (REMOTE) $ git fetch $ git fetch REMOTE_ADI BRANCH_ADI $ git fetch --all $ git help fetch Uzaktaki değişiklikleri almak için pull ve fetch 5 Nisan 13 Cuma