Professional Documents
Culture Documents
Ben Lynn
Magia Git
Ben Lynn Tr a d u t o r : Le o n a r d o Siq u e i r a R o d r i g u e s {leo n a r d o . s i q u e i r a . r o d r i g u e s @ g m a i l . c o m }
F o n t e u tili z a d a s Ano n y m o u s P r o 1 ABCDEFGHIJKLMOPQRSTUVWXYZ a b c de fg h i j k l m n o p q r s t u v w x y z 0 12456789 A P H o nt2 A B C D E F G HIJKL M O P Q R S T U V W X Y Z a b c d e f g h ij k l m n o p q r s t u v w x y z 012456789 3 D i av l o B l a ck ABCDEFGH IJKLMOPQRSTUVWXYZ abcde f gh i j k lmnopqr s tuvwxyz 012456789
T o d a a j u d a p a r a c o r ri g i r e/ o u m e l h o r a r o d o c u m e n t o b e m-v i n d a .
1 2 3
ND ICE
Pr e f c i o ................................................................................................7 A g r a d e c i m e n t o s! .................................................................................7 Lic e n a .................................................................................................7 Lin k s .....................................................................................................8
In t r oduo .......................................9
Tr a b a l h a r Di v e r t i d o .........................................................................9 C o n t r o l e de Ve r s e s ..........................................................................9 C o n t r o l e distri b u d o ..........................................................................1 0
U m a su p e r s t i o ...................................................................................................1 1
Truques bs i co s ..............................12
S al v a n d o est a d o s .............................................................................1 2
Adi c i o n a r , R e m o v e r , R e n o m e a r .........................................................................1 2
D e s f a z e r/ R e f a z e r av a n a d o ...........................................................1 3
R e v e r t e n d o ............................................................................................................1 4
Um pouco de clonagem.....................16
Si n c r o n i z a n d o C o m p u t a d o r e s ........................................................1 6 C o n t r o l e cl s s i c o de c d i g o ............................................................1 6 F a z e n d o u m F o r k do Pr o j e t o ..........................................................1 7 B a c k u p S u p r e m o s ............................................................................1 7 M u ltit a r e f a na vel o c i d a d e da luz ....................................................1 8 C o n t r o l e de Ve r s e s de G u e r r i l h a .................................................1 8
Lies de hi s t o r i a .........................26
Es t o u corr e t o .....................................................................................26 e te m m a i s ....................................................................................26 Alt e r a e s loc a i s po r lti m o ............................................................27 R e e s c r e v e n d o o hist r i c o ...............................................................27 F a z e n d o hist ri a ...............................................................................28 O n d e tu d o co m e o u a da r err a d o ? ...............................................29 Q u e m F e z Tu d o D a r Err a d o ? .........................................................30 Ex p e r i n c i a pe s s o a l .........................................................................30
Magia Gi t
Prefcio
G it 4 u m c a ni v et e s u o d o c o nt r ol e d e v e r s e s. U m a f err a m e n t e p oliv al e nt e r e al m e n t e v e r s t il c u j a e x t r a o r d i n r i a fl e x i b ili d a d e t o r n a-o c o m p l i c a d o d e a p r e n d e r, s o b r e t u d o s o z i n h o . C o l o q u e i n e s t a s p a g i n a s o p o u c o q u e a p r e n d i, p o i s i ni c i a l m e n t e ti v e d i fi c u l d a d e e m c o m p r e e n d e r o m a n u a l d o u s u ri o d o G i t 5. C o m o A rt h u r C. C l a r k e 6 b e m c o m e n t o u: Q u al q u e r t e c n ol o gi a s ufici e nt e m e n t e a v a n a d a c o n s i d e r a d a m a g i c a. E s t a u m a t i m a f o r m a d e a b o r d a r o G i t: n o v a t o s p o d e m i g n o r a r s e u f u n c i o n a m e n t o i n t e r n o e v -l o c o m o a l g o d i v e r ti d o q u e p o d e a g r a d a r a o s a m i g o s e e n f u r e c e r o s i n i m i g o s c o m s u a s h o r r e n d a s h a b ili d a d e s . A o in v s d e e n t r ar e m d e t al h e s, f or n e c e r e m o s a p e n a s in str u e s p a r a c a s o s e s p e c f i c o s. A p s o u s o r e p e t i d o, v o c g r a d u a l m e n t e e n t e n d e r c o m o c a d a t r u q u e , e c o m o a d a p t a r a s r e c eit a s s s u a s n e c e s si d a d e s. Outra s E di e s T r a d u o C h i n e s a 7 : p o r J u n J i e, M e n g e J i a n g W e i. P a g i n a n i c a 8: H T M L , s e m C S S . A r q u i v o P D F 9 : p r o n t o p a r a i m p r i m ir.
Licen a
E s t e g u i a r e g i d o p e l o s t e r m o s d a t h e G N U G e n e r a l P u b li c L i c e n s e v e r s i o n 3 1 0 . N a t u r a l m e n t e, o s f o n t e s e s t o n u m r e p o s i t r i o G i t, e s o o b t i d o d i g i t a n d o :
$ gi t clone gi t : / / repo.o r.cz/g i t m a g i c.g i t # Cr i a a pasta "g i tmag i c " .
V e j a a s e g u i r o u t r o s l o c a i s.
4 5 6 7 8 9 10
htt p://git-sc m . c o m/ htt p://ww w . k e r n e l . o r g/p u b/s o f t w a r e/ s c m/ gi t/d o c s/u s e r- m a n u a l . h t m l htt p://pt. wi ki p e d i a . o r g/ w i k i/Art h u r _ C . _ C l a r k e htt p://do c s. g o o g l e . c o m/ V i e w ? i d = d f w t h j 6 8 _ 6 7 5 g z 3 b w 8 k j htt p://ww w- cs- st u d e n t s . s t a n f o r d . e d u/~ bl y n n/ git m a g i c/ b o o k . h t m l htt p://ww w- cs- st u d e n t s . s t a n f o r d . e d u/~ bl y n n/ git m a g i c/ b o o k . p d f htt p://ww w . g n u . o r g/lic e n s e s/ g p l- 3.0.ht m l
Links
U m a v e z li s t e i a l g u m a s r e f e r n c i a s , p o r m c o n s o m e m u i t o t e m p o m a n t e-l a s. A l m d i s s o, q u a l q u e r u m p o d e u s a r u m sit e d e b u s c a p a r a e n c o n tr a r t ut o ri ai s , g u i a s e c o m p a r a e s d o G it c o m S u b v e r si o n 11, M e r c u ri al12, o u o u tr o si st e m a d e c o n tr ol e d e v e r s e s. R e p o sitrio s G it gr ti s h t t p://re p o. o r. c z/ h o s p e d a p r o j e t o s li v r e s, i n c l u s i v e e s t e g u i a . h t t p://git o ri o u s. o r g/ o u t r o s i t e d e h o s p e d a g e m G i t d e s ti n a d o a p r o j e t o s d e c d i g o a b e r t o. h t t p://git h u b. c o m/ h o s p e d a p r o j e t o s d e c d i g o a b e r t o d e g r a a , i n c l u s i v e e s t e g ui a , e p r oj et o s p riv a d o s ta m b m.
Magia Gi t
In t r oduo
U s a r e i u m a a n a l o g i a p a r a f al a r s o b r e c o n t r o l e d e v e r s e s . V e j a n a W i k i p d i a o v e r b e t e s i s t e m a d e c o n t r o l e d e v e r s e s 1 3 p a r a u m a m e l h o r e x p li c a o .
Trabalhar Divertido
M e d i v i rt o c o m j o g o s p a r a c o m p u t a d o r q u a s e m i n h a v i d a t o d a. E m c o n t r a p a r ti d a , s c o m e c e i a u s a r s i s t e m a s d e c o n t r o l e d e v e r s e s q u a n d o a d u l t o. S u s p e i t o q u e n o f u i o n i c o , e c o m p a r a r o s d o i s p o d e t o r n a r e s t e s c o n c e i t o s m a i s f c e i s d e e x p li c a r e e n t e n d e r. P e n s e n a e d i o d e s e u c d i g o, d o c u m e n t o, o u q u a l q u e r o u t r a c o i s a, c o m o j o g a r u m j o g o . U m a v e z q u e t e n h a f e it o m u i t o s p r o g r e s s o s , e g o s t a r i a d e d e s a l v a-l o s. P r a i s s o , v o c c l i c a e m S a l v a r n o s e u e d i t o r p r e f e r i d o. P o r m i s t o v a i s o b r e s c r e v e r a v e r s o a n t e ri o r. c o m o n o s a n t i g o s j o g o s o n d e v o c s ti n h a u m a e s p a o p a r a s a l v a r: v o c p o d e s a l v a r, m a s n u n c a m a i s p o d e r v o l t a r a u m e s t a d o s a l v o a n t e r i o r m e n t e. O q u e u m p e n a , p o i s o e s t a d o a n t e ri o r e r a u m a p a r t e m u i t o d i v e r t i d a d o j o g o e v o c g o s t a r i a d e p o d e r r e v i s it a-l o o u t r a h o r a. O u p i o r, o u l ti m o e s t a d o s a l v o u m d i fi c li m o e v o c t e r q u e r e c o m e a r.
Controle de Verse s
A o e d i t a r, v o c p o d e S a l v a r c o m o ... n u m a r q u i v o d i f e r e n t e, o u c o p i a r o a r q u i v o a n t e s d e s o b r e s c r e v e-l o s e v o c q u i s e r m a n t e r a s v e r s e s a n t e r i o r e s . P o d e c o m p r i m i-l o s p a r a e c o n o m i z a r e s p a o. I s t o u m a f o r m a r u d i m e n t a r e m u i t o tr a b a l h o s a d e c o n t r o l e d e v e r s e s. J o g o s d e c o m p u t a d o r a p e rf ei o a r a m e s t e m t o d o, m u it o s d el e s a c r e s c e nt a m a u t o m a ti c a m e n t e a d a t a e a h o r a a o s e s t a d o s s al v o s. V a m o s d i fi c u lt a r u m p o u c o . D i g a m o s q u e s o u m m o n t e d e a r q u i v o s j u n t o s, c o m o o s f o n t e s d o s e u p r o j e t o, o u a r q u i v o s p a r a u m w e b s i t e. A g o r a s e q u i s e r m a n t e r s u a s v e r s e s a n t e r i o r e s , t e r q u e a r q u i v a r t o d o u m d i r e t r i o o u v r i o s. M a n t e r m u i t a s v e r s e s n a m o i n c o n v e n i e n t e e r a p i d a m e n t e s e t o r n a r c a r o. E m a l g u n s j o g o s d e c o m p u t a d o r, u m e s t a d o s a l v o c o n s i s t e d e u m d i r e t r i o c h e i o d e a r q ui v o s. E s t e s jo g o s e s c o n d e m e s t e s d e t al h e s d o jo g a d o r e lh e a p r e s e n t a m u m a i n t e r f a c e c o n v e n i e n t e p a r a g e r e n c i a r a s d i f e r e n t e s v e r s e s n e s t e d i r e t ri o. S i s t e m a s d e c o n t r o l e d e v e r s e s n o s o d i f e r e n t e s. T o d o s t e m u m a b o a i n t e r f a c e p a r a g e r e n c i a r s e u d i r e t ri o d e v e r s e s . V o c p o d e s a l v a r o d i r e t ri o s e m p r e q u e d e s e j a r, e p o d e r e v e r q u a l q u e r u m d o s e s t a d o s a l v o s q u a n d o q u i s e r. A o c o n t r r i o d a m a i o r i a d o s j o g o s d e c o m p u t a d o r, e l e s s o g e r a l m e n t e m a i s e s p e r t o s n a e c o n o m i a d e e s p a o . N o r m a l m e n t e, a p e n a s u n s p o u c o s a r q ui v o s m u d a m d e v e r s o p a r a v e r s o, e c o m p o u c a s dif er e n a s. A r m a z e n a r a s dif er e n a s, a o in v s d e t o d o s o s a r q ui v o s, e c o n o m i z a e s p a o.
1 3 htt p://pt. wi ki p e d i a . o r g/ w i k i/Si s t e m a _ d e _ c o n t r o l e _ d e _ v e r s o
10
In t roduo
Controle distribudo
A g o r a i m a g i n e u m j o g o d e c o m p u t a d o r m u i t o d i f c il. T o d i f c il d e t e r m i n a r q u e v r i o s j o g a d o r e s e x p e r i e n t e s p e l o m u n d o d e c i d e m f o r m a r u m a e q u i p e e c o m p a r til h a r s e u s e s t a d o s s a l v o s d o j o g o p a r a t e n t a r v e n c e-l o. S p e e d r u n s s o e x e m p l o s r e a i s: j o g a d o r e s e s p e c i a li z a d o s e m d i f e r e n t e s n v e i s d o m e s m o j o g o c o l a b o r a m n a p r o d u o d e r e s u l t a d o s i n c r v e i s. C o m o v o c c o n f i g u r a u m s i s t e m a p a r a q u e t o d o s p o s s a m o b t e r f a c il m e n t e o q u e o s o utr o s s al v ar e m? E s alv ar n o v o s e st a d o s? N o s v e l h o s t e m p o s , t o d o s o s p r o j e t o s u t ili z a v a c o n t r o l e d e v e r s e s c e n t r a li z a d o . U m s e r vi d o r e m al g u m lu g a r m a n t m o s jo g o s s al v o s. N i n g u m t e m t o d o s. C a d a jo g a d o r m a n t m , e m s u a m a i o r i a, a p e n a s a l g u n s j o g o s s a l v o s e m s u a s m a q u i n a s . Q u a n d o a l g u m j o g a d o r q u i s e r a v a n a r n o j o g o, e l e p e g a o u l ti m o j o g o s a l v o d o s e r v i d o r, j o g a u m p o u c o , s a l v a e m a n d a d e v o l t a p a r a o s e r v i d o r p a r a q u e o s o u t r o s p o s s a m u s a r. E s e u m jo g a d o r q ui s e r p e g a r u m a n ti g o jo g o s al v o p o r al g u m m o ti v o? T alv e z o a t u al jo g o s alv o e st ej a e m u m n v el i m p o s s v el d e jo g ar d e vi d o al g u m ter e s q u e ci d o u m o bj et o t r s n v e i s a t r s, e p r e c i s o e n c o n t r a r o u l ti m o j o g o s a l v o q u e e s t e m u m n v e l q u e p o d e s e r c o m p l et a d o c o m s u c e s s o. O u t alv e z q u eir a c o m p a r a r d oi s jo g o s s al v o p a r a s a b e r o q u a n t o u m jo g a d o r a v a n o u. P o d e m e x i s ti r v r i o s m o t i v o s p a r a v e r u m a v e r s o a n t i g a, m a s o m o d u s o p e r a n d i o m e s m o . T m q u e s o li c it a r a o s e r v i d o r c e n t r a li z a d o a a n t i g a v e r s o. E q u a n t o m a i s j o g o s s a l v o s f o r e m n e c e s s r i o s, m a i o r o tr a f e g o d e i n f o r m a o . A n o v a g e r a o d e s i s t e m a s d e c o n t r o l e d e v e r s e s , d e n t r e e l e s o G i t, c o n h e c i d a c o m o s i s t e m a s d i s t ri b u d o s , e p o d e s e r p e n s a d a c o m o u m a g e n e r a li z a o d o s s i s t e m a s c e n t r a li z a d o s . Q u a n d o o s j o g a d o r e s p e g a m d o s e r v i d o r, e l e s r e c e b e m t o d o s o s j o g o s s a l v o s , e n o a p e n a s o m a i s r e c e n t e. c o m o s e e s ti v e s s e m e s p e l h a n d o o s e r v i d o r. A p ri m eir a o p e r a o d e cl o n a g e m p o d e s e r b e m d e m o r a d a, e s p e ci al m e n t e s e h u m l o n g o h i s t r i c o, m a s c o m p e n s a d a n o l o n g o p r a z o. U m b e n e f i c i o i m e d i a t o q u e , s e p o r q u a l q u e r r a s o d e s e j a r u m a a n t i g a v e r s o, a tr a f e g o d e i n f o r m a o c o m o s e r v i d o r d e s n e c e s s r i o.
Uma supersti o
U m e q u v o c o p o p u l a r q u e s i s t e m a s d i s t ri b u d o s e s t o m a l a d a p t a d o s p r o j e t o s q u e e x ij a m u m r e p o s i t r i o c e n t r a l o f i c i a l. N a d a p o d e r i a e s t a r m a i s l o n g e d a v e r d a d e . F o t o g r a f a r a l g u m r o u b a r a s u a a l m a . I g u a l m e n t e, c l o n a r o r e p o s i t ri o m a s t e r n o d i m i n u i s u a i m p o r t n c i a. U m a b o a c o m p a r a o i n i c i a l : q u a l q u e r c o i s a q u e u m s i s t e m a c e n t r a li z a d o d e c o n t r o l e d e v e r s e s f a z, u m s i s t e m a d i s t ri b u d o d e c o n t r o l e d e v e r s e s b e m c o n c e b i d o p o d e f a z e r m e l h o r. R e c u r s o s d e r e d e s i m p l e s m e n t e m a i s o n e r o s o q u e r e c u r s o s l o c a i s. E m b o r a v e j a m o s m a i s a d i a n t e q u e e x i s t e m i n c o n v e n i e n t e s n u m a a b o r d a g e m d i s t ri b u d a, m e n o s p r o v v e l q u e f a a c o m p a r a e s e r r n e a s c o m e s t a r e g r a d e o u r o.
Magia Gi t
11
U m p e q u e n o p r oj et o p o d e p r e ci s ar d e a p e n a s u m a fra o d o s r e c u r s o s of er e ci d o s p el o si st e m a. M a s, v o c u s a al g a ris m o s r o m a n o s q u a n d o c al c ul a c o m n m e r o s p e q u e n o s? E m a i s , s e u p r o j e t o p o d e c r e s c e r a l m d a s u a s e x p e c t a ti v a s. U s a n d o G i t, d e s d e o i ni c i o c o m o t e r u m c a n i v e t e s u o, e m b o r a o u s e n a m a i o r i a d a s v e z e s p a r a a b r i r g a r r a f a s. N o d i a q u e n e c e s s i t a r, d e s e s p e r a d a m e n t e, d e u m a c h a v e d e f e n d a v o c a g r a d e c e r p o r t e r m a i s d o q u e u m a b r i d o r d e g a r r a f a s.
12
Truques Bs i co s
Truques Bs i co s
A o i n v s d e s e a p r o f u n d a r n o m a r d e c o m a n d o s d o G i t, u s e e s t e s e x e m p l o s el e m e n t a r e s p a r a d a r o s p ri m eir o s p a s s o s. A p e s a r d e s u a s si m plici d a d e s, c a d a u m d el e s s o m u i t o t e i s. N a v e r d a d e , n o m e u p r i m e i r o m s c o m o G i t, n u n c a p r e c i s e i ir a l m d a s i n f o r m a e s d e s t e c a p t u l o.
Salvando estado s
P e n s a n d o e m t e n t a r a l g o m a i s a r ri s c a d o ? A n t e s d e f a z -l o, tir e u m f o t o g r a fi a d e t o d o s o s a r q u i v o s d o d i r e t ri o a t u a l c o m :
$ gi t in i t $ gi t add . $ gi t commit - m "Meu pr imei ro backup"
A s e q u n c i a d e c o m a n d o s a c i m a d e v e m s e r m e m o r i z a d o s , o u c o l o c a d o s e m u m s c r i p t, p o i s s e r o u s a d o s c o m m u i t a fr e q u n c i a. A s s i m s e a l g o d e r e r r a d o, v o c s p r e c i s a r e x e c u t a r:
$ gi t reset - - hard
p a r a v o l t a r p a r a o e s t a d o a n t e r i or. P a r a s a l v a r o e s t a d o n o v a m e n t e, f a a:
$ gi t commit - a - m "Outro backup"
D o m e s m o m o d o , s e v o c q u i s e r q u e o G i t n a v e r ifi q u e c e r t o s a r q u i v o s , t a l v e z p o r t l o s a p a g a d o s , f a a:
$ gi t rm ANTIGOSARQUIVOS. . .
R e n o m e a r u m a r q ui v o o m e s m o q u e r e m o v e r n o m e a nti g o e a di ci o n ar u m n o v o n o m e . H t a m b m o a t a l h o g i t mv q u e t e m a m e s m a s i n t a x e d o c o m a n d o mv. P o r e x e m p l o:
$ gi t mv ANTIGOARQUIVO NOVOARQUIVO
Magia Gi t
13
Desfazer/Refazer avan a d o
s v e z e s , v o c s q u e r v o l t a r e e s q u e c e r t o d a s a s m u d a n a s r e a li z a d a s a p a r ti r d e u m c e r t o p o n t o, p o i s e s t o t o d o s e r r a d a s . E n t o :
$ gi t log
m o s t r a r u m a li s t a d o s l ti m o s c o m m i t e s e u s hash S H A 1 . E m s e g u i d a, d i g it e:
$ gi t reset - - hard SHA1_HASH
l h e l e v a r d e v o l t a p a r a o p r e s e n t e. A s s i m f a a o G i t p a r a r d e r e c l a m a r, s e m p r e f a a commit o u reset s u a s m u d a n a s a n t e s d e e x e c u t a r u m checkout. V olt e m o s p a r a a a n al o gi a d o s jo g o s d e c o m p u t a d o r : git reset --hard: c a r r e g a u m a n t i g o s a l v a m e n t o e a p a g a r t o d o s o s s al v a m e n t o m a i s n o v o s d o q u e e st e q u e f oi c a rr e g a d o. git checkout: c a r r e g a u m a n t i g o s a l v a m e n t o, m a s s e j o g a r a p a r ti r d e l e , o s p r x i m o s s a l v a m e n t o r e a li z a d o s s e d e s v i n c u l a r o d o s s a l v a m e n t o s j r e a li z a d o s a p s o q u e f o i c a r r e g a d o . Q u a l q u e r s a l v a m e n t o q u e v o c fi z e r s e r c o l o c a d o e m u m branch s e p a r a d o r e p r e s e n t a d o a r e a li d a d e a l t e r n a ti v a e m q u e e n t r o u . L i d a r e m o s c o m i s s o m a i s a f r e n t e. V o c p o d e e s c o l h e r r e s t a u r a r a p e n a s a l g u n s a r q u i v o s o u d i r e t ri o s a c r e s c e n t a n d o-o s a o fi n a l d o c o m a n d o . N o g o s t a d e c o p i a r e c o l a r hash? E n t o u s e:
$ gi t checkout : / "Meu pr imei ro b"
p a r a ir a o commit q u e c o m e a a f r a s e i n f o r m a d a . V o c t a m b m p o d e s o li c it a r p e l o e s t a d o s a l v o a 5 commit a t r s :
$ gi t checkout master~5
14
Truques Bs i co s
Revertendo
C o m o n u m t ri b u n a l, e v e n t o s p o d e m s e r r e ti r a d o s d o s r e g i s t r o s . I g u a l m e n t e, v o c p o d e e s p e c i fi c a r q u a l commit d e s f a z e r.
$ gi t commit - a $ gi t rever t SHA1_HASH
Download de arquivos
O b t e n h a a c pi a d u m p r oj et o g e r e n ci a d o c o m G I T di git a n d o:
$ gi t clone gi t : / / s e r v i do r / c aminho/dos /a rqu i v o s
P o r e x e m p l o, p a r a o b t e r t o d o s o s a r q u i v o s u s a d o s p a r a c ri a r e s t e s i t e:
$ gi t clone gi t : / / gi t . o r . c z / g i tmag i c . g i t
A s e g u ir, t e r e m o s m u i t o o q u e d i z e r s o b r e o c o m a n d o c l one.
ltima Verso
S e v o c j o b t e v e a c o p i a d e u m p r o j e t o u s a n d o g i t c l one, p o d e a g o r a a t u a l i z a r p a r a a l ti m a v e r s o c o m :
$ gi t pul l
Publica o instantnea
S u p o n h a q u e v o c t e n h a e s c r it o u m script e g o s t a r i a d e c o m p a r til h a-l o. V o c p o d e r i a s i m p l e s m e n t e d i z e r p a r a p e g a r e m d o s e u c o m p u t a d o r, m a s s e o fi z e r e m e n q u a n t o v o c e s t a m e l h o r a n d o o script o u e x p e r i m e n t a d o a l g u m a s m u d a n a s , e l e s p o d e m t e r p r o b l e m a s . O b v i a m e n t e, p o r i s s o q u e e x i s t e m c i c l o s d e li b e r a o . D e s e n v o l v e d o r e s p o d e m t r a b a l h a r n u m p r o j e t o c o m f r e q u n c i a, m a s s d i s p o n i b ili z a m o c d i g o q u a n d o s e n t e m q u e o m e s m o e s t a a p r e s e n t v e l. P a r a f a z e r i s s o c o m G i t, n o d i r e t r i o o n d e e s t s e u script, e x e c u t e:
$ gi t in i t $ gi t add . $ gi t commit - m "Pr ime i r a l i be r ao "
E nt o a vis e a o s o utro s p ar a e x e c ut ar e m:
Magia Gi t
15
A p a r t i r d e a g o r a, t o d a v e z q u e s e u script e s t i v e r p r o n t o p a r a li b e r a r, e x e c u t e:
$ gi t commit - a - m "Nova l i be r ao "
e s e u u s u r i o s p o d e m a t u a li z a r s u a s v e r s e s , i n d o p a r a o d i r e t r i o q u e c o n t m s e u script, e e x e c u t a n d o :
$ gi t pul l
S e u u s u r i o s n u n c a fi c a r o c o m u m a v e r s o d o s e u script q u e v o c n o q u e i r a. O b v i a m e n t e e s t e tr u q u e s e r v e p a r a t u d o, n o a p e n a s script.
O que eu fiz?
S a i b a q u a i s a s m u d a n a s q u e v o c f e z d e s d e o l ti m a commit c o m :
$ gi t di f f
O u d e s d e o nt e m:
$ gi t di f f "@{yes te rday} "
O u e n t r e u m a v e r s o p a r ti c u l a r e d u a s v e r s e s a t r s:
$ gi t di f f SHA1_HASH "master~2 "
Tente ta m b m:
$ gi t whatchanged - - s ince= "2 weeks ago"
16
Um Pouco De Clonagem
Um Pouco De Clonagem
E m s i s t e m a s d e c o n t r o l e d e v e r s e s m a i s a n t i g o s , checkout a o p e r a o p a d r o p a r a s e o b t e r a r q ui v o s. O b t e n d o a s si m o s a r q ui v o s d o p o n t o d e s al v a m e n t o inf or m a d o. N o G i t e e m o u t r o s s i s t e m a s d i s t ri b u d o s d e c o n t r o l e d e v e r s e s , c l o n a g e m a o p e r a o p a d r o. P a r a o b t e r o s a r q u i v o s c l o n a s s e o r e p o s i t r i o i n t e i r o. E m o u t r a s p a l a v r a s, v o c p r a ti c a m e n t e f a z u m e s p e l h a m e n t o d o s e r v i d o r c e n t r a l. T u d o o q u e s e p o d e f a z e r n o r e p o s i t ri o p r i n c i p a l, v o c p o d e f a z e r n o s e u r e p o s i t ri o l o c a l.
Sincronizando Computadore s
E s t a f o i a r a z o p e l a q u a l u s e i o G i t p e l a p r i m e i r a v e z . E u p o s s o a g u e n t a r f a z e r tarball16 o u u s a r o r s ync p a r a backup e s i n c r o n i z a e s b s i c a s . M a s a s v e z e s e d i t o n o m e u laptop, o u t r a s n o m e u desktop, e o s d o i s p o d e m n o t e r c o n v e r s a d o e n t r e s i n e s s e p e r o d o. I n i c i a li z e u m r e p o s i t r i o G i t e commit s e u s a r q u i v o s e m u m a d a s m a q u i n a s . E n t o n a o u tr a:
$ gi t clone outro . computador : / c aminho/dos / a rqu i v o s
p a r a c r i a r u m a s e g u n d a c o p i a d o s s e u s a r q u i v o s e d o r e p o s i t ri o G i t. A p a r ti r d e a g o r a , u s e:
$ gi t commit - a $ gi t pul l outro . computador : / c aminho/dos / a rqu i v o s
o q u e d e i x a r o s a r q u i v o s d a m a q u i n a e m q u e v o c e s t tr a b a l h a n d o , n o m e s m o e s t a d o q u e e s t o n o o u t r o c o m p u t a d o r. S e v o c r e c e n t e m e n t e f e z a l g u m a a l t e r a o c o n f lit a n t e n o m e s m o a r q u i v o, o G i t l h e i n f o r m a r e v o c p o d e r f a z e r u m n o v o commit e e n t o e s c o l h e r o q u e f a z e r p a r a r e s o l v -l o.
N o s e r v i d o r p r i n c i p a l, i n i c i a li z e u m r e p o s i t ri o G i t e m b r a n c o c o m o m e s m o n o m e , e i n i c i e o daemon G i t s e n e c e s s r i o:
$ GIT_DIR=pro j . g i t gi t in i t $ gi t daemon - - detach # Ele pode j estar sendo executado
1 6 htt p://pt. wi ki p e d i a . o r g/ w i k i/T A R
Magia Gi t
17
A l g u m a s h o s p e d a g e n s p u b li c a s , t a i s c o m o o r e p o . o r . c z , t e r o m t o d o s d i f e r e n t e s p a r a c o n f i g u r a r o r e p o s i t r i o i ni c i a l e m b r a n c o , c o m o a t r a v s d o p r e e n c h i m e n t o d e u m f o r m u l ri o n o s i t e d e l e s . M a n d e s e u p r oj et o p a r a o s e r vi d or p ri n ci p al c o m:
$ gi t push gi t : / / serv i do r . p r i n c i p a l / c am inho/do /pro j . g i t HEAD
E s t a m o s p r o n t o s . P a r a v e r ifi c a r o s f o n t e s , u m d e s e n v o l v e d o r p o d e d i g i t a r:
$ gi t clone gi t : / / serv i do r . p r i n c i p a l / c am inho/do /pro j . g i t
A p s r e a li z a r a s a l t e r a e s , o c d i g o e n v i a d o p a r a o s e r v i d o r c o m :
$ gi t commit - a $ gi t push
S e o s e r v i d o r p r i n c i p a l ti v e r s i d o a t u a li z a d o e n q u a n t o r e a li z a v a a s a l t e r a e s , s e r n e c e s s r i o o b t e r a l ti m a v e r s o a n t e s d e e n v i a r a s a l t e r a e s . P a r a s i n c r o n i z a r p a r a a l ti m a v e r s o :
$ gi t commit - a $ gi t pul l
E m s e g u i d a a v i s e a t o d o s s o b r e s e u fork d o p r o j e t o n o s e u s e r v i d o r. Q u a l q u e r h o r a d e p o i s, v o c p o d e m e s c l a r (merge) s u a s m u d a n a s d o p r o j e t o o r i g i n a l n o m e s m o c o m:
$ gi t pul l
Backup Supremo s
G o s t a r i a d e n u m e r o s o s a r q u i v o s g e o g r a fi c a m e n t e d i s p e r s o s , r e d u n d a n t e s e a n t if a l s i fi c a e s ? S e s e u p r o j e t o t e m m u i t o s d e s e n v o l v e d o r e s , n o f a a n a d a! C a d a c l o n a g e m d o s e u c d i g o u m backup e f e ti v o. E n o a p e n a s u m a c p i a d o e s t a d o a t u a l, e s i m o h i s t r i c o c o m p l e t o d o s e u p r o j e t o. G r a a s a o hash c r i p t o g r f i c o, s e c a d a c l o n a g e m f o r c o r r o m p i d a, e l e s e r i d e n tifi c a d o a s s i m q u e t e n t a r s e c o m u n i c a r c o m o s o u t r o s . S e s e u p r o j e t o n o t o p o p u l a r, e n c o n t r e q u a n t o s s e r v i d o r e s p u d e r p a r a h o s p e d a r s e u s cl o n e s.
1 7 htt p://pt. wi ki p e d i a . o r g/ w i k i/F o r k
18
Um Pouco De Clonagem
c l o n e-o , n a v e l o c i d a d e d a l u z:
$ gi t clone . /a l gum/novo/d i r e t r i o
A g o r a v a i p a r a o n o v o d i r e t r i o e t r a b a l h e n e l e, n o n o a n t e r i or, u s a n d o G i t p a r a f e li c i d a d e g e r a l d a n a o . D e v e z e m q u a n d o v o c d e s e j a r s i n c r o n i z a r c o m o s o u t r o s , n e s t e c a s o , v p a r a o d i r e t ri o o r i g i n a l, s i n c r o n i z e u s a n d o o o u t r o s i s t e m a d e c o n t r o l e d e v e r s e s , e e n t o d i g it e:
$ gi t add . $ gi t commit - m "S i nc r on i z ando com os outro s "
D e p o i s v p a r a o n o v o d i r e t ri o e e x e c u t e:
$ gi t commit - a - m "Descr i o das minhas al te r aes " $ gi t pul l
Magia Gi t
19
e n v i a-l a s p a r a o r e p o s i t ri o c e n t r a l. O c o m a n d o g i t s vn a u t o m a t i z a t u d o i s s o p a r a r e p o s i t ri o s S u b v e r s i o n, e t a m b m p o d e s e r u t ili z a d o p a r a e x p o r t a r u m r e p o s i t r i o G i t p a r a u m r e p o s i t ri o S u b v e r s i o n 1 8 .
20
A tecla chefe
S e m p r e j o g u e u m d e s s e s j o g o s q u e a o a p e r t a r d e u m b o t o (a t e c l a c h e f e), a t e l a i n s t a n t a n e a m e n t e m u d a r p a r a u m a p l a n il h a o u a l g o m a i s s r i o. A s s i m s e o c h e f e p a s s a r p e l o s e u e s c r it ri o e n q u a n t o v o c e s ti v e r j o g a n d o , p o d e r r a p i d a m e n t e e s c o n d e r o j o g o . E m a l g u m d i r e t r i o:
$ $ $ $ echo "Sou mais esper to que meu chefe " > meuarquivo . t x t gi t in i t gi t add . gi t commit - m "Commit in i c i a l "
C r i a m o s u m r e p o s i t ri o G i t q u e r a s t r e a r u m a r q u i v o t e x t o c o n t e n d o u m a c e r t a m e n s a g e m . A g o r a d i g i t e:
$ gi t checkout - b chefe # nada parece ter mudado aps i s t o $ echo "Meu chefe mais esper to que eu" > meuarquivo . t x t $ gi t commit - a - m "Outro commit"
Magia Gi t
21
fi c o u p a r e c e n d o q u e n s s o b r e s c r e v e m o s n o s s o a r q u i v o e fi z e m o s u m commit. M a s i s t o u m il u s o . D i g i t e:
$ gi t checkout master # troca para a verso or i g i na l do arqu ivo
e t c h a m t c h a m t c h a m! O a r q u i v o t e x t o f o i r e s t a u r a d o. E s e o c h e f e d e c i d i r r o n d a r e s t e d i r e t ri o. D i g i t e:
$ gi t checkout chefe # troca para verso adaptada para agradar o chefe
V o c p o d e t r o c a r e n t r e a s d u a s v e r s e s d o a r q u i v o q u a n t a s v e z e s q u i s e r, e f a z e r commit i n d e p e n d e n t e s p a r a c a d a u m a .
Trabalho porco
D i g a m o s q u e v o c e s t t r a b a l h a n d o e m a l g u m a f u n o, e p o r a l g u m a r a z o, p r e c i s a v olt ar p a r a u m a a n ti g a v e r s o e t e m p o r a ri a m e n t e c ol o c a r al g u m a s d e cl ar a e s d e c o n t r o l e p a r a v e r c o m o a l g o f u n c i o n a . E n t o:
$ gi t commit - a $ gi t checkout SHA1_HASH
A g o r a v o c p o d e a d i c i o n a r t e m p o r a r i a m e n t e c d i g o f ei o e m t o d o c a n t o. P o d e a t f a z e r commit d e s t a s m u d a n a s . Q u a n d o e s ti v e r t u d o p r o n t o,
$ gi t checkout master
p a r a v o l t a r p a r a o tr a b a l h o o r i g i n a l. O b s e r v e q u e q u a l q u e r m u d a n a s e m commit s o t e m p o r r i a s. E s e v o c d e s e j a s s e s a l v a r a s m u d a n a s t e m p o r r i a s d e p o i s d e t u d o ? F c il:
$ gi t checkout - b suje i r a
22
Corree s rpida s
V o c e s t a f a z e n d o a l g o q u a n d o m a n d a m l a r g a r o q u e q u e r q u e s e j a e c o r ri g i r u m e r r o r e c m d e s c o b e r t o:
$ gi t commit - a $ gi t checkout - b correes SHA1_HASH
E n t o a s s i m q u e ti v e r c o r ri g i d o o e r r o:
$ gi t commit - a - m "Er ro corr i g i d o " $ gi t push # envia para o repos i t r i o $ gi t checkout master pr inc i pa l
e v o l t e a t r a b a l h a r n o q u e e s t a v a f a z e n d o a n t e r i o r m e n t e.
Fluxo ininterrupto
A l g u n s p r o j e t o s r e q u e r e m q u e s e u c d i g o s e j a r e v i s a d o a n t e s q u e o e n v i e. P a r a t o r n a r a v i d a f c il d a q u e l e s q u e f o r e m r e v i s a r s e u c d i g o, s e v o c t e m u m a g r a n d e m u d a n a p a r a f a z e r, v o c p o d e q u e b r a e m d o i s o u m a i s p a r t e s , e t e r c a d a p a r t e r e v i s a d a s e p a r a d a m e n t e. E s e a s e g u n d a p a r t e n o p u d e r s e r e s c r it a a t q u e a p r i m e i r a s e j a a p r o v a d a e r e v i s a d a ? E m m u i t o s s i s t e m a s d e c o n t r o l e d e v e r s e s , v o c t e ri a q u e m a n d a r a p r i m e i r a p a r t e p a r a o s r e v i s o r e s, e a g u a r d a r a t q u e s e j a a p r o v a d a p a r a e n t o c o m e a r a s e g u n d a p a r t e. A t u al m e n t e is s o n o v e r d a d e, m a s n e st e s si st e m a s d e e di o d a s e g u n d a p a rt e a n t e s d a p r i m e i r a s e r a p r o v a d a e n v o l v e m u i t o s o f ri m e n t o e p r i v a e s . N o G i t, o s branch e merge s o i n d o l o r e s (ter m o t c n i c o p a r a r p i d o e l o c a l). E n t o a p s f a z e r o commit d a p r i m e i r a p a r t e e e n v i a d o p a r a r e v i s o:
$ gi t checkout - b par te2
E m s e g u i d a, c o d i fi q u e a s e g u n d a p a r t e d a g r a n d e m u d a n a s e m e s p e r a r q u e a p r i m e i r a p a r t e t e n h a s i d o a c e i t a. Q u a n d o a p r i m e i r a p a r t e f o r a p r o v a d a e e n v i a d a ,
$ gi t checkout master $ gi t merge par te2 $ gi t branch - d par te2 # no prec i s a r mais deste branch
Magia Gi t
23
C o r r ij a o p r o b l e m a d a p r i m e i r a p a r t e d a s m u d a n a s e a g u a r d e a a p r o v a o . S e n o s i m p l e s m e n t e r e p i t a e s t e p a s s o . V o c p r o v a v e l m e n t e d e s e j a r f a z e r u m merge d a v e r s o c o r ri g i d a d a p r i m e i r a p a r t e c o m a s e g u n d a , l o g o:
$ gi t checkout par t2e $ gi t merge master
A g o r a c o m o a n t e ri o r m e n t e. L o g o q u e a p r i m e i r a p a r t e f o r a p r o v a d a e e n v i a d a :
$ gi t checkout master $ gi t merge par te2 $ gi t branch - d par te2
e , n o v a m e n t e, a s e g u n d a p a r t e e s t p r o n t a p a r a a r e v i s o . f c il e s t e n d e r e s t e t r u q u e p a r a q u a l q u e r n m e r o d e p a r t e s .
A s e g u i r, t r a b a l h e e m a l g u m a c o i s a: c o r ri g i n d o e r r o s, a d i c i o n a n d o f u n e s , a d i c i o n a n d o c d i g o t e m p o r r i o, e a s s i m p o r d i a n t e, f a a commit m u i t a s v e z e s a o l o n g o d o c a m i n h o . E n t o:
$ gi t checkout organ i zado $ gi t cherry - pick SHA1_HASH
Gerenciando o Branch
D i g i t e:
$ gi t branch
p a r a li s t a r t o d o s o s branch. H s e m p r e u m branch c h a m a d o "master", e v o c c o m e a p o r a q u i, p o r default. A l g u n s d e f e n d e m q u e o branch master d e v e s e r i n t o c v e l e c r i a r n o v o s branch p a r a s u a s p r p r i a s m u d a n a s . A s o p e s -d e - m p e r m i t e m a v o c d e l e t a r o u m o v e r (re n o m e a r) u m branch. V e j a g i t he lp branch.
24
Branch Temporrios
D e p o i s d e u m t e m p o v o c p e r c e b e r q u e e s t c r i a n d o branch d e c u r t a d u r a o , f r e q u e n t e m e n t e e p o r m o t i v o s p a r e c i d o s : c a d a n o v o branch s e r v e a p e n a s p a r a g u a r d a r o e s t a d o a t u a l, a s s i m v o c p o d e r a p i d a m e n t e v o l t a r p a r a e s t a d o s a n t i g o s p a r a c o r ri g i r u m e rr o o u al g o a s si m. a n l o g o a m u d a r o c a n al d a T V t e m p o r a ri a m e n t e p a r a v e r o q u e e st a p a s s a n d o n o s o u t r o s c a n a i s. M a s , a o i n v s d e a p e r t a r d o i s b o t e s , v o c e s t a c r i a n d o , c h e c a n d o e a p a g a n d o branch t e m p o r r i o s e s e u s commit. F e l i z m e n t e, o G i t t e m u m a t a l h o q u e t o c o n v e ni e nt e c o m o u m c o ntr ol e r e m o t o d e T V:
$ gi t stash
I s t o s a l v a o e s t a d o a t u a l n u m l o c a l t e m p o r r i o (u m stash) e r e s t a u r a o e s t a d o a n t e r i o r. S e u d i r e t r i o d e t r a b a l h o p a r e c e t e r v o l t a d o a o e s t a d o a n t e ri o r m e n t e s a l v o, e v o c p o d e c o r ri g i r e r r o s , p u x a r a s m u d a n a s m a i s n o v a s , e a s s i m p o r d i a n t e. Q u a n d o q u i s e r r e t o r n a r a o e s t a d o a n t e r i o r a o u s o d o stash, d i g i t e:
$ gi t stash apply # Pode ser prec i so reso l ve r alguns conf l i t o s .
Magia Gi t
25
Lies De His to r i a
U m a c o n s e q u n c i a d a n a t u r e z a d i s t ri b u d a d o G i t q u e o h i s t r i c o p o d e s e r e d i t a d o f a c il m e n t e . M a s s e v o c a d u l t e r a r o p a s s a d o , t e n h a c u i d a d o : a p e n a s r e s c r e v a a p a r t e d o h i s t r i c o q u e s v o c p o s s u i. A s s i m c o m o a s n a e s s e m p r e a r g u m e n t a m s o b r e q u e m c o m e t e a t r o c i d a d e s , s e a l g u m ti v e r u m c l o n e c u j a v e r s o d o h i s t ri c o s e j a d i f e r e n t e d o s e u , v o c p o d e t e r p r o b l e m a s p a r a c o n c ili a r s u a s r v o r e s q u a n d o i n t e r a g i r e m . C l a r o, s e v o c c o n t r ol a r t o d a s a s o u t r a s r v o r e s t a m b m , e n t o n o h p r o bl e m a, u m a v e z q u e p o d e s o b r e p o r-l a s. A l g u n s d e s e n v o l v e d o r e s g o s t a m d e u m h i s t r i c o i m u t v e l, c o m f al h a s o u n o . O u t r o s, q u e s u a s r v o r e s e s t e j a m a p r e s e n t v e i s a n t e s d e li b e r a-l a s a o p b li c o. O G i t c o n t e m p l a m b o s p o n t o s d e v i s t a. T a l c o m o c l o n a g e m , branch e merge, r e s c r e v e r o h i s t r i c o s i m p l e s m e n t e o u t r o p o d e r q u e o G i t l h e c o n c e d e . C a b e a v o c a u s -l o s a b i a m e n t e.
Estou correto
A c a b o u d e f a z e r u m commit, m a s q u e r i a t e r e s c r it o u m a m e n s a g e m d i f e r e n t e? E n t o e x e c u t e:
$ gi t commit - - amend
e tem mais
S u p o n h a q u e o p r o b l e m a a n t e ri o r d e z v e z e s p i o r. A p s u m a l o n g a s e s s o o n d e f e z u m m o n t e d e commit. E v o c n o e s t m u i t o f e li z c o m a o r g a n i z a o d e l e s , e a l g u m a s d a s m e n s a g e n s d o s commit p o d e r i a m s e r r e f o r m u l a d a s . E n t o e x e c u t e:
$ gi t rebase - i HEAD~10
e o s l ti m o s 1 0 commit a p a r e c e r o e m s e u $ E D I T O R f a v o r it o. T r e c h o d e e x e m p l o:
pick 5c6eb73 Adic i onado l i nk para repo.or . c z pick a311a64 Reorgan i zadas as analog i a s em "Traba lhe como qui se r " pick 100834f Adic i onado or i gem (push targe t ) ao Makef i l e
E n t o: R e m o v a o s commit d e l e t a n d o li n h a s ;
26
Lies De His to r i a
C a s o c o n t r r i o, e x e c u t e:
$ gi t rebase - - cont inue
P o r t a n t o, f a a commit c e d o e c o m f r e q n c i a: e a r r u m e t u d o f a c il m e n t e m a i s t a r d e c o m u m rebase.
Magia Gi t
27
i n t e r a g i r c o m e l e s d e p o i s.
Fazendo histria
Q u e r m i g r a r u m p r o j e t o p a r a G i t? S e e l e f o r g e r e n c i a d o p o r u m a l g u m d o s s i s t e m a s m a i s c o n h e c i d o s , e n t o p o s s v e l q u e a l g u m j t e n h a e s c r it o u m script p a r a e x p o r t a r t o d o o h i s t r i c o p a r a o G i t. S e n o , d e u m a o l h a d a e m g i t f a s t - impo r t , q u e l u m t e x t o n u m f o r m a t o e s p e c i fi c o p a r a c r i a r o h i s t ri c o G i t d o z e r o. N o r m a l m e n t e u m script u s a n d o e s t e c o m a n d o f eit o a s p r e s s a s s e m m u it a fr e s c u r a e e x e c u t a d o u m a v e z, m i g r a n d o o p r oj et o d e u m a s v e z. P o r e x e m p l o, c o l e a li s t a g e m a s e g u i r n u m a r q u i v o t e m p o r r i o, c o m o / tmp/h i s t o ry:
commit ref s / heads /mas te r committer Al i ce <al i c e@example.com> Thu, 01 Jan 1970 00:00:00 +0000 data <<EOT In i t i a l commit. EOT M 100644 in l i n e hel l o . c data <<EOT #inc lude <std i o . h> int main( ) { pr in t f ( " He l l o , return 0; } EOT world ! \ n " ) ;
commit ref s / heads /mas te r committer Bob <bob@example.com> Tue, 14 Mar 2000 01:59:26 - 0800 data <<EOT Replace pr in t f ( ) with wri te ( ) . EOT M 100644 in l i n e hel l o . c data <<EOT #inc lude <uni s t d . h> int main( ) { wri te (1 , "He l l o , return 0; } EOT world ! \ n " , 14) ;
E m s e g u i d a c r i e u m r e p o s i t ri o G i t a p a r ti r d e s t e a r q u i v o t e m p o r r i o d i g it a n d o :
$ mkdir proje to ; cd proje to ; gi t in i t $ gi t fas t - import < /tmp/h i s t o r y
F a a u m checkout d a l ti m a v e r s o d o p r o j e t o c o m :
$ gi t checkout master .
28
Lies De His to r i a
O G i t v e r i fi c a u m e s t a d o i n t e r m e d i ri o e n t r e a s d u a s v e r s e s . T e s t a a f u n o , e s e a i n d a e s t i v e r e r r a d a:
$ gi t bi sec t bad
S e n o , s u b s t it u a b a d p o r g o o d . O G i t n o v a m e n t e o l e v a r a t u m e s t a d o i n t e r m e d i ri o e n t r e a s v e r s e s d e f i n i d a s c o m o g o o d e b a d , d i m i n u i n d o a s p o s s i b ili d a d e s . A p s a l g u m a s it e r a e s , e s t a b u s c a b i n r i a o g u i a r a t o commit o n d e c o m e o u o p r o b l e m a . U m a v e z t e r m i n a d a s u a i n v e s ti g a o , v o l t e a o e s t a d o o r i g i n a l d i g i t a n d o :
$ gi t bi sec t reset
A o i n v s d e t e s t a r t o d a s a s m u d a n a s m a n u a l m e n t e, a u t o m a t i z e a b u s c a c o m :
$ gi t bi sec t run COMANDO
O G i t u s a o v a l o r d e r e t o r n o d o c o m a n d o u t ili z a d o , n o r m a l m e n t e u m n i c o script, p a r a d e ci dir s e u m a m u d a n a g o o d o u b a d : o c o m a n d o d e v e ter mi n ar ret or n a n d o c o m o c dig o 0 s e for g o o d , 1 2 5 s e a m u d a n a for ign or v el e q u alq u er c ois a e ntre 1 e 1 2 7 s e f or b a d . U m v al or n e g a tiv o a b o rt a r a bi s s e c o. P o d e s e f a z e r m u i t o m a i s : a p g i n a d e a j u d a e x p li c a c o m o v i s u a li z a r b i s s e c e s , e x a m i n a r o u r e p r o d u z i r o log d a b i s s e c o , e e li m i n a r m u d a n a s c o n h e c i d a m e n t e in o c e nt e s p a r a a c el er a r a b u s c a.
Magia Gi t
29
q u e m a r c a c a d a li n h a d o a r q u i v o i n d i c a d o m o s t r a n d o q u e m o m o d i fi c o u p o r l ti m o e q u a n d o . A o c o n t r ri o d e o u t r o s s i s t e m a s d e c o n t r o l e d e v e r s e s , e s t a o p e r a o o c o r r e o f fli n e, l e n d o a p e n a s d o d i s c o l o c a l.
Experincia pes s o al
E m e m s i s t e m a d e c o n t r o l e d e v e r s e s c e n t r a li z a d o , m o d i fi c a e s n o h i s t r i c o s o o p e r a e s d i f c e i s, e d i s p o n v e i s a p e n a s p a r a a d m i n i s t r a d o r e s . C l o n a g e m , branch e merge s o i m p o s s v e i s s e m u m a r e d e d e c o m u n i c a o . R e s t a n d o a s o p e r a e s b s i c a s : n a v e g a r n o h i s t r i c o o u f a z e r commit d a s m u d a n a s . E m a l g u n s s i s t e m a s , e x i g i d o d o u s u r i o u m c o n e x o v i a r e d e , a p e n a s p a r a v i s u a li z a r s u a s p r p r i a s m o d i fi c a e s o u a b r i r u m a r q u i v o p a r a e d i o. S i s t e m a s c e n t r a li z a d o s i m p e d e m o t r a b a l h o offline, e e x i g e m u m i n f r a e s t r u t u r a d e r e d e m a i s c a r a, e s p e c i a l m e n t e q u a n d o o n u m e r o d e d e s e n v o l v e d o r e s a u m e n t a. M a i s i m p o r t a n t e, t o d a s a o p e r a e s s o m a i s l e n t a s, a t c e r t o p o n t o, g e r a l m e n t e a t o p o n t o o n d e o s u s u ri o s e vit a m c o m a n d o s m a i s a v a n a d o s a t s e r e m a b s ol ut a m e n t e n e c e s s ri o s. E m c a s o s e x tr e m o s, e s t a a r e g r a a t p a r a a m a i o ri a d o s c o m a n d o s b s i c o s . Q u a n d o o s u s u r i o s d e v e m e x e c u t a r c o m a n d o s l e n t o, a p r o d u ti v i d a d e s o f r e p o r c a u s a d e u m a i n t e r r u p o n o fl u x o d e tr a b a l h o. J e x p e r i m e n t e i e s t e f e n m e n o n a p e l e. O G i t f o i o p r i m e i r o s i s t e m a d e c o n t r o l e d e v e r s e s q u e u s e i. E r a p i d a m e n t e c r e s c i a c o s t u m a d o a e l e, t o m a n d o m u i t a s d e s u a s c a r a c t e r s ti c a s c o m o g a r a n ti a. S i m p l e s m e n t e a s s u m i q u e o s o u t r o s s i s t e m a s e r a m s e m e l h a n t e: e s c o l h e r u m s i s t e m a d e c o n t r o l e d e v e r s e s d e v e r i a s e r i g u a l a e s c o l h e r u m n o v o e d i t o r d e t e x t o o u n a v e g a d o r p a r a internet. F i q u e i c h o c a d o q u a n d o , p o s t e r i o r m e n t e, f ui f o r a d o a u s a r u m s i s t e m a c e n t r a li z a d o . M i n h a , f r e q u e n t e m e n t e r u i m , c o n e x o c o m a i n t e r n e t p o u c o i m p o r t a c o m o G i t, m a s t o r n a o d e s e n v o l v i m e n t o i n s u p o r t v e l q u a n d o p r e c i s a s e r t o c o n fi v e l q u a n t o o d i s c o l o c a l. A l m di s s o, m e c o n d i ci o n a v a a e vit a r d e t e r m i n a d o s c o m a n d o s d e vi d o a lat n ci a e n v o l v i d a , o q u e m e i m p e d i u, e m u l ti m a i n s t a n c i a, d e c o n t i n u a r s e g u i n d o m e u fl u x o d e tr a b al h o. Q u a n d o e x e c u t a v a u m c o m a n d o l e n t o, a i n t e r r u p o n a m i n h a li n h a d e p e n s a m e n t o c a u s a v a u m e n o r m e p r e j u z o. E n q u a n t o e s p e r o a c o m u n i c a o c o m o s e r v i d o r c o n c l u ir, f a o al g o p a r a p a s s a r o t e m p o, c o m o c h e c a r e m a il o u e s c r e v e r d o c u m e n t a o. N o h o r a e m r e t o r n o a t a r e f a o r i g i n a l, o c o m a n d o j h a v i a fi n a li z a d o a m u i t o t e m p o , e p e r c o m a i s t e m p o le m b r a n d o o q u e e st a v a f a z e n d o. O s s e r e s h u m a n o s s o r ui n s c o m tro c a s d e c o n t e xt o. H o u v e t a m b m u m i n t e r e s s a n t e e f e i t o d a t r a g d i a d o s c o m u n s 22: a n t e c i p a n d o o c o n g e s t i o n a m e n t o d a r e d e, o s i n d i v d u o s c o n s o m e m m a i s b a n d a q u e o n e c e s s r i o e m v a r i a s o p e r a e s n u m a t e n t a ti v a d e r e d u z i r a t r a s o s f u t u r o s . O s e s f o r o s c o m b i n a d o s i n t e n s i fi c a m o c o n g e s t i o n a m e n t o, e n c o r a j a n d o o s i n d i v d u o s a c o n s u m i r c a d a v e z m a i s b a n d a d a p r xi m a v e z p a r a e vit ar o s lo n g o s a t r a s o s.
30
Disponibiliza o de Cdigo
P a r a m e u s p r o j e t o s, o G i t o r g a n i z a e x a t a m e n t e o s a r q u i v o s q u e q u e r o g u a r d a r e d i s p o n i b ili z a r p a r a o s u s u r i o s . P a r a c r i a r u m tarball d o c d i g o f o n t e, e x e c u t o:
$ gi t arch i ve - - format=tar - - pref i x=pro j - 1.2.3 / HEAD
N o d i r e t r i o p ro j . g i t , e x e c u t e:
$ gi t - - bare update- server - in f o $ chmod a+x hooks/pos t - update
D o s e u c o m p u t a d o r, f a a u m pu sh v i a s s h :
$ gi t push serv i do r .web: / caminho/para /p ro j . g i t master
o s o u t r o s p e g a m s e u p r o j e t o v i a:
$ gi t clone http : / / s e r v i do r .web/pro j . g i t
Magia Gi t
31
O d e s t i n a t r i o p o d e f a z e r i s t o a t n u m r e p o s i t r i o v a z i o. A p e s a r d o s e u t a m a n h o , nomedopaco te c o n t m t o d o o r e p o s i t r i o G i t o r i g i n a l. E m p r oj et o s g r a n d e s, di m i n u a o s r e s d u o s e m p a c o t a n d o a p e n a s a s m u d a n a s q u e e s t o f a l t a n d o n o o u t r o r e p o s i t r i o:
$ gi t bundle create nomedopacote HEAD ^COMMON_SHA1
e c r i e u m n o v o bundle c o m a s n o v i d a d e s :
$ gi t bundle create novobundle HEAD ^ul t imobundle
32 V o c p o d e e x e c ut ar ist o e m a p e n a s u m p a s s o c o m:
$ gi t l s - f i l e s
No perca a CA B E A (HEAD )
A e t i q u e t a HEAD (ca b e a l h o) c o m o u m i n d i c a d o r q u e n o r m a l m e n t e a p o n t a p a r a o l ti m o c o m m i t, a v a n a n d o a c a d a n o v o commit. A l g u n s c o m a n d o s d o G i t p e r m i t e m m o v el a. P o r e x e m p l o:
$ gi t reset HEAD~3
Magia Gi t
33
M a s c o m o s e f a z p a r a v o l t a r p a r a o f u t u r o ? O s l ti m o s commit n o s a b e m d o f u t u r o. S e v o c t e m o S H A 1 d o HEAD o r i g i n a l e n t o:
$ gi t reset SHA1
Explorando o HEAD
T a l v e z O RIG_HEAD n o s e j a s u f i c i e n t e. T a l v e z v o c s t e n h a p e r c e b i d o q u e f e z u m e r r o d e s c o m u n a l e p r e c i s a v o l t a r p a r a u m a n t i g o commit d e u m branch h m u i t o e s q u e ci d o. N a c o n f i g u r a o p a d r o, o G i t m a n t m u m commit p o r p e l o m e n o s d u a s s e m a n a s , m e s m o s e v o c m a n d o u o G i t d e s t r u i r o branch q u e o c o n t m . O p r o b l e m a a c h a r o hash c e r t o. V o c p o d e p r o c u r a r p o r t o d o s o s v o l a r e s d e hash e m . g i t / ob jec t s e p o r t e n t a t i v a e e r r o e n c o n t r a r o q u e p r o c u r a. M a s h u m m o d o m a i s f c il. O G i t g u a r d a r o hash d e t o d o s o s commit q u e e l e c a l c u l a e m . g i t / l o g s . O s u b -d i r e t r i o re f s c o n t m o h i s t r i c o d e t o d a a t i v i d a d e e m t o d o s o s branch, e n q u a n t o o a r q u i v o HEAD m o s t r a t o d o s o s v a l o r e s d e hash q u e t e v e. E s t e l ti m o p o d e s e r u s a d o p a r a e n c o n t r a r o hash d e u m commit n u m branch q u e t e n h a s i d o a c i d e n t a l m e n t e a p a g a d o . O c o m a n d o re f l o g f o r n e c e u m a i n t e r f a c e a m i g v e l p a r a e s t e s a r q u i v o s d e log. E x p e ri m e nt e
$ gi t ref l o g
A o i n v s d e c o p i a r e c o l a r o hash d o re f l o g , t e n t e :
$ gi t checkout "@{10 minutes ago} "
s i g n i fi c a q u e u m commit a p a g a d o s e r p e r m a n e n t e m e n t e e li m i n a d o a p s s e p a s s a d o s 3 0 d i a s e e x e c u t a d o o c o m a n d o g i t gc.
34 V o c t a m b m p o d e d e s a t i v a r a s e x e c u e s a u t o m t i c a s d o g i t gc:
$ gi t coni f g gc.auto 0
a s s i m o s commit s s e r o p e r m a n e n t e m e n t e e li m i n a d o s q u a n d o e x e c u t a d o o g i t gc m a n u a l m e n t e.
Ba s e a nd o se no Git
S e g u i n d o o j eit o UNIX 26 d e s e r, o G i t p e r m i t e s e r f a c il m e n t e u tili z a d o c o m o u m c o m p o n e n t e d e b a i x o n v e l p a r a o u t r o s p r o g r a m a s . E x i s t e m i n t e r f a c e s GUI, i n t e r f a c e s web, i n t e r f a c e s a l t e r n a t i v a s p a r a li n h a d e c o m a n d o e t a l v e z e m b r e v e v o c c ri e u m script o u d o i s p a r a s u a s n e c e s s i d a d e s u s a n d o o G i t. U m t r u q u e s i m p l e s c ri a r a l i a s , a b r e v i a e s , i n t e r n o s a o G i t p a r a r e d u z i r o s c o m a n d o s u t ili z a d o s m a i s fr e q u e n t e m e n t e:
$ gi t conf i g - - globa l al i a s . c o checkout $ gi t conf i g - - globa l - - get - regexp al i a s al i a s . c o checkout $ gi t co foo # exibe os al i a s cr i ados checkout foo '
O u t r a i m p r i m i r o branch a t u a l n o prompt, o u n o t t u l o d a j a n e l a. s i n v o c a r
$ gi t symbol i c - ref HEAD
m o s t r a o n o m e d o branch a t u a l. N a p r ti c a, m u i t o p r o v a v e l m e n t e v o c n o q u e r v e r o / re f s /head s e i g n o r a r o s e r r o s :
$ gi t symbol i c - ref HEAD 2> /dev /nu l l | cut - b 12-
V ej a a p gi n a d o G it p a r a m a i s e x e m p l o s.
P o r o u t r o l a d o , s e f o r e s p e c i fi c a d o a l g u m e n d e r e o e m p a r ti c u l a r p a r a o checkout,
26 htt p://pt. wi ki p e d i a . o r g/ w i k i/U n i x
Magia Gi t
35
Branch: A p a g a r u m branch f a l h a s e i s t o l e v a r a p e r d a d a s m o d i fi c a e s . P a r a f o r a r, d i g i t e:
$ gi t branch - D BRANCH # ao invs de usar - d
A o c o n t r r i o d o checkout e d o reset, e s t e s d o i s c o m a n d o s a d i a r o a d e s t r u i o d o s d a d o s . A s m o d i fi c a e s a i n d a s e r o a r m a z e n a d a s n o s u b d i r e t r i o . g i t , e p o d e m s e r r e s g a t a d o s , r e c u p e r a n d o o hash a p r o p r i a d o d o . g i t / l o g s (vej a a s e o " E x p l o r a n d o o H E A D " a c i m a). P o r p a d r o , e l e s s e r o m a n t i d o s p o r p e l o m e n o s d u a s s e m a n a s . Clean: A l g u n s c o m a n d o s d o G i t r e c u s a m-s e a a v a n a r d e v i d o o r e c e i o d e s o b r e s c r e v e r a r q u i v o s n o m o n i t o r a d o s (se m commit). S e v o c ti v e r c e r t e z a d e q u e t o d o s o s a r q u i v o s e d i r e t r i o s n o m o n i t o r a d o s s o d i s p e n s v e i s, e n t o a p a g u e-o s s e m m i s e r i c r d i a c o m :
$ gi t clean - f - d
D a p r x i m a v e z , o m a l d i t o c o m a n d o n o s e r e c u s a r a f u n c i o n a r!
36
Segredos Revelados
Segredos Revelados
V a m o s d a r u m a e s p i a d a s o b o c a p o e e x p li c a r c o m o o G i t r e a li z a s e u s m i l a g r e s . S e r u m a e x p l i c a o s u p e r fi c i a l. P a r a d e t a l h e s m a i s a p r o f u n d a d o s c o n s u l t a r o m a n u a l d o u s u r i o 27.
Invisibilidade
C o m o p o d e o G i t s e r t o d i s c r e t o? F o r a o c a s i o n a i s commit e merge, v o c p o d e tr a b al h a r c o m o s e d e s c o n h e c e s s e q u e e xi st e u m c o n tr ol e d e v e r s e s. I st o , a t q u e p r e c i s e d e l e , e q u a n d o v o c fi c a r a g r a d e c i d o a o G i t p o r e s t a r v i g i a n d o o q u e f a z o t e m p o t o d o. O u t r o s s i s t e m a s d e c o n t r o l e d e v e r s e s n o d e i x a m v o c e s q u e c e-l o s. A s p e r m i s s e s d o s a r q u i v o s s o a p e n a s d e l eit u r a, a m e n o s q u e v o c d i g a a o s e r v i d o r q u a i s a r q u i v o s t e m a i n t e n o d e e d i t a r. O s e r v i d o r c e n t r a l e s t a r m o n i t o r a n d o a s a e s d e q u e m f e z o checkout e q u a n d o . Q u a n d o a r e d e c a ir, v o c t e r u m s o f ri m e n t o r e p e n t i n o . D e s e n v o l v e d o r e s c o n s t a n t e m e n t e b r i g a m c o m a b u r o c r a c i a e a burrocracia v i r t u a l. O s e g r e d o o d i r e t r i o . g i t n o s e u d i r e t ri o d e t r a b a l h o. O G i t g u a r d a o h i s t r i c o d o s e u p r o j e t o n e l e. O . n o i ni c i o d o n o m e e s c o n d e e l e d e u m a li s t a g e m l s n o r m a l. E x c e t o q u a n d o v o c e s t a f a z e n d o u m push o u pull d a s m o d i fi c a e s , t o d a s a s o p e r a e s d e c o ntr ol e d e v e r s e s s o n e st e dir et ri o . V o c t e m c o n t r o l e t o t a l s o b r e o d e s ti n o d o s s e u s a r q u i v o s p o i s o G i t n o s e i m p o r t a c o m o q u e f a z a e l e s . O G i t p o d e f a c il m e n t e r e c r i a r u m e s t a d o s a l v o a p a r ti r d o . g i t a q u a l q u e r h o r a.
Integridade
A m a i o r i a d a s p e s s o a s a s s o c i a m c r i p t o g r a fi a c o m m a n t e r i n f o r m a e s s e c r e t a s , m a s o u tr a a p li c a o ig u al m e n t e i m p o rt a n t e m a n t e r a i nt e g ri d a d e d a i nf o r m a o. O u s o c o r r e t o d a s f u n e s c ri p t o g r fi c a s d e hash p o d e m p r e v e n i r o c o r r u p o a c i d e n t a l o u int e n ci o n al d o s d a d o s . U m hash S H A 1 p o d e s e r e n t e n d i d o c o m o u m n m e r o i d e n t ifi c a d o r n i c o d e 1 6 0 bits p a r a c a d a s e q u n c i a d e bytes q u e v o c v a i e n c o n t r a r n a v i d a. N a v e r d a d e m a i s q u e i s s o : p a r a c a d a s e q u n c i a d e bytes q u e q u a l q u e r s e r h u m a n o j a m a i s u s a r d u r a n t e v r i a s v i d a s . O hash d e t o d o o c o n t e d o d e u m a r q u i v o p o d e s e r v i s t o c o m o u m i d e n t ifi c a d o r nic o p ar a o m e s m o . U m a o b s e r v a o i m p o r t a n t e q u e u m hash S H A 1 , e l e m e s m o , u m a s e q u n c i a d e bytes, a s s i m n s p o d e m o s g e r a r u m hash d e s e q u n c i a s d e bytes f o r m a d a p o r o u t r o s hash.
27 htt p://ww w . k e r n e l . o r g/p u b/s o f t w a r e/ s c m/ gi t/d o c s/u s e r- m a n u a l . h t m l
Magia Gi t
37
A gr o s s o m o d o, to d o s o s ar q uiv o s m a ni p ul a d o s p el o G it s o ref er e n cia d o s p el o s e u i d e n t i fi c a d o r n i c o, e n o p o r s e u n o m e . T o d o s o s d a d o s e s t o e m a r q u i v o s n o s u b d i r e t r i o . g i t / ob j e c t s , o n d e n o h n e n h u m a r q u i v o c o m n o m e s n o r m a i s. O c o n t e d o s o s e q u n c i a s d e b y t e s c h a m a d o s d e blob e e l e s n o t e m r e l a o c o m s e u s n o m e s. S e u s n o m e s s o r e g i s t r a d o s e m o u t r o l u g a r. E l e s e s t o n o s o b j e t o s tree, q u e s o li s t a s d o s n o m e s d o s a r q u i v o s f o r m a d o s c o m o s i d e n tifi c a d o r e s d e s e u s c o n t e d o s . U m a v e z q u e o tree u m a s e q u n c i a d e bytes, e l e t a m b m t e m u m i d e n t ifi c a d o r n i c o, q u e c o m o e l e a r m a z e n a d o n o s u b d i r e t r i o . g i t / ob j e c t s . O b j e t o s Tree p o d e m a p a r e c e r n a li s t a d e o u t r o tree, l o g o, u m d i r e t ri o tree e t o d o s o s s e u s a r q u i v o s p o d e m r e p r e s e n t a d o s p o r o b j e t o s tree e blob. F i n a l m e n t e, u m commit c o n t m u m m e n s a g e m , a l g u n s i d e n tifi c a d o r e s tree e a i n f o r m a o d e c o m o e l e s e s t o r e l a c i o n a d o s e n t r e s i. U m commit t a m b m u m s e q u n c i a d e bytes, l o g o, p o s s u i u m i d e n t ifi c a d o r n i c o . V e j a v o c m e s m o : p e g u e q u a l q u e r hash d o d i r e t ri o . g i t / o b j e c t s , d i g i t e
$ gi t cat - f i l e - p SHA1_HASH
Inteligncia
C o m o o G it s a b e q u e u m a r q ui v o f oi r e n o m e a d o, m e s m o s e v o c n u n c a m e n ci o n o u o f a t o e x p l i c i t a m e n t e ? C o m c e r t e z a, v o c e x e c u t o u g i t mv, m a s i s t o e x a t a m e n t e o m e s m o q u e u m g i t rm s e g u i d o p o r u m g i t a d d . A a n a l i s e h e u r s ti c a d o G i t v e r i fi c a a l m d a s a e s d e r e n o m e a r e d e c o p i a s s u c e s s i v a s e n t r e v e r s e s . D e f a t o, e l e p o d e d e t e c t a r p e d a o s d e c d i g o s e n d o m o v i d o s o u c o p i a d o s e n t r e a r q u i v o s! E m b o r a n o c u b r a t o d o s o s c a s o s , f a z u m tr a b a l h o d e c e n t e, e e s t a c a r a c t e r s ti c a e s t s e n d o s e m p r e a p r i m o r a d a . C a s o n o f u n c i o n e c o m v o c , t e n t e h a b i lit a r o p e s m a i s r e fi n a d a s p a r a d e t e c o d e c p i a s e c o n s i d e r e u m a a t u a li z a o .
Indexando
P a r a c a d a a r q ui v o m o n it or a d o, o G it a r m a z e n a inf or m a e s c o m o: t a m a n h o, h o r a d e
38
Segredos Revelados
c r i a o e l ti m a m o d i fi c a o, e m u m a r q u i v o c o n h e c i d o c o m o index. P a r a d e t e r m i n a r s e u m a r q u i v o f o i m o d i fi c a d o , o G i t c o m p a r a s e u s s t a t u s a t u a l c o m o q u e t e m n o index. S e c o i n c i d e m , e n t o e l e p o d e i g n o r a r o a r q u i v o. J q u e v e r i fi c a e s d e s t a t u s s o i m e n s a m e n t e m a i s b a r a t a s q u e l e r o c o n t e d o d o a r q u i v o , s e v o c e d i t a r p o u c o s a r q u i v o s , o G i t v a i a t u a li z a r s e u s s t a t u s q u a s e q u e i n s t a n t a n e a m e n t e.
Origem do Git
E s t a m e n s a g e m n a li s t a d e d i s c u o d o L i n u x K e r n e l 2 8 d e s c r e v e a s e q u n c i a d e e v e n t o s q u e l e v a r a m a o G i t. A d i s c u s s o i n t e i r a u m s i ti o a r q u e o l g i c o f a s c i n a n t e p a r a h i s t o r i a d o r e s d o G i t.
Magia Gi t
39
Microsoft Windows
O G i t n o Microsoft Windows p o d e s e r tr a b a l h o s o : C y g w i n 3 0 , u m a m b i e n t e q u e d e i x a o Windows p a r e c i d o c o m o Linux, t e m u m a v e r s o d o G it p a r a W i n d o w s 31. G i t n o M S y s 3 2 u m a l t e r n a ti v a q u e r e q u e r s u p o r t e m i n i m o p a r a e x e c u o , e m b o r a a l g u n s p o u c o s c o m a n d o s p r e c i s e m s e r m a i s tr a b a l h a d o s .
Arquivos Independente s
S e s e u pr ojeto m uito gr a n d e e te m m uito s ar q uiv o s ind e p e n d e nt e s q u e e st o s e n d o c o n s t a n t e m e n t e m o d i fi c a d o s , o G i t p o d e s e r p r e j u d i c a d o m a i s d o q u e o u t r o s s i s t e m a s , p o i s o s a r q u i v o s n o s o m o n i t o r a d o s i s o l a d a m e n t e. O G i t m o n i t o r a m o d i fi c a e s n o p r o j e t o c o m o u m t o d o, o q u e g e r a l m e n t e b e n f i c o. U m a s ol u o di vi dir s e u p r oj et o e m p e d a o s, c a d a u m c o m p o s t o d e a r q ui v o s r e l a c i o n a d o s . U s e g i t s ubmodu l e s e a i n d a q u i s e r m a n t e r t u d o n u m r e p o s i t ri o s .
40 e s t i v e r e d i t a n d o u m a r q u i v o.
Arquivo do Histrico
A s s i m q u e o G i t a r m a z e n a m o d i fi c a e s m u i t o a m p l a s n o p r o j e t o, r e c o n s t r u i r o h i s t ri c o d e u m n i c o a r q u i v o r e q u e r m a i s tr a b a l h o d o q u e e m s i s t e m a s d e a r q u i v o s d e m o n i t o r a m a r q u i v o s i n d i v i d u a l m e n t e. A p e n a l i d a d e u s u a l m e n t e r p i d a, e v a l e a p e n a d e v i d o a e f i c i n c i a q u e d s o u t r a s o p e r a e s . P o r e x e m p l o, g i t c h e c k o u t t o r p i d o q u a n t o c p - a , e o s d e l t a s q u e a b r a n g e m g r a n d e s p a rt e s d o p r oj et o t e m u m a c o m p r e s s o m e l h o r d o q u e o s d elt a s d e a g r u p a m e n t o s d e a r q ui v o s.
Clone Inicial
A c ri a o d e u m c l o n e m a i s tr a b a l h o s o d o q u e f a z e r checkout e m o u t r o s s i s t e m a s d e c o n t r o l e d e v e r s e s q u a n d o h u m h i s t ri c o g r a n d e . O c u s t o ini ci al s e p a g a a lo n g o p r a z o, p o i s a s f ut u r a s o p e r a e s s e r o m a i s r pi d a s e o f fli n e. E n t r e t a n t o, e m a l g u m a s s i t u a e s , p r e f e r v e l c r i a r u m c l o n e o c o c o m a o p o - - d e p t h . I s t o m u i t o m a i s r p i d o, p o r m r e s u l t a e m u m c l o n e c o m f u n c i o n a li d a d e s r e d u zi d a s.
Projetos Volteis
O G i t f o i f eit o p a r a s e r r p i d o n o q u e d i z r e s p e i t o a o t a m a n h o d a s m u d a n a s . H u m a n o s f a z e m p o u c a s e d i e s d e v e r s o p r a v e r s o . a c o r r e o d e u m a f a l h a n u m a li n h a, u m a n o v a c a r a c t e r s ti c a d o s i s t e m a , i n c l u s o d e c o m e n t r i o e a s s i m p o r d i a n t e. M a s s e s e u s a r q u i v o s d i f e r e m m u i t o d e u m a v e r s o p a r a o u t r a, e m c a d a commit, s e u h i s t r i c o ir c r e s c e r a c o m p a n h a n d o o t a m a n h o d o s e u p r o j e t o t o d o. N o h n a d a q u e q u a l q u e r s i s t e m a d e c o n t r o l e d e v e r s e s p o s s a f a z e r p r a a j u d a r, m a s o s u s u r i o s p a d r e s d o G i t d e v e m s o f r e r m a i s q u a n d o e s ti v e r e m c l o n a n d o h i s t r i c o s . A s r a z e s p e l a s q u a i s a s m u d a n a s s o t o g r a n d e s , d e v e m s e r a n a li s a d a s . T a l v e z o s f o r m a t o s d o s a r q u i v o s p o s s a s e r tr o c a d o . E d i e s m e n o r e s s d e v e m c a u s a r p e q u e n a s m o d i f i c a e s e m p o u c o s a r q u i v o s. O u t a l v e z u m b a n c o d e d a d o s o u u m a s o l u o d e backup/ar q u i v a m e n t o s e j a o q u e v o c r e a l m e n t e p r e c i s a, e n o u m s i s t e m a d e c o n t r o l e d e v e r s e s . P o r e x e m p l o, u m c o n t r o l e d e v e r s e s p o d e s e r a d e q u a d o p a r a g e r e n c i a r f o t o s f e it a s p e r i o d i c a m e n t e d e u m a webcam. S e o s a r q u i v o s e s t o, r e a l m e n t e, m u d a n d o c o n s t a n t e m e n t e e p r e c i s a m s e r v e r s i o n a d o s , u m a p o s s i b ili d a d e u s a r o G i t d e u m a m a n e i r a c e n t r a li z a d a. P o d e-s e c ri a r c l o n e s o c o s , q u e a d i c i o n a p o u c o o u q u a s e n a d a a o h i s t ri c o d o p r o j e t o. c l a r o, q u e m u i t a s f e r r a m e n t a s d o G i t s e tr o n a r a m i n a d e q u a d a s , c o r r e e s d e v e m s e r e n v i a d a s c o m o
Magia Gi t
41
Contador Global
A l g u n s s i s t e m a s c e n t r a li z a d o s d e c o n t r o l e d e v e r s e s m a n t m u m n m e r o i n t e i r o p o s i ti v o q u e i n c r e m e n t a d o q u a n d o u m n o v o commit a c e i t o. O G i t r e f e r e n c i a a s m o d i f i c a e s p o r s e u s hash, o q u e o m e l h o r n a m a i o r i a c i r c u n s t n c i a s. M a s a l g u m a s p e s s o a s g o s t a ri a m d e t e r e s t e n m e r o p o r p e r t o. F e li z m e n t e, f c il c r i a r u m script q u e f a a i s s o a c a d a a t u a li z a o, o r e p o s i t ri o c e n t r a l d o G i t i n c r e m e n t a o n m e r o , o u t a l v e z u m a m a r c a, e a s s o c i a a m e s m a c o m o hash d o l ti m o commit. C a d a c l o n e p o d e r i a g e r e n c i a r e s t e c o n t a d o r, p o r m i s t o p r o v a v e l m e n t e s e j a d e s n e c e s s r i o, j q u e a p e n a s o c o n t a d o r d o r e p o s i t ri o c e n t r a l q u e i m p o r t a r p a r a t o d o s.
Subdiretrios Vazios
S u b d i r e t ri o s v a z i o s n o s o m o n i t o r a d o s . C r i e a r q u i v o s v a z i o s p a r a r e s o l v e r e s s e pr o b l e m a. A a t u a l i m p l e m e n t a o d o G i t, e n o s e u o design, a r a z o d e s t e i n c o n v e n i e n t e. C o m s o r t e, u m a v e z q u e o G i t g a n h e m a i s tr a o , m a i s u s u r i o s d e v e m c l a m a r p o r e s s e r e c u r s o e el e p o d e r s e r i m pl e m e n t a d o.
Commit Inicial
U m c i e n t i s t a d a c o m p u t a o ti pi c o i ni c i a u m a c o n t a g e m d o 0, a o i n v s d o 1 . E n t r e t a n t o, n o q u e d i z r e s p e i t o a commit, o G i t n o s e g u e e s t a c o n v e n o . M u i t o c o m a n d o s s o c o n f u s o s a n t e s d o commit i ni c i a l. A l m d i s s o e x i s t e m a l g u m a s a r e s t a s q u e p r e c i s a m a p a r a d a s m a n u a l m e n t e, s e j a c o m u m rebase d e u m branch c o m u m commit i n i c i a l d i f e r e n t e. H b e n e f c i o s a o G i t p o r d e f i n i r o commit z e r o: a s s i m q u e u m r e p o s i t ri o c o n s t r u d o , o H EAD s e r d e f i n i d o p a r a u m a s e q u n c i a c o n s tit u d a d e 2 0 bytes z e r o. E s t e commit e s p e c i a l r e p r e s e n t a u m tree v a z i o, s e m p r e d e c e s s o r, n u m m o m e n t o a n t e ri o r a t o d o s o s
42 r e p o s i t ri o s G i t.
S e e m s e g u i d a f o r e x e c u t a d o p o r e x e m p l o, o g i t l o g , s e r i n f o r m a d o a o u s u r i o q u e a i n d a n o f o i r e a li z a d o n e n h u m commit, a o i n v s d e t e r m i n a r d e v i d o u m e r r o f a t a l. S i m i l a r a o u tr a s f err a m e n t a s. T o d o s commit i ni c i a l i m p li c it a m e n t e u m d e s c e n d e n t e d e s t e commit z e r o. P o r e x e m p l o, f a z e n d o u m rebase n u m branch n o m o n i t o r a d o p o d e o c a s i o n a r u m e n x e r t o d e t o d o o branch n o d e s ti n o. A t u a l m e n t e, t o d o s , i n c l u s i v e o commit i ni c i a l, s e r o e n x e r t a d o s , r e s u l t a n d o n u m c o n flit o d e merge. U m a s o l u o u s a r g i t c h e c k o u t s e g u i d o d e g i t c o m m i t - C n o commit i ni c i a l, e u m rebase n o r e s t a n t e. I n f e li z m e n t e h c a s o s p i o r e s . S e v r i o s branch c o m d i f e r e n t e s commit i ni c i a i s f o r e m m e s c l a d o s (merge), e n t o u m rebase d o r e s u l t a d o v a i r e q u e r u m a s u b s t a n c i a l i n t e r v e n o m a n u a l.