This presentation talks about how to start a project using git. From installation and configuration, through concepts of structure commits, index management, stash, branch, merge, rebase, remote repositories and extra themes.
Git é um filesystem distribuído. Ou seja não só códigos fontes, e sim qualquer tipo de arquivos. Muito eficiente e confiável. Utiliza para identificação dos commits. Dificilmente ocorre perca de arquivos no git. Subversion SHA1
g i t c o n f i g - - g l o b a l u s e r . n a m e " v a g n e r v j s " g i t c o n f i g - - g l o b a l u s e r . e m a i l " v a g n e r v j s @ g m a i l . c o m " c a t / U s e r s / v a g n e r / . g i t c o n f i g / / a r q u i v o . g i t c o n f i g c o l o r : a u t o
como new file, ou seja, a serem adicionados no próximo commit. Retirar do índice Commit Log g i t a d d . f i l e . t x t / / a p e n a s a r q u i v o f i l e . t x t g i t a d d . " * . t x t " / / t o d o s a r q u i v o s . t x t g i t a d d . / / T o d o s a r q u i v o s d o w o r k i n g d i r e c t o r y g i t r m - - c a c h e d f i l e . t x t g i t c o m m i t - m " P r i m e i r o c o m m i t " g i t l o g
adicionar os arquivos ficam como new file, ou seja, a serem adicionados no próximo commit. Branch e tags apontam sempre para commits Commits posuem um identificador em SHA1, o que torna praticamente impossível conflito de commits. Mesmo utilizando trechos do SHA1 (até 5 caracteres no máximo), ainda assim é possível identificar o commit. O git nunca duplica conteúdos entre commits, apenas faz referência ao blob do commit anterior e adiciona os novos arquivos.
para voltar ao ínicio (antes de modificiar o arquivo file.txt) Para todos os arquivos M o f i c a ç ã o n o a r q u i v o f i l e . t x t g i t a d d f i l e . t x t g i t r e s e t H E A D f i l e . t x t g i t c h e c k o u t - - f i l e . t x t g i t r e s e t H E A D / / t o d o s o s a r q u i v o s v o l t a m p a r a s t a t u s u n t r a c k e d
destrutiva mas não é: Voltar arquivos de commit para o índice g i t r e s e t H E A D ~ 1 - - h a r d / / a g o r a a c a b e ç a a p o n t a p a r a o c o m m i t a n t e r i o r g i t r e f l o g / / g u a r d a t o d a s a s c o i s a s q u e f o r a m j o g a d a s f o r a g i t m e r g e < s h a 1 d o c o m m i t d e s e j a d o > g i t r e s e t H E A D ~ 1
um pedido para resolver um bug. Não é viável fazer um commit neste momento pois a funcionalidade não está pronta. Para auxiliar situações como essa, existe uma quarta área (temporária) no git, chamada stash.
após corrigir o bug descrito na situação acima Removendo stash g i t s t a s h g i t s t a s h l i s t g i t s t a s h a p p l y g i t s t a s h c l e a r
stash g i t s t a s h s a v e " f a z e n d o a l g o " g i t s t a s h a p p l y s t a s h @ [ 0 ] / / v o l t a p a r a o s t a s h d e s e j a d o g i t s t a s h p o p / / t i r a d a l i s t a , a p l i c a e a p a g a o s t a s h g i t s t a s h d r o p s t a s h { 0 } / / r e t i r a d a l i s t a d e s t a s h
desenvolvimento. Troca de contexto sem atrito Criando branch chamando "desenvolvimento" Trocando de master para "desenvolvimento" Listando g i t c h e c k o u t - b " d e s e n v o l v i m e n t o " g i t c h e c k o u t d e s e n v o l v i m e n t o g i t b r a n c h
"desenvolvimento") para o master Removendo branch GUI para visualização Mesclando pequenos commits em um único g i t l o g - - g r a p h g i t c h e c k o u t m a s t e r g i t m e r g e d e s e n v o l v i m e n t o g i t g i t b r a n c h - d d e s e n v o l v i m e n t o g i t k - - a l l & g i t m e r g e < b r a n c h > - - s q u a s h
alguém alterou o master O que deve ser feito é: manter sempre o branch atual atulizado pelo master. Se existir um conflito, ou seja, arquivo local é diferente do arquivo que está no master, o arquivo deve ser analizado e depois de corrigir o conflito: g i t r e b a s e m a s t e r g i t r e b a s e - - c o n t i n u e
remoto, deve ser feito merge, pois o rebase é destruitivo. Com rebase a linha de histório é reta, com merge é criado um desvio. Merge traz os commits e adiciona mais um no final. Rebase junta todos os commits linearmente.
a partir de branch remoto Exibindo braches locais e remotos Enviando para repositório remoto g i t c l o n e t e s t e / . g i t t e s t e 2 g i t r e m o t e g i t r e m o t e s h o w o r i g i n g i t c h e c k o u t - b d e s e n v o l v i m e n t o o r i g i n / d e s e n v o l v i m e n t o g i t b r a n c h - a g i t p u s h o r i g i n m a s t e r
local e um servidor remoto. Criando repositório no servidor Adicionando permissão de acesso Chave ssh no usuário m k d i r t e s t e . g i t c d t e s t e . g i t g i t i n i t - - b a r e c d ~ / . s s h e c h o " c h a v e r s a d o u s u a r i o " > > a u t o r i z e d _ k e y s c a t ~ / . s s h / i d _ r s a . p u b
alterações do repositório remoto para um branch especial Fech seguido de merge g i t r e m o t e a d d o r i g i n v a g n e r @ 1 7 2 . 1 6 . 1 0 0 . 1 9 8 : / h o m e / g i t / r e p o s i t o r i o s / t e s t e . g i t g i t f e c h o r i g i n m a s t e r g i t p u l l
1 . 0 g i t p u s h o r i g i n v 1 . 0 g i t p u s h - - t a g s g i t - b < b r a n c h > v 0 . 8 g i t l o g - - s t a s h g i t l o g - - p r e t t y = o n e l i n e g i t l o g - - p r e t t y = f o r m a t : " [ % a n % a d ] % h - % s " g i t l o g - - p r e t t y = f o r m a t : " % h - % s " - - g r a p h g i t l o g - - s i n c e = 3 0 . m i n u t e s g i t l o g - - s i n c e = 4 . h o u r s - - u n t i l = 2 . h o u r s g i t l o g - - s i n c e = 4 . h o u r s - - u n t i l = 2 . h o u r s - - b e f o r e = " 2 0 1 3 - 0 3 - 1 5 "
projeto É fácil, basta usar frequentemente Facilita contribuição em projetos open source é a melhor forma de mostrar seu trabalho como desenvolvedor, seja para empresas ou pessoas Github