Você está na página 1de 48

1

Introduo ao Git
Introduo ao Git
Magnun Leno
Criandeiros - 2013
2
O que GIT?
O que GIT?

Caractersticas:

Uma ferramenta SCM (Srouce Code


Management);

Versiona o arui!os;

"istri#udo;

$nfase na !e%ocidade& confia#i%idade e integridade;

'ist(rico:

Criado )or Linus *or!a%ds;

+erne% Linu,;
3
Controle de Verso
Controle de Verso

-egistra mudan.as feitas em um arui!o ou


con/unto de arui!os;

0ode ser uti%i1ado )ara ua%uer ti)o de


arui!o;

-etorna )ara !ers2es anteriores;

Com)ara mudan.as no decorrer do tem)o;

Centra%i1ado ou "istri#uidos;
Centralizado
Centralizado

0ossui um ser!idor centra%;

Sem #ac3u) )ode-se )erder tudo;

4 c5ec3out 6 uma co)iado 7%imitada7;

Sem o ser!idor ningu6m cria no!as !ers2es;


Distribuidos
Distribuidos

4 c%one 6 uma c()ia funciona% do re)osit(rio;

*oda c()ia 6 um 7ser!idor7;

0ossi#i%ita o tra#a%5o off%ine;


De Volta ao Git
De Volta ao Git

8nsta%e-o:
# pacman -S git
# aptitude install git-core
# yum install git

Crie sua c5a!e Ss5:

5tt)s:995e%):git5u#:com9artic%es9generating-ss5-3e;s
Hospedagem de Repositrio
Hospedagem de Repositrio

<it'u#

=it#uc3et;

<itorious;
!oo "#si$a do Git
!oo "#si$a do Git

>?o uti%i1a diferen.as& e sim sna)s5ots;

Metadados em :git;

@uase todas as o)era.2es s?o %ocais;

*udo no <it tem um c5ec3sum S'A-1

"etecta ua%uer ti)o de )erda ou a%tera.?o;

Confia#i%idade;

8ntegridade;

$,em)%o de c5ec3sum S'A-1:

2B#CdaDEE22E2CFGaaBC3#E2fFDCDcdDd3#003G3
Con%igurando o Git
Con%igurando o Git

>ome de usuHrio de $mai%


$ git config --global user.name "Magnun Leno"
$ git config --global user.email "magnun@dominio.com"

$ditor e ferramenta de diff


$ git config --global core.editor vim
$ git config --global merge.tool vimdiff

<it em Cores:
$ git config --global color.branch auto
$ git config --global color.diff auto
$ git config --global color.grep auto
$ git config --global color.status auto

Con%igurando o Git
Con%igurando o Git

Verificando configs:
$ git config --list

<it usa configura.2es g%o#ais e %ocais:

<%o#ais: Ser!em )ara todos os re)osit(rios;

Locais: Se a)%icam a)enas a um re)osit(rio;

Arma1enamento:

<%o#a%: I9:gitconfig

Loca%: I9re)ositorio9:git9config
Criado um Repositrio no GitHub
Criado um Repositrio no GitHub
Criando um Repositrio &o$al
Criando um Repositrio &o$al

Como o <it 6 distri#udo& um re)osit(rio %oca% 6 idJntico a


um re)osit(rio remoto;

Criando um re)osit(rio %oca%:


$ cd ~
$ git init ro!eto
$ cd ro!eto

Um re)osit(rio <it )ode ser iniciado de duas formas:

>orma%;

=are;

Um re)osit(rio K#areK 6 com)osto a)enas do conteLdo do


diret(rio K:gitK;
Obtendo um Repositrio Remoto
Obtendo um Repositrio Remoto

4#ten5a a U-L:

$,ecute um c%one:
$ git clone http"##github.com#magnunleno#ro!eto.git
$ cd ro!eto
'rimeiro (rqui)o
'rimeiro (rqui)o

0reenc5endo arui!o:
$ echo $Meu pro!eto$ % &'()M'.md

Verificando o status untrac3ed:


$ git status
# *n branch master
#
# +nitial commit
#
# ,ntrac-ed files"
# .use "git add /file%..." to include in 0hat
0ill be committed1
#
# &'()M'.md
nothing added to commit but untrac-ed files
present .use "git add" to trac-1
'rimeiro (rqui)o
'rimeiro (rqui)o

Adicionando arui!o:
$ git add &'()M'.md

Verificando status staged:


$ git status
# *n branch master
#
# +nitial commit
#
# 2hanges to be committed"
# .use "git rm --cached /file%..." to
unstage1
#
# ne0 file" &'()M'.md
#
'rimeiro (rqui)o
'rimeiro (rqui)o

-ea%i1ando commit:
$ git commit -m "(dicionado &'()M'"
3master .root-commit1 e45b6789 (dicionado &'()M'
5 file changed: 5 insertion.;1
create mode 5<<=77 &'()M'.md

Verificando o status commited:


$ git status
# *n branch master
nothing to commit .0or-ing directory clean1

Atua%i1ando o ser!idor:
$ git push https"##github.com#magnunleno#ro!eto.git

U
n
t
r
a
c
3
e
d
M
o
d
i
f
i
e
d
S
t
a
g
e
d
C
o
m
m
i
t
e
d
Os *uatro +stados
Os *uatro +stados

*odo arui!o no <it estarH em uma das seguintes c%asses:

"escon5ecido (untrac3ed);

Modificado (modified);

0re)arado (staged);

Conso%idado9>?o modificado (commited9Unmodified);


Outras ,anipula-es de (rqui)o
Outras ,anipula-es de (rqui)o

Adicionando arui!os:
$ git add /ar>uivo%

-emo!endo arui!o:
$ git rm /ar>uivo%

Mo!endo9-enomeando arui!o:
$ git mv /ar>uivo-orig% /ar>uivo-dest%
Corrigindo Commits
Corrigindo Commits

Aue%a mensagem de commit era im)ortanteM


$ git commit -m "(sdasdasd"
$ git commit --amend

$ se eu esuecer de adicionar um arui!oM


$ git commit -m "(dicionei o &'()M'.md"
$ git add &'()M'.md
$ git commit --amend
Veri%i$ando ,udanas
Veri%i$ando ,udanas

Mais uma %in5a:::


$ echo "(ceito colaboradores" %% &'()M'.md

Consu%tando a%tera.2es:
$ git diff
diff --git a#&'()M'.md b#&'()M'.md
inde? <4<@<c7..<7ef@Af 5<<=77
--- a#&'()M'.md
;;; b#&'()M'.md
@@ -5 ;5:8 @@
Meu pro!eto
;(ceito colaboradores

Mostra !Hrios arui!os;

0ara mostrar a)enas um arui!o:


$ git diff /file%
Con$luindo a ,udana
Con$luindo a ,udana

Vamos rea%i1ar o commit:::


$ git add &'()M'.md
$ git commit -m "(tualiBado ar>uivo
&'()M'.md"
3master Cac5bce9 (tualiBado ar>uivo &'()M'.md
5 file changed: 5 insertion.;1
$ git status
# *n branch master
nothing to commit .0or-ing directory clean1
Histri$o +)oluti)o
Histri$o +)oluti)o
Consultando o Histri$o
Consultando o Histri$o

4 Log 6 o seu 5ist(rico de commits:


$ git log
commit Cac5bce6aAAC4fbcA48f7fb8<A@AeaAfb<c58Ca=
(uthor" Magnun Leno /magnun@codecommunity.org%
)ate" Dhu Eul 7 5A"<<"76 8<5C -<C<<

(tualiBado ar>uivo &'()M'.md

commit e45b678C7@Aafc6b<@ba54e5=a4<56Cf7aAecf5A
(uthor" Magnun Leno /magnun@codecommunity.org%
)ate" Dhu Eul 7 57"A="85 8<5C -<C<<

(dicionado &'()M'
,ais Inspe-es de Histri$o
,ais Inspe-es de Histri$o

Mostrar o diff /unto com os commits:


$ git log -p

Ni%trar com #ase na mensagem de commit:


$ git log --grep "termo"

A)artir de uma certa data:


$ git log --since "Dhu Eul 7 5A"<<"76 8<5C"

O%tima semana:
$ git log --sinceF"5 0ee- ago"

$m ordem crescente:
$ git log --reverse
,ais Inspe-es de Histri$o
,ais Inspe-es de Histri$o

O%timas duas a%tera.2es


$ git log --reverse -8

Normata.?o (one%ine& s5ort& medium& fu%%& fu%%er& emai%& raP):


$ git log GformatF/nHvel%

Normata.?o e,trema
$ git log --formatF"Ian realiBou a alteraJKo Ih em Iar
In)escriJKo" IsIn"
Magnun Leno realiBou a alteraJKo Cac5bce em 5@ minutes ago
)escriJKo" (tualiBado ar>uivo &'()M'.md

Magnun Leno realiBou a alteraJKo e45b678 em 85 minutes ago
)escriJKo" (dicionado &'()M'
,.ltiplas ,odi%i$a-es
,.ltiplas ,odi%i$a-es

-ea%i1e commits com conte,to& e!ite commits gen6ricos:


$ touch pro!eto.py
$ vim pro!eto.py
$ cat pro!eto.py
#L#usr#bin#env python
# encoding" utf-4

print "Meu pro!etoL"
'?it.<1

$ vim &'()M'.md
$ cat &'()M'.md
Meu M&(N)' pro!eto
(ceito colaboradores
$ git status
# *n branch master
# 2hanges not staged for commit"
# .use "git add /file%..." to update 0hat 0ill be committed1
# .use "git chec-out --/file%..." to discard changes in 0or-ing directory1
#
# modified" &'()M'.md
# modified" pro!eto.py
#
no changes added to commit .use "git add" and#or "git commit -a"1
,.ltiplas ,odi%i$a-es
,.ltiplas ,odi%i$a-es

>?o fa.a issoQ


$ git add O
$ git commit -m ",m monte de alteraJPes em &'()M'.md e pro!eto.py"

Cada arui!o editado )ertence a um conte,to diferente& se)are os commits:


$ git add pro!eto.py

Como sa#er ua% conteLdo rece#erH um commitM


$ git status
# *n branch master
# 2hanges to be committed"
# .use "git reset Q'() /file%..." to unstage1
#
# ne0 file" pro!eto.py
#
# 2hanges not staged for commit"
# .use "git add /file%..." to update 0hat 0ill be committed1
# .use "git chec-out -- /file%..." to discard changes in 0or-ing
directory1
#
# modified" &'()M'.md
#
,.ltiplas ,odi%i$a-es
,.ltiplas ,odi%i$a-es

Arui!os KstagedK estar?o no cac5e:


$ git diff --cached
diff --git a#pro!eto.py b#pro!eto.py
inde? e=6de86..C4a5bfb 5<<=77
--- a#pro!eto.py
;;; b#pro!eto.py
@@ -<:< ;5:A @@
;#L#usr#bin#env python
;# encoding" utf-4
;
;print "Meu pro!etoL"
;e?it.<1

Arui!os Kuntrac3edK estar?o no diff comum:


$ git diff --minimal
diff --git a#&'()M'.md b#&'()M'.md
inde? <7ef@Af..4fC=bfb 5<<=77
--- a#&'()M'.md
;;; b#&'()M'.md
@@ -5:8 ;5:8 @@
-Meu pro!eto
;Meu super pro!eto
(ceito colaboradores
,.ltiplas ,odi%i$a-es
,.ltiplas ,odi%i$a-es

Conc%uindo commit do c(digo ()ro/eto:);):


$ git commit -m "Meu primeiro cRdigo"

-ea%i1ando commit da documenta.?o (-$A"M$:md):


$ git add &'()M'.md
$ git commit -m "(tualiBaJKo do &'()M'.md"

Norma sim)%ificada do diff:


$ git diff --name-only
&'()M'.md
$ git diff --cached --name-only
pro!eto.py

Norma sim)%ificada do status:


$ git status -bs
## master
M &'()M'.md
( pro!eto.py

Mais informa.2es em:


$ git diff --help
$ git status --help
/
/
0ait a minute1 Do$2 (re 3ou telling
0ait a minute1 Do$2 (re 3ou telling
me t4at 3ou built a time ma$4ine222
me t4at 3ou built a time ma$4ine222
out o% a C $ode?/
out o% a C $ode?/
/
/
Time is an illusion25
Time is an illusion25
6(lbert +insten7 6(lbert +insten7

Mudando fatos catastr(ficos do )resente:


$ rm &'()M'.md
$ git chec-out -- &'()M'.md
$ cat &'()M'.md

$s)iando o )assado:
$ cat &'()M'.md
Meu pro!eto
(ceito colaboradores
$ git chec-out e45b678C7@Aafc6b<@ba54e5=a4<56Cf7aAecf5A
Note" chec-ing out $e45b678C7@Aafc6b<@ba54e5=a4<56Cf7aAecf5A$.
Sou are ....1 another chec-out.
+f you 0ant ....1 chec-out command again. '?ample"

git chec-out -b ne0TbranchTname

Q'() is no0 at e45b678... (dicionado &'()M'
$ cat &'()M'.md
Meu pro!eto
/
/
Time is an illusion25
Time is an illusion25
6(lbert +insten7 6(lbert +insten7

"e !ot%a )ara o futuroQ


$ git chec-out master
revious Q'() position 0as e45b678... (dicionado &'()M'
S0itched to branch $master$
$ cat &'()M'.md
Meu pro!eto
(ceito colaboradores

*ra1endo um arui!o do )assado:


$ git chec-out '45b67....1cf5A &'()M'.md
$ cat &'()M'.md
Meu pro!eto
$ git chec-out master &'()M'.md
$ cat &'()M'.md
Meu pro!eto
(ceito colaboradores

Uma !e1 ue seu )ro/eto usa *ags& 6 )oss!e% rea%i1ar o


c5ec3out )e%as tags:
$ git chec-out v<.5

+tiquetas 6Tags7
+tiquetas 6Tags7
Tagging
Tagging

-ea%i1am marca.2es;

<era%mente uti%i1ada )ara re%eases;

Liste as tags:
$ git tag
v<.5
v<.8
U<.C

Crie uma tag:


$ git tag -a v<.7 -m "UersKo <.7"

4 git s5oP !0:1 mostra todas as a%tera.2es desta tag


+n)iando Tags
+n)iando Tags

*ags n?o s?o en!iada )or )adr?o;


$ git push https"##github.com#magnunleno#ro!eto.git v<.7

0ara en!iar todas ao mesmo tem)o:


$ git push https"##github.com#magnunleno#ro!eto.git --tags
"ran$4ing
"ran$4ing
"ran$4ing
"ran$4ing

=ranc5es s?o 7ramifica.2es7 do c(digo;

Segmenta e diferencia:

8m)%ementa.2es de funciona%idades;

Corre.?o de #ugs9issues;

C(digo estH!e%;

C(digo instH!e%;

=ranc5 )adr?o:

Master;
Criando "ran$4es
Criando "ran$4es

Listar #ranc5es:
$ git branch

Criar #ranc5e:
$ git branch unstable

0ara mudar de #ranc5:


$ git chec-out unstable

0ara de%etar um #ranc5:


$ git branch -d unstable
,anipulando "ran$4s Remotos
,anipulando "ran$4s Remotos

C%onando um Lnico #ranc5


$ git clone -b unstable https"##github.com#magnunleno#ro!eto.git

$n!iando )ara um #ranc5


$ git push https"##github.com#magnunleno#ro!eto.git unstable

Listando #ranc5s remotos


$ git branch -a
,erge (4ead8
,erge (4ead8
Realizando um ,erge
Realizando um ,erge

A /un.?o de 2 #ranc5es;
$ git chec-out master
$ git merge unstable

Listar 7merged #ranc5es7


$ git branch Gmerged

Listar 7not merged #ranc5es7


$ git branch Gno-merged
9lu:ograma "#si$o
9lu:ograma "#si$o

4 conceito de =ranc5es s( fa1 sentido em


/un.?o ao Merge;

4 )roduto da soma 6 um f%u,ograma:


"est Git "ran$4ing ,odel
"est Git "ran$4ing ,odel

0ro)osta origina%:

n!ie:com

=ranc5es:

Master;

'otfi,es&

-e%eases;

"e!e%o);

Neatures:
G;I Client
G;I Client

C%ientes <U8 gratLitos:

<itg (<>U9Linu,)

<it'u# (Mac e RindoPs);

<it$;e (<>U9Linu,& RindoPs e Mac);

<it-co%a (<>U9Linu,& RindoPs e Mac):

Mais dicas de <U8s em:

5tt):99git-scm:com9doPn%oads9guis

5tt)s:99de%icious:com9matt5eP:mccu%%oug59gitSgui

>?o US$MQQQQ
9ontes de (prendizado
9ontes de (prendizado

Li!ro <ratLito

5tt):99git-scm:com9#oo39)t-#r

Cras5 Course

5tt):99gitimmersion:com9

*utoria% interati!o de #ranc5ing

5tt):99)cott%e:git5u#:io9%earn<it=ranc5ing9

C5eat s5eet:

5tt):99PPP:git-toPer:com9#%og9git-c5eat-s5eet-detai%9
'erguntas?
'erguntas?

Você também pode gostar