SlideShare a Scribd company logo
1 of 82
Download to read offline
İNSANLAR İÇİN “GIT”
Uğur Özyılmazel - http://ugur.ozyilmazel.com
@ugurozyilmazel

5 Nisan 13 Cuma
`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

■

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
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
DİĞER UYGULAMALAR
# http://en.wikipedia.org/wiki/Comparison_of_revision_control_software

CVS

BITKEEPER *

SVN

PERFORCE

MERCURIAL

BAZAAR

* Lisans sorunları yüzünden Linus Torvalds GIT’i yazdı!
5 Nisan 13 Cuma
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)
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
KURULUM
Windows
http://git-scm.com/download/win

Linux
`git-core` paketi

Mac
(Ön tanımlı)

* İkonlar http://git-scm.com sitesine aittir.
5 Nisan 13 Cuma
İLK DEPO
$ mkdir merhaba
$ cd merhaba/
$ git init

Initialized empty Git repository in merhaba/.git/

$ git help init
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
KONFİGÜRASYON
$ git config --global user.name "Adınız Soyadınız"
$ git config --global user.email "eposta@adresiniz.com"

GIT konfigürasyon dosyası
~/.gitconfig

$ git help config
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 <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
`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
`git commit`
$ git commit -m “Initial commit”
$ git status
[master (root-commit) 58d35a7] init
1 file changed, 1 insertion(+)
create mode 100644 README.md

SHA (Kısa)

SHA (UZUN - 40 byte / karakter)
58d35a7b277811bd07677c406a0615cfb3fc7806
$ git help commit
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
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
`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
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
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İ
YENİ DOSYALAR EKLEMEK
$ git log

commit bc0a6a64cf1b996ef3d133a199bc88e821a38456
Author: Uğur Özyılmazel <ugurozyilmazel@---.com>
Date:
Wed Apr 3 18:36:13 2013 +0300
dosya1 ve dosya2 eklendi
commit 58d35a7b277811bd07677c406a0615cfb3fc7806
Author: Uğur Özyılmazel <ugurozyilmazel@---.com>
Date:
Wed Apr 3 06:48:03 2013 -0700
Initial commit

5 Nisan 13 Cuma
DEĞİŞİKLİK YAPMAK
$ echo "dosya1'e ek" >> dosya1.txt
$ cat dosya1.txt
# dosya1.txt

dosya1
dosya1'e ek

$ git status

5 Nisan 13 Cuma
DEĞİŞİKLİK YAPMAK

$ git diff
$ git help diff
5 Nisan 13 Cuma
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
DURUM KONTROLÜ
$ git log --oneline

c66dd49 dosya1'e ek satır
bc0a6a6 dosya1 ve dosya2 eklendi
58d35a7 Initial commit

5 Nisan 13 Cuma
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
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
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
DOSYA SİLMEK / TAŞIMAK
rm (remove)
$ git rm DOSYA_ADI
$ git rm file1.txt
$ git help rm

mv (move)
$ git mv DOSYA_ADI TAŞINACAK/DOSYA_ADI
$ git mv file1.txt yedek/file1.txt
$ git help mv
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 <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
.gitignore
$ cp ~/Desktop/Linus_Torvalds.jpg .
$ git status
nothing to commit, working directory clean

$ ls -al

5 Nisan 13 Cuma
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
BRANCH (DALLANMAK)
$
$
#
$

5 Nisan 13 Cuma

git branch deneme
git checkout deneme
Switched to branch 'deneme'
git branch
BRANCH (DALLANMAK)
master

dosya3.txt
$ git help branch
5 Nisan 13 Cuma

deneme

file_test.txt
BRANCH (DALLANMAK)
$ git log --graph --decorate --oneline --all

4a24e17
5 Nisan 13 Cuma
BRANCH (DALLANMAK)
$ git branch BRANCH_ADI REVİZYON
$ git branch deneme2 4a24e17

İstediğiniz herhangi bir revizyondan
da branch oluşturabilirsiniz.

$ git help branch
5 Nisan 13 Cuma
MERGE (BİRLEŞTİRMEK)
$ git merge BRANCH_ADI
$ git merge deneme

deneme branch’indeki tüm değişiklikleri
master’a taşıyoruz.

5 Nisan 13 Cuma
MERGE (BİRLEŞTİRMEK)

deneme
branch’inden
geldi

$ git help merge
5 Nisan 13 Cuma
CONFLICT (ÇAKIŞMA)
Farklı branch’lerde, aynı isimli dosyalarda
değişiklik yapalım.
deneme
$
$
$
$

git checkout deneme
echo "2.satır" >> file_test.txt
git add file_test.txt
git commit -m "file_test.txt'ye 2.satır eklendi"

master
$
$
$
$

git checkout master
echo "master'daki file_test.txt'ye 2.satır" >> file_test.txt
git add file_test.txt
git ci -m "master'daki file_test.txt'ye 2.satır eklendi"

5 Nisan 13 Cuma
CONFLICT (ÇAKIŞMA)
$ git merge deneme

# ve çakışma yaşanır!

Auto-merging file_test.txt
CONFLICT (content): Merge conflict in file_test.txt
Automatic merge failed; fix conflicts and
then commit the result.

5 Nisan 13 Cuma
CONFLICT (ÇAKIŞMA)

$ git add file_test.txt
$ git commit -m "çakışma düzeltildi"

5 Nisan 13 Cuma
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
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
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
$ git push origin :ETİKET_ADI

# yerel
# uzaktaki

Aynı branch’lerdeki gibi, tag’leri de
silebilirsiniz.

$ git help tag
5 Nisan 13 Cuma
`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
`git-blame`

SHA

AUTHOR ve TARİH

$ git help blame
5 Nisan 13 Cuma

MESAJ
`git-diff`
$ git diff HEAD^ HEAD file_test.txt

`diff`ile versiyonlar arasındaki
farkları görüntülemeye yarar.

$ git help diff
5 Nisan 13 Cuma
`git-diff`
$ git diff HEAD^ HEAD file_test.txt

5 Nisan 13 Cuma
`git-diff`
$ echo "3.satır" >> file_test.txt
$ git diff file_test.txt

5 Nisan 13 Cuma
UZAK DEPO (REMOTE)
Kişisel Sunucu
Git Repo Sağlayıcılar

5 Nisan 13 Cuma
UZAK DEPO (REMOTE)
Kişisel Sunucu
$
$
$
$
$

mkdir /git/depo/projem.git
cd /git/depo/projem.git
git init --bare
git config receive.denyCurrentBranch false
git repo-config core.sharedRepository true

$ git clone git+ssh://kullanici@sunucu/git/depo/projem.git
$ git clone git+ssh://sunucu/git/depo/projem.git

5 Nisan 13 Cuma
UZAK DEPO (REMOTE)
Kişisel Sunucu

■ http://gitorious.org/download
■ http://gitlab.org
■ https://github.com/sitaramc/gitolite
■ http://gitblit.com
5 Nisan 13 Cuma
UZAK DEPO (REMOTE)
$ git clone REPO_ADRESİ

ssh://

ftp(s)://

git://

rsync://

http(s)://

file://

$ git help clone
5 Nisan 13 Cuma
UZAK DEPO (REMOTE)
Git Repo Sağlayıcılar

5 Nisan 13 Cuma
Bitbucket

5 Nisan 13 Cuma
Bitbucket

5 Nisan 13 Cuma
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 remote add origin ssh://git@bitbucket.org/vigo/oyg2013-git.git
$ git remote add bitbucket ssh://git@bitbucket.org/vigo/oyg2013-git.git

$ git push -u origin master
$ git push
$ git push bitbucket
$ git push bitbucket master

Track Remote Branch

5 Nisan 13 Cuma
github

5 Nisan 13 Cuma
github

5 Nisan 13 Cuma
5 Nisan 13 Cuma
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
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
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
UZAK DEPO (REMOTE)

$ git help fetch
5 Nisan 13 Cuma
KONFİGÜRASYON
.gitconfig
Kısa yol tanımlamaları ve SHELL
komutları çalıştırılabilir.

$ git help config
5 Nisan 13 Cuma
KONFİGÜRASYON
.gitconfig

! işareti
$ git help config
5 Nisan 13 Cuma
GIT FLOW
Standart repo’daki master branch, gitflow’da develop branch’i olur.

http://nvie.com/posts/a-successful-git-branching-model/
5 Nisan 13 Cuma
GIT FLOW
Tüm kullanıcılar git-flow kurmalı
ve master / develop branch’leri
olmalı
$
$
$
$
$

git
git
git
git
git

flow
flow
flow
flow
flow

init
feature
feature
release
release

start ozellik1
finish ozellik1
start r1
finish 'r1'

https://github.com/nvie/gitflow
5 Nisan 13 Cuma
GIT FLOW
$ git flow feature finish ozellik1

■ feature/ozellik1, develop’la merge
■ feature/ozellik1 siliniyor
■ develop branch’e geçiliyor (checkout)
https://github.com/nvie/gitflow
5 Nisan 13 Cuma
GIT FLOW
$ git flow release finish 'r1'

■ önce origin’den fetch
■ release/r1 master’la merge
■ ‘r1’ tag’lenir
■ develop’la merge
■ release/r1 silinir
https://github.com/nvie/gitflow
5 Nisan 13 Cuma
DİĞER YARDIMCI ARAÇLAR
Komut satırı dışında grafik arayüzle
kullanılabilecek GIT araçları

5 Nisan 13 Cuma
DİĞER YARDIMCI ARAÇLAR
Komut satırı dışında grafik arayüzle
kullanılabilecek GIT araçları

5 Nisan 13 Cuma
DİĞER YARDIMCI ARAÇLAR
ÜCRETSİZ

ÜCRETLİ

Github App

Tower

Sourcetree

Gitbox

GitX(L)

SmartGit

git-cola

git-cola

http://git-scm.com/downloads/guis
5 Nisan 13 Cuma
DİĞER YARDIMCI ARAÇLAR
tig

http://jonas.nitro.dk/tig/
5 Nisan 13 Cuma
KİMLER KULLANIYOR?
■
■
■
■
■

5 Nisan 13 Cuma

Google
Facebook
Twitter
Microsoft
Perl

■
■
■
■
■

Android
Linux
QT
Gnome
PostgreSQL
KAYNAKLAR
■
■
■
■
■

http://git.gelistiriciyiz.biz/ *
http://git-scm.com
http://try.github.com
http://gitimmersion.com
http://www.codeschool.com/courses/git-real

* Türkçe
5 Nisan 13 Cuma
Kaynak Kod
https://github.com/vigo/oyg2013-git
https://bitbucket.org/vigo/oyg2013-git

5 Nisan 13 Cuma
Teşekkürler
@ugurozyilmazel
@vigobronx
http://ugur.ozyilmazel.com

5 Nisan 13 Cuma

More Related Content

Similar to İnsanlar için GIT

Git Sürüm Takip Sistemi
Git Sürüm Takip SistemiGit Sürüm Takip Sistemi
Git Sürüm Takip Sistemiözge Barbaros
 
Git - Bildiğiniz Gibi Değil
Git - Bildiğiniz Gibi DeğilGit - Bildiğiniz Gibi Değil
Git - Bildiğiniz Gibi DeğilLemi Orhan Ergin
 
Git - Code Versiyon Yönetim Sistemi
Git - Code Versiyon Yönetim SistemiGit - Code Versiyon Yönetim Sistemi
Git - Code Versiyon Yönetim SistemiDilaver Demirel
 
Git ile Sürüm Takibi
Git ile Sürüm TakibiGit ile Sürüm Takibi
Git ile Sürüm TakibiÖmer ÖZKAN
 
Git ile versiyon kontrolü
Git ile versiyon kontrolüGit ile versiyon kontrolü
Git ile versiyon kontrolüIlhan Çetin
 
Git, Github, Versiyon Kontrolü 101
Git, Github, Versiyon Kontrolü 101Git, Github, Versiyon Kontrolü 101
Git, Github, Versiyon Kontrolü 101OnurSercanYlmaz
 

Similar to İnsanlar için GIT (9)

Version Control CheatSheet - Git
Version Control CheatSheet - GitVersion Control CheatSheet - Git
Version Control CheatSheet - Git
 
Git & Git Workflows
Git & Git WorkflowsGit & Git Workflows
Git & Git Workflows
 
Git Sürüm Takip Sistemi
Git Sürüm Takip SistemiGit Sürüm Takip Sistemi
Git Sürüm Takip Sistemi
 
Git - Bildiğiniz Gibi Değil
Git - Bildiğiniz Gibi DeğilGit - Bildiğiniz Gibi Değil
Git - Bildiğiniz Gibi Değil
 
Git - Code Versiyon Yönetim Sistemi
Git - Code Versiyon Yönetim SistemiGit - Code Versiyon Yönetim Sistemi
Git - Code Versiyon Yönetim Sistemi
 
Git & Github
Git & GithubGit & Github
Git & Github
 
Git ile Sürüm Takibi
Git ile Sürüm TakibiGit ile Sürüm Takibi
Git ile Sürüm Takibi
 
Git ile versiyon kontrolü
Git ile versiyon kontrolüGit ile versiyon kontrolü
Git ile versiyon kontrolü
 
Git, Github, Versiyon Kontrolü 101
Git, Github, Versiyon Kontrolü 101Git, Github, Versiyon Kontrolü 101
Git, Github, Versiyon Kontrolü 101
 

İnsanlar için GIT

  • 1. İNSANLAR İÇİN “GIT” Uğur Özyılmazel - http://ugur.ozyilmazel.com @ugurozyilmazel 5 Nisan 13 Cuma
  • 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
  • 5. DİĞER UYGULAMALAR # http://en.wikipedia.org/wiki/Comparison_of_revision_control_software CVS BITKEEPER * SVN PERFORCE MERCURIAL BAZAAR * Lisans sorunları yüzünden Linus Torvalds GIT’i yazdı! 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
  • 8. KURULUM Windows http://git-scm.com/download/win Linux `git-core` paketi Mac (Ön tanımlı) * İkonlar http://git-scm.com sitesine aittir. 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
  • 11. KONFİGÜRASYON $ git config --global user.name "Adınız Soyadınız" $ git config --global user.email "eposta@adresiniz.com" GIT konfigürasyon dosyası ~/.gitconfig $ git help config 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
  • 14. `git commit` $ git commit -m “Initial commit” $ git status [master (root-commit) 58d35a7] init 1 file changed, 1 insertion(+) create mode 100644 README.md SHA (Kısa) SHA (UZUN - 40 byte / karakter) 58d35a7b277811bd07677c406a0615cfb3fc7806 $ git help commit 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İ
  • 20. YENİ DOSYALAR EKLEMEK $ git log commit bc0a6a64cf1b996ef3d133a199bc88e821a38456 Author: Uğur Özyılmazel <ugurozyilmazel@---.com> Date: Wed Apr 3 18:36:13 2013 +0300 dosya1 ve dosya2 eklendi commit 58d35a7b277811bd07677c406a0615cfb3fc7806 Author: Uğur Özyılmazel <ugurozyilmazel@---.com> Date: Wed Apr 3 06:48:03 2013 -0700 Initial commit 5 Nisan 13 Cuma
  • 21. DEĞİŞİKLİK YAPMAK $ echo "dosya1'e ek" >> dosya1.txt $ cat dosya1.txt # dosya1.txt dosya1 dosya1'e ek $ git status 5 Nisan 13 Cuma
  • 22. DEĞİŞİKLİK YAPMAK $ git diff $ git help diff 5 Nisan 13 Cuma
  • 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
  • 28. DOSYA SİLMEK / TAŞIMAK rm (remove) $ git rm DOSYA_ADI $ git rm file1.txt $ git help rm mv (move) $ git mv DOSYA_ADI TAŞINACAK/DOSYA_ADI $ git mv file1.txt yedek/file1.txt $ git help mv 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
  • 31. .gitignore $ cp ~/Desktop/Linus_Torvalds.jpg . $ git status nothing to commit, working directory clean $ ls -al 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
  • 33. BRANCH (DALLANMAK) $ $ # $ 5 Nisan 13 Cuma git branch deneme git checkout deneme Switched to branch 'deneme' git branch
  • 34. BRANCH (DALLANMAK) master dosya3.txt $ git help branch 5 Nisan 13 Cuma deneme file_test.txt
  • 35. BRANCH (DALLANMAK) $ git log --graph --decorate --oneline --all 4a24e17 5 Nisan 13 Cuma
  • 36. BRANCH (DALLANMAK) $ git branch BRANCH_ADI REVİZYON $ git branch deneme2 4a24e17 İstediğiniz herhangi bir revizyondan da branch oluşturabilirsiniz. $ git help branch 5 Nisan 13 Cuma
  • 37. MERGE (BİRLEŞTİRMEK) $ git merge BRANCH_ADI $ git merge deneme deneme branch’indeki tüm değişiklikleri master’a taşıyoruz. 5 Nisan 13 Cuma
  • 39. CONFLICT (ÇAKIŞMA) Farklı branch’lerde, aynı isimli dosyalarda değişiklik yapalım. deneme $ $ $ $ git checkout deneme echo "2.satır" >> file_test.txt git add file_test.txt git commit -m "file_test.txt'ye 2.satır eklendi" master $ $ $ $ git checkout master echo "master'daki file_test.txt'ye 2.satır" >> file_test.txt git add file_test.txt git ci -m "master'daki file_test.txt'ye 2.satır eklendi" 5 Nisan 13 Cuma
  • 40. CONFLICT (ÇAKIŞMA) $ git merge deneme # ve çakışma yaşanır! Auto-merging file_test.txt CONFLICT (content): Merge conflict in file_test.txt Automatic merge failed; fix conflicts and then commit the result. 5 Nisan 13 Cuma
  • 41. CONFLICT (ÇAKIŞMA) $ git add file_test.txt $ git commit -m "çakışma düzeltildi" 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
  • 48. `git-blame` SHA AUTHOR ve TARİH $ git help blame 5 Nisan 13 Cuma MESAJ
  • 49. `git-diff` $ git diff HEAD^ HEAD file_test.txt `diff`ile versiyonlar arasındaki farkları görüntülemeye yarar. $ git help diff 5 Nisan 13 Cuma
  • 50. `git-diff` $ git diff HEAD^ HEAD file_test.txt 5 Nisan 13 Cuma
  • 51. `git-diff` $ echo "3.satır" >> file_test.txt $ git diff file_test.txt 5 Nisan 13 Cuma
  • 52. UZAK DEPO (REMOTE) Kişisel Sunucu Git Repo Sağlayıcılar 5 Nisan 13 Cuma
  • 53. UZAK DEPO (REMOTE) Kişisel Sunucu $ $ $ $ $ mkdir /git/depo/projem.git cd /git/depo/projem.git git init --bare git config receive.denyCurrentBranch false git repo-config core.sharedRepository true $ git clone git+ssh://kullanici@sunucu/git/depo/projem.git $ git clone git+ssh://sunucu/git/depo/projem.git 5 Nisan 13 Cuma
  • 54. UZAK DEPO (REMOTE) Kişisel Sunucu ■ http://gitorious.org/download ■ http://gitlab.org ■ https://github.com/sitaramc/gitolite ■ http://gitblit.com 5 Nisan 13 Cuma
  • 55. UZAK DEPO (REMOTE) $ git clone REPO_ADRESİ ssh:// ftp(s):// git:// rsync:// http(s):// file:// $ git help clone 5 Nisan 13 Cuma
  • 56. UZAK DEPO (REMOTE) Git Repo Sağlayıcılar 5 Nisan 13 Cuma
  • 59. 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
  • 61. UZAK DEPO (REMOTE) $ git remote add origin ssh://git@bitbucket.org/vigo/oyg2013-git.git $ git remote add bitbucket ssh://git@bitbucket.org/vigo/oyg2013-git.git $ git push -u origin master $ git push $ git push bitbucket $ git push bitbucket master Track Remote Branch 5 Nisan 13 Cuma
  • 64. 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
  • 68. UZAK DEPO (REMOTE) $ git help fetch 5 Nisan 13 Cuma
  • 69. KONFİGÜRASYON .gitconfig Kısa yol tanımlamaları ve SHELL komutları çalıştırılabilir. $ git help config 5 Nisan 13 Cuma
  • 70. KONFİGÜRASYON .gitconfig ! işareti $ git help config 5 Nisan 13 Cuma
  • 71. GIT FLOW Standart repo’daki master branch, gitflow’da develop branch’i olur. http://nvie.com/posts/a-successful-git-branching-model/ 5 Nisan 13 Cuma
  • 72. GIT FLOW Tüm kullanıcılar git-flow kurmalı ve master / develop branch’leri olmalı $ $ $ $ $ git git git git git flow flow flow flow flow init feature feature release release start ozellik1 finish ozellik1 start r1 finish 'r1' https://github.com/nvie/gitflow 5 Nisan 13 Cuma
  • 73. GIT FLOW $ git flow feature finish ozellik1 ■ feature/ozellik1, develop’la merge ■ feature/ozellik1 siliniyor ■ develop branch’e geçiliyor (checkout) https://github.com/nvie/gitflow 5 Nisan 13 Cuma
  • 74. GIT FLOW $ git flow release finish 'r1' ■ önce origin’den fetch ■ release/r1 master’la merge ■ ‘r1’ tag’lenir ■ develop’la merge ■ release/r1 silinir https://github.com/nvie/gitflow 5 Nisan 13 Cuma
  • 75. DİĞER YARDIMCI ARAÇLAR Komut satırı dışında grafik arayüzle kullanılabilecek GIT araçları 5 Nisan 13 Cuma
  • 76. DİĞER YARDIMCI ARAÇLAR Komut satırı dışında grafik arayüzle kullanılabilecek GIT araçları 5 Nisan 13 Cuma
  • 77. DİĞER YARDIMCI ARAÇLAR ÜCRETSİZ ÜCRETLİ Github App Tower Sourcetree Gitbox GitX(L) SmartGit git-cola git-cola http://git-scm.com/downloads/guis 5 Nisan 13 Cuma
  • 79. KİMLER KULLANIYOR? ■ ■ ■ ■ ■ 5 Nisan 13 Cuma Google Facebook Twitter Microsoft Perl ■ ■ ■ ■ ■ Android Linux QT Gnome PostgreSQL