Home

PDF file

image

Contents

1. a corre o de uma falha numa linha uma nova caracter stica do sistema inclus o de coment rio e assim por diante Mas se seus arquivos diferem muito de uma vers o para outra em cada commit seu hist rico ir crescer acompanhando o tamanho do seu projeto todo 50 Cap tulo 9 Ap ndice A Defici ncias do Git N o h nada que qualquer sistema de controle de vers es possa fazer para ajudar mas os usu rios comuns do Git devem sofrer mais quando estiverem clonando hist ricos As raz es pelas quais as mudan as s o t o grandes devem ser analisadas Talvez os formatos dos arquivos possam ser trocados Edi es menores s devem causar pequenas modifica es em poucos arquivos Ou talvez um banco de dados ou uma solu o de backup arquivamento seja o que voc realmente precisa e n o um sistema de controle de vers es Por exemplo um controle de vers es pode n o ser adequado para gerenciar fotos feitas periodicamente de uma webcam Se os arquivos est o realmente mudando constantemente e precisam ser versionados uma possibilidade usar o Git de uma maneira centralizada Pode se criar clones vazios que adiciona pouco ou quase nada ao hist rico do projeto claro que muitas ferramentas do Git n o estar o dispon veis e as corre es devem ser enviadas como patch Isto deve ser razoavelmente til para algu m que deseja manter um hist rico de arquivos demasiadamente inst veis Outro exemplo um projeto
2. Vamos dizer que estamos no ramo branch master Ent o podemos ramificar git checkout b part2 Em seguida trabalhamos na parte 2 fazendo commit das altera es durante o desenvolvimento Mas errar humano e frequentemente voc vai querer retornar e corrigir alguma coisa na parte 1 Se voc estiver com sorte ou for realmente bom pode saltar esses comandos git checkout master Go back to Part I fix_problem git commit a Commit the fixes git checkout part2 Go back to Part II git merge master Merge in those fixes 20 Cap tulo 4 Bruxarias com branch Eventualmente quando a parte 1 for aprovada Go back to Part I Release to the world git checkout master submit files git merge part2 git branch d part2 Merge in Part II Ur WWW Delete part2 branch Agora voc estar no ramo master novamente com a parte 2 no diret rio de trabalho f cil de estender esse truque para qualquer n mero de partes f cil tamb m fazer branching retroativos suponha que voc percebeu tardiamente que deveria ter criado um branch 7 commits atr s Ent o digite git branch m master part2 Rename master branch to part2 git branch master HEAD 7 Create new master 7 commits upstream O branch master agora cont m somente a parte 1 e o branch part2 cont m todo o resto Estamos no ultimo branch criamos o master sem mudar para ele porque queremos continuar a trabal
3. projeto tem muitos desenvolvedores n o fa a nada Cada clonagem do seu c digo um backup efetivo E n o apenas uma c pia do estado atual e sim o hist rico completo do seu projeto Gra as ao hash criptogr fico se alguma clonagem for corrompida ela ser identificada assim que tentar se comunicar com as outras Se seu projeto n o t o popular encontre quantos servidores puder para hospedar seus clones Um paran ico verdadeiro sempre anotar os ltimos 20 byte do hash SHA1 do cabe alho HEAD em algum lugar seguro Tem que ser seguro e n o privado Por exemplo public lo em um jornal funciona bem pois muito dif cil para um atacante alterar todas as c pias de um jornal 3 8 Multitarefa na velocidade da luz Digamos que voc queira trabalhar em diversas fun es em paralelo Ent o fa a um commit do seu projeto executando S git clone some new directory Gra as aos hardlinking http en wikipedia org wiki Hard link os clones locais necessitam de menos tempo e espa o do que os backups comuns 13 Cap tulo 3 Um pouco de clonagem Agora voc pode trabalhar em duas fun es independentes de forma simult nea Por exemplo pode editar um clone enquanto o outro est sendo compilado A qualquer momento voc pode fazer um commit e pegar pull as altera es de outro clone S git pull the other clone HEAD 3 9 Controle de Vers es de Guerrilha Voc est trabalhando em um projeto que util
4. rios a partir dos quais eu possa fazer um pull Alguns servi os hospedeiros de Git permite que voc hospede seu pr prio fork de um projeto com o clique de um bot o Ap s ter buscado fetch uma rvore eu executo comandos Git para navegar e examinar as altera es que idealmente est o bem organizadas e bem descritas Fa o merge de minhas pr prias altera es e talvez fa a edi es posteriores Uma vez satisfeito eu fa o um push para o reposit rio principal Embora eu receba infrequentes contribui es eu acredito que essa abordagem funciona bem Veja esse post do blog do Linus Torvalds http torvalds family blogspot com 2009 06 happiness is warm sem html Continuar no mundo Git mais conveniente do que fazer patch de arquivos j que ele me salva de convert los para commits Git Al m disso o Git trata dos detalhes tais como registrar o nome do autor e seu endere o de e mail bem como o dia e hora alem de pedir ao autor para descrever sua pr pria altera o 36 Cap tulo 7 Gr o Mestre Git At agora voc deve ser capaz de navegar pelas p ginas do git help e entender quase tudo Entretanto identificar o comando exato para resolver um dados problema pode ser tedioso Talvez possa economizar algum tempo seu a seguir est o algumas receitas que precisei no passado 7 1 Disponibiliza o de C digo Para meus projetos o Git organiza exatamente os arquivos que quero guardar e disponibilizar para os usu
5. salve o e mail como um arquivo e entre com git am lt email txt Isso aplica o patch de entrada e tamb m cria um commit incluindo as informa es tais como o autor Com um navegador cliente de e mail pode ser necess rio clicar o bot o para ver o e mail em seu formato original antes de salvar o patch para um arquivo Existem pequenas diferen as para os clientes de e mail baseados em mbox mas se voc utiliza algum desses provavelmente o tipo de pessoa que pode resolver os problemas sem ler o manual 6 5 Sinto muito mas mudamos Ap s fazer o clone de um reposit rio executar o git push ou git pull ir automaticamente fazer o push 33 Cap tulo 6 Git Multiplayer ou pull da URL original Como o Git faz isso O segredo reside nas op es de configura o criadas com o clone Vamos dar uma olhada git config list A op o remote origin url controla a URL de origem origin um apelido dados ao reposit rio fonte Da mesma maneira que a conven o do branch master podemos mudar ou deletar esse apelido mas geralmente n o existe um motivo para faz lo Se o reposit rio original for movido podemos atualizar a URL via git config remote origin url git new url proj git A op o branch master merge especifica o branch remoto default em um git pull Durante a clonagem inicial ele configurado para o branch atual do reposit rio fonte mesmo que o HEAD do reposit rio fonte subsequentemen
6. R S 26 X3 Fazendo hist rias e E AEE E TE A EE EEEE 26 5 6 Onde foi que tudo deu errado sariase iespoess ora paatosonesprada iiien aiene esanera raoi nibri K ispis aoristo 28 5 7 Quem fez tudo dar OO e e a esa a areae ns aE Ene AE E EEIE RES 28 5 8 Experi ncia pesso l isisisi snr ienien E Stan E SEE EES EE er E e 29 6 Git Multiplayer is sissssinieleoretrcocosrntorTnlesiatantasistodelea a icbaie Eese isentas ostasbata dele cavicbaien ndas sas E S L e eE Sees 31 eB PRO L eet ESO R A E E E E A A 31 6 2 Git sob SSH HTTP rerne n E a a CAL OnaR Ea 31 6 3 Git sobre qualquer Coisa skies nrrin snerist kesosor sotene peire tE raoe eio OEE ERES Eino oiera T Eek ESEE oe 32 6 4 Patches A mo eda Universalan rnn a i a EE E E E E a s 32 6 5 Sinto muito mas M daMO S i ere E E E E E ae rereeaaenererenancereseaneda 33 6 6 Branches REMOTOS nie aE E E E E A E E A E E Sea 34 6 7 Remotos M ltiplos ns seii areren ieee roae aoaaa iesp a EATE O EE adia pin dada ESETRE Sop ESR pe 35 6 8 Minhas preferencias ssena eero eae eos cual Eee e DER EEA SEE E ea E AEE SSE 35 7 Gr o Mestre Gito costiers soosssosssueissoosoesussestnos soosis cesoie oser sa potons nanose 00000 AU dassies oesie erori so nas as eat sn a 37 7 1 Disponibiliza o de C digo seeesesesessseeessseeerssseessressertsrersresrerrnretsreestenreensrerestnsertnsrsresen et 37 1 2 Commit do que Mudou sistiese itip ee eere r E e E E EE S abnt ari EET 37 T3 Met Comit muito G
7. arquivos podem mudar a partir da ltima libera o para a vers o experimental para a vers o atualmente em desenvolvimento ou para a vers o dos seus amigos etc 4 1 A tecla chefe Sempre joguei um desses jogos que ao apertar de um bot o a tecla chefe a tela instantaneamente mudar para uma planilha ou algo mais s rio Assim se o chefe passar pelo seu escrit rio enquanto voc estiver jogando poder rapidamente esconder o jogo Em algum diret rio echo I m smarter than my boss gt myfile txt git init git add git commit m Initial commit WU WO Ur Criamos um reposit rio Git que rastrear um arquivo texto contendo uma certa mensagem Agora digite 17 Cap tulo 4 Bruxarias com branch git checkout b boss nothing seems to change after this echo My boss is smarter than me gt myfile txt S git commit a m Another commit ficou parecendo que n s sobrescrevemos nosso arquivo e fizemos um commit Mas isto um ilus o Digite git checkout master switch to original version of the file e tcham tcham tcham O arquivo texto foi restaurado E se o chefe decidir bisbilhotar este diret rio Digite git checkout boss switch to version suitable for boss eyes Voc pode trocar entre as duas vers es do arquivo quantas vezes quiser e fazer commit independentes para cada uma 4 2 Trabalho porco Digamos que voc est trabalhando em alguma fun o e por alguma raz o pre
8. es merged de outros ramos 19 Cap tulo 4 Bruxarias com branch Podemos referenciar um pai especifico com um circunflexo Por exemplo para mostrar os logs do segundo pai git log HEAD 2 Podemos omitir o n mero para o primeiro pai Por exemplo para mostrar as diferen as com o primeiro pai S git diff HEAD Podemos combinar essa nota o com outras Por exemplo git checkout 1b6d 2 10 b ancient inicia um novo ramo ancient representando o estado 10 commit atr s para o segundo pai do primeiro pai do commit iniciando com 1b6d 4 5 Fluxo ininterrupto Frequentemente em projetos de hardware o segundo passo de um plano deve esperar que o primeiro passo termine Um carro que esta esperando uma pe a do fabricante deve permanecer na oficina at que a pe a chegue Um prot tipo deve esperar at que o chip seja fabricado para que a montagem possa continuar Os projetos de software pode ser semelhantes a isso A segunda parte de uma nova fun o pode ter que esperar at que a primeira parte seja testada e liberada Alguns projetos requerem que o c digo seja revisto antes de seu aceite de modo que voc deve esperar at que a primeira parte seja aprovada antes de iniciar a segunda parte Gra as facilidade de realizar branch e merge podemos desviar das regras e trabalhar na parte 2 antes da parte 1 estar oficialmente pronta Suponha que fizemos o commit da parte 1 e enviamos para a revis o
9. melhorando o script ou experimentando algumas mudan as eles podem ter problemas Obviamente por isso que existem ciclos de libera o Desenvolvedores podem trabalhar num projeto com frequ ncia mas s disponibilizam o c digo quando sentem que o mesmo est apresent vel Para fazer isso com Git no diret rio onde est seu script execute S git init git add git commit m First release Cap tulo 2 Truques b sicos Ent o avise aos outros para executarem S git clone your computer path to script para obter seu script Assume se que eles t m acesso ssh Se n o execute git daemon e avise os para executar S git clone git your computer path to script A partir de agora toda vez que seu script estiver pronto para liberar execute git commit a m Next release e seu usu rios podem atualizar suas vers es indo para o diret rio que cont m seu script e executando git pull Seu usu rios nunca ficar o com uma vers o do seu script que voc n o queira Obviamente este truque serve para tudo n o apenas script 2 9 O que eu fiz Saiba quais as mudan as que voc fez desde o ltimo commit com S git diff Ou desde ontem git diff e yesterday Ou entre uma vers o particular e duas vers es atr s git diff lb6d master 2 Em cada um dos exemplos a sa da ser um patch que pode ser aplicado com o git apply Tente tamb m S git whatchanged since 2 weeks ago
10. para fazer este truque 4 9 Trabalhe como quiser Voc pode se perguntar se os ramos valem a pena Afinal os clones s o quase t o r pidos e voc pode trocar entre eles com um comando cd ao inv s de um comando esot rico do Git 22 Cap tulo 4 Bruxarias com branch Considere um navegador web Por que suportar abas m ltiplas bem como janelas m ltiplas porque ao permitir ambas as caracter sticas podemos acomodar uma variedade de estilos Alguns usu rios gostam de manter somente uma janela aberta do navegador e utilizar varias abas para as p ginas web Outros preferem o outro extremo v rias janelas sem nenhuma aba Outros podem preferir uma mistura dos estilos Branching como as abas para seu diret rio de trabalho e o clone como uma nova janela do navegador Essas opera es s o r pidas e locais de modo que por que n o experimentar para encontrar a combina o que melhor se adequa a voc O Git permite que voc trabalhe exatamente do jeito que voc desejar 23 Cap tulo 5 Li es de historia Uma consequ ncia da natureza distribu da do Git que o hist rico pode ser editado facilmente Mas se voc adulterar o passado tenha cuidado apenas rescreva a parte do hist rico que s voc possui Assim como as na es sempre argumentam sobre quem comete atrocidades se algu m tiver um clone cuja vers o do hist rico seja diferente do seu voc pode ter problemas para conciliar suas rvores quando in
11. percebido que fez um erro descomunal e precisa voltar para um antigo commit de um branch h muito esquecido Por default o Git mant m um commit por pelo menos duas semanas mesmo se voc mandou o Git destruir o branch que o cont m O problema achar o hash certo Voc pode procurar por todos os valores de hash em git objects e por tentativa e erro encontrar o que procura Mas h um modo mais f cil O Git guarda o hash de todos os commit que ele calcula em git 10gs O sub diret rio refs cont m o hist rico de toda atividade em todos os branch enquanto o arquivo HEAD mostra todos os valores de hash que teve Este ltimo pode ser usado para encontrar o hash de um commit num branch que tenha sido acidentalmente apagado O comando reflog fornece uma interface amig vel para estes arquivos de log Experimente S git reflog 39 Cap tulo 7 Gr o Mestre Git Ao inv s de copiar e colar o hash do reflog tente git checkout 10 minutes ago Ou fa a um checkout do quinto ltimo commit com git checkout 5 Leia a se o Specifying Revisions da ajuda com git help rev parse para mais informa es Voc pode querer configurar um per odo mais longo de car ncia para condenar um commit Por exemplo git config gc pruneexpire 30 days significa que um commit apagado ser permanentemente eliminado ap s passados 30 dias e executado o comando git gc Voc tamb m pode desativar as execu es autom t
12. rios Para criar um tarball do c digo fonte executo git archiv format tar prefix proj 1 2 3 HEAD 7 2 Commit do que Mudou Mostrar ao Git quando adicionamos apagamos e ou renomeamos arquivos pode ser problem tico em alguns projetos Em vez disso voc pode digitar git add S git add u O Git analisar os arquivos no diret rio atual e trabalhar nos detalhes automaticamente No lugar do segundo comando add execute git commit a se sua inten o efetuar um commit neste momento Veja git help ignore para saber como especificar os arquivos que devem ser ignorados Voc pode executar isto em apenas um passo com git ls files d m o z xargs 0 git update index add remov As op es Z e 0 previnem contra os transtornos de arquivos com caracteres estranhos no nome Note que este comando adiciona os arquivos ignorados Logo voc pode querer usar as op es x ou X 7 3 Meu Commit muito Grande Voc esqueceu de fazer commit por um muito tempo Ficou codificando furiosamente e esqueceu do controle de vers es at agora Fez uma s rie de modifica es n o relacionadas entre si pois este seu estilo 37 Cap tulo 7 Gr o Mestre Git N o se preocupe Execute S git add p Para cada modifica o realizada o Git mostrar o peda o do c digo alterado e perguntar se ele deve fazer parte do pr ximo commit Responda y sim ou n n o H outras op es como o adiament
13. somente faz sentido ap s a execu o de um comando que de alguma maneira altera o ndice tal como o git add Geralmente podemos ignorar o index e supor que estamos lendo e escrevendo diretamente no hist rico Nessas ocasi es queremos um controle mais fino de modo que manipulamos o ndice Colocamos uma fotografia de algumas mas n o todas as nossas altera es no ndice e ent o registramos permanentemente esta fotografia cuidadosamente manipulada 38 Cap tulo 7 Gr o Mestre Git 7 5 N o perca a CABE A HEAD A etiqueta HEAD cabe alho como um indicador que normalmente aponta para o ltimo commit avan ando a cada novo commit Alguns comandos do Git permitem mov la Por exemplo git reset HEAD 3 ir mover o HEAD tr s commit para tr s Assim todos os comandos do Git passam a agir como se voc n o tivesse realizados os ltimos tr s commit enquanto seus arquivos permanecem no presente Consulte a p gina do manual para mais aplica es Mas como se faz para voltar para o futuro Os ltimos commit n o sabem do futuro Se voc tem o SHA1 do HEAD original ent o git reset 1b6d Mas suponha que voc n o tenha anotado N o se preocupe para comandos desse tipo o Git salva o HEAD original com uma etiqueta chamada de ORIG_HEAD e voc pode retornar s o e salvo com git reset ORIG_HEAD 7 6 Explorando o HEAD Talvez ORIG HEAD n o seja suficiente Talvez voc s tenha
14. 000 data lt lt EOT Initial commit EO 100644 inline hello c data lt lt EOT finclude lt stdio h gt int main printf Hello world An return 0 commit refs heads master committer Bob lt bobfexample com gt Tue 14 Mar 2000 01 59 26 0800 data lt lt EOT Replace printf with write EO 100644 inline hello c data lt lt EOT finclude lt unistd h gt int main write 1 Hello world Nn 14 return 0 Em seguida crie um reposit rio Git a partir deste arquivo tempor rio digitando S mkdir project cd project git init git fast import date format rfc2822 lt tmp history 27 Cap tulo 5 Li es de historia Fa a um checkout da ltima vers o do projeto com git checkout master O comando git fast export converte qualquer reposit rio para o formato do git fast import format cujo resultado voc pode estudar para escrever seus exportadores e tamb m para converter reposit rios Git para um formato leg vel aos humanos Na verdade estes comandos podem enviar reposit rios de arquivos de texto por canais exclusivamente textuais 5 6 Onde foi que tudo deu errado Voc acabou de descobrir uma fun o errada em seu programa que voc sabe com certeza que estava funcionando h alguns meses atr s Merda Onde ser que este erro come ou Se s voc estivesse testando a funcionalidade que desenvolveu Agora tarde para reclamar No en
15. 4f o commit mais novo Ent o Remova os commit deletando as linhas Como o comando revert mas sem fazer o registro ser como se o commit nunca tenha existido e Reorganize os commit reorganizando as linhas e Substitua pick com edit para modificar a mensagem do commit reword para alterar a mensagem de log squash para fazer o merge de um commit com o commit anterior e fixup para fazer o merge de um commit com o anterior e descartar a mensagem de log Por exemplo queremos substituir o segundo pick por squash pick 5c6eb73 Added repo or cz link squash a311a64 Reordered analogies in Work How You Want pick 100834f Added push target to Makefile Ap s salvar e sair o Git ira fazer o merge a311a64 com o 5c6eb73 Assim squash faz o merge no pr ximo commit pense como squash up O Git ent o combina suas mensagens de logs e apresenta para edi o O comando fixup salta essa etapa a mensagem de log squashed simplesmente descartada Se marcar um commit com edit o Git retorna voc ao passado ao commit mais velho Voc pode emendar o commit velho como descrito na se o anterior e at mesmo criar um novo commit que perten a a esse Uma vez que esteja satisfeito com o retcon siga adiante executando git rebase continue O Git reenvia os commits at o pr ximo edit ou ao presente se n o restar nenhum Voc pode tamb m abandonar o rebase com git rebase abort Portanto fa a commi
16. Magia Git Ben Lynn Magia Git por Ben Lynn Hist rico de Revis es Agosto 2007 Revisado por BL ndice Pref cio joscerssesiicsnsasis caro deniiecnotiaas e ia casas asda A EEE NES Oa SETENE EIEE EEEE E EAEE E ON vi 1 Agradecimentos a a E O A A EEE ANER vi 2 Licen o E E E E E E E Senta vii 1 IntrodU O sisssssisssssrssseosssosissesssiesesseriosoros sssboa etssv erort es casas on sas ecra eat en aa RS VSS ne as V VU ASSE VS RONki e 1 i l Trabalhar Divertidos rssi isn oneee diana Pelinica donas daN vinda oapia ae i nK a a es 1 T2 Controle de Vers es sa serras i i E E E A EATE T E RE E 1 1 3 Controle distribDuido aea E e E EE A E E E S 2 1 4 Uma supersti o e r aa aaaea ae reee aeaa a adoram sa ae E EEE Da SER E Pina nanda pia ca EEEE AaS Eai 2 1 5 Conflitos de mesclagem Merge eseseseessseeseeeeresssresrsestrrssteesteststeseereststestnstetesrerertssretetesreerset 3 2 Truques b sicos csesereresesesnesenesecosrsneses esri sotos astet rarose r roS aa ea Nes sro ata aa Snes sods asa sa canta ana TESES 4 2 Salvando estados rnern ucsla ema cubra niucera TGR Ia Gude loca nala cre E A dona Loreena ado 4 2 2 Adicionar Remover Renomear a a T E a a a aa a 4 2 3 Destazer Retazer avan ado one ioe aio epean ekes dnad ae dei ddha E senda esa das 5 2A Revertendo nonren t tirar E TE E A R TET E A E RE E E O OAR 6 2 3 Gera oido Changelos sr E ARE E A EE E RSS 6 2 6 Download de arquivos cuni
17. No entanto al m de truques engenhosos de empacotamento para economizar espa o e truques engenhosos de indexa o para economizar espa o agora sabemos como o Git habilmente transforma um sistema de arquivos em um banco de dados perfeito para o controle de vers es Por exemplo se algum arquivo dentro do banco de dados de objetos corrompido por um erro de disco ent o o seu hash n o ir corresponder mais alertando nos sobre o problema Fazendo hash de hash de outros objetos mantemos a integridade em todos os n veis Os commits s o atomicos isto um commit nunca pode armazenar parcialmente as mudan as s podemos calcular o hash de um commit e armazenar ele no banco de dados ap s ter armazenado todas as rvores relevantes blobs e os commits pais O banco de dados de objetos imune a interrup es inesperadas tais como falha de alimenta o eletrica N s derrotamos at mesmo os advers rios mais tortuosos Suponha que alguem tente de maneira escondida modificar o conteudo de um arquivo em uma vers o antiga do projeto Para manter o banco de dados dos objetos com uma apar ncia saud vel ele deve tamb m alterar o hash do objeto blob correspondente j que ele contem agora uma cadeia de bytes diferente Isso significa que ele ter que alterar o hash de qualquer objeto rvore que referencia o arquivo e em seguida alterar o hash de todos os objetos commit que est o envolvidos com esses objetos rvores al m dos hash de t
18. aborta um commit se espa o em branco sem utilidade ou um conflito de merge n o resolvido for detectado Para este guia eu eventualmente adiciono o seguinte ao inicio do hook pre commit para prote o contra as mentes sem no o if git ls files o grep N txtS then echo FAIL Untracked txt files exit 1 fi V rias opera es do Git suportam o hook veja git help hooks N s ativamos o hook de exemplo post update anteriormente quando discutimos o Git sob HTTP Isso executa sempre que o HEAD se movimenta O script de exemplo post update atualiza os arquivos que o Git necessita para a comunica o sob transportes agn sticos do Git como o HTTP 42 Cap tulo 8 Segredos Revelados Vamos dar uma espiada sob o cap e explicar como o Git realiza seus milagres Ser uma explica o superficial Para detalhes mais aprofundados consultar o manual do usu rio http schacon github com git user manual html 8 1 Invisibilidade Como pode o Git ser t o discreto Fora ocasionais commit e merge voc pode trabalhar como se desconhecesse que existe um controle de vers es Isto at que precise dele e quando voc ficar agradecido ao Git por estar vigiando o que faz o tempo todo Outros sistemas de controle de vers es n o deixam voc esquec los As permiss es dos arquivos s o apenas de leitura a menos que voc diga ao servidor quais arquivos tem a inten o de editar Os comandos mais b sicos podem demora
19. amifica es Branch e mesclagens merge instant neos s o as caracter sticas mais fant sticas do Git Problema Fatores externos inevitavelmente exigem mudan as de contexto Um erro grave que se manifesta sem aviso em uma vers o j liberada O prazo final diminu do Um desenvolvedor que o ajuda em uma fun o chave do seu projeto precisa sair Em todos esses casos voc deixar de lado bruscamente o que esta fazendo e focar em uma tarefa completamente diferente Interromper sua linha de pensamento provavelmente prejudicar sua produtividade e quanto mais trabalhoso for trocar de contexto maior ser a perda Com um controle de vers es centralizado precisamos pegar uma nova c pia do servidor central Sistemas distribu dos fazem melhor j que podemos clonar o que quisermos localmente Mais clonar ainda implica copiar todo o diret rio de trabalho bem como todo o hist rico at o ponto determinado Mesmo que o Git reduza o custo disso com o compartilhamento de arquivos e hardlinks os arquivos do projeto devem ser recriados completamente no novo diret rio de trabalho Solu o O Git tem a melhor ferramenta para estas situa es que muito mais r pida e mais eficiente no uso de espa o do que a clonagem git branch Com esta palavra m gica os arquivos em seu diret rio de repente mudam de forma de uma vers o para outra Esta transforma o pode fazer mais do que apenas avan ar ou retroceder no hist rico Seus
20. ando quem o modificou por ltimo e quando Ao contr rio de outros sistemas de controle de vers es esta opera o ocorre offline lendo apenas do disco local 5 8 Experi ncia pessoal Em um sistema de controle de vers es centralizado modifica es no hist rico s o opera es dif ceis e dispon veis apenas para administradores Clonagem branch e merge s o imposs veis sem uma rede de comunica o Bem como as opera es b sicas navegar no hist rico ou fazer commit das mudan as Em alguns sistemas exigido do usu rio uma conex o via rede apenas para visualizar suas pr prias modifica es ou abrir um arquivo para edi o Sistemas centralizados impedem o trabalho offline e exigem um infraestrutura de rede mais cara especialmente quando o n mero de desenvolvedores aumenta Mais importante todas a opera es s o mais lentas at certo ponto geralmente at o ponto onde os usu rios evitam comandos mais avan ados at serem absolutamente necess rios Em casos extremos esta a regra at para a maioria dos comandos b sicos Quando os usu rios devem executar comandos lento a produtividade sofre por causa de uma interrup o no fluxo de trabalho J experimentei este fen meno na pele O Git foi o primeiro sistema de controle de vers es que usei E rapidamente cresci acostumado a ele tomando muitas de suas caracter sticas como normais Simplesmente assumi que os outros sistemas eram semelhante escolher um sist
21. ar um branch Veja git help branch O branch master uma personaliza o til Outros podem assumir que seu reposit rio possui um branch com esse nome e que ele cont m a vers o oficial de seu projeto Embora possamos renomear ou apagar o branch master voc deve procurar respeitar essa conven o 4 8 Branches Tempor rios Depois de um tempo voc perceber que est criando um branch de curta dura o frequentemente e por motivos parecidos cada novo branch serve apenas para guardar o estado atual assim voc pode rapidamente voltar para estados antigos para corrigir um erro ou algo assim E semelhante a mudar o canal da TV temporariamente para ver o que est passando nos outros canais Mas ao inv s de apertar dois bot es voc est criando checando e apagando branchs tempor rios e seus commit Felizmente o Git tem um atalho que t o conveniente como um controle remoto de TV S git stash Isto salva o estado atual num local tempor rio um stash e restaura o estado anterior Seu diret rio de trabalho parece ter voltado ao estado anteriormente salvo e voc pode corrigir erros puxar as mudan as mais novas e assim por diante Quando quiser retornar ao estado anterior ao uso do stash digite git stash apply You may need to resolve some conflicts Voc pode ter m ltiplos stash e manipul los de v rias formas Veja git help stash Como deve ter adivinhado o Git usa branch por traz dos panos
22. az um sistema distribu do de controle de vers es bem concebido pode fazer melhor Recursos de rede s o simplesmente mais onerosos que recursos locais Embora vejamos mais adiante que existem inconvenientes numa abordagem distribu da menos prov vel que algu m fa a compara es err neas com esta regra de ouro Um pequeno projeto pode precisar de apenas uma fra o dos recursos oferecidos pelo sistema mas utilizar um sistema que n o permite expans o como utilizar os algarismos romanos quando calculamos com n meros pequenos E mais seu projeto pode crescer al m da suas expectativas Usando Git desde o inicio como ter um canivete su o embora o use na maioria das vezes para abrir garrafas No dia que necessitar desesperadamente de uma chave de fenda voc agradecer por ter mais do que um abridor de garrafas 1 5 Conflitos de mesclagem Merge Neste t pico nossa analogia com jogos de computador torna se ruim Em vez disso vamos considerar novamente a edi o de um documento Suponha que Alice insira uma linha no in cio do arquivo e Bob uma no final Ambos enviam suas altera es A maioria dos sistemas ir de maneira autom tica e reativa deduzir o plano de a o aceitando e mesclando as mudan as assim as altera es de Alice e Bob ser o aplicadas Agora suponha que ambos Alice e Bob fa am altera es distintas na mesma linha Tornando imposs vel resolver o conflito sem interven o humana A segu
23. bjeto rvore tree uma lista de tuplas que consiste em um tipo de arquivo um nome de arquivo e um hash Em nosso exemplo este tipo de arquivo 100644 que significa que rose um arquivo normal e o hash o objeto blob que cont m o termo rose Outros tipos poss veis de arquivos s o execut veis symlinks e diretorios No ultimo exemplo o hash aponta para um objeto rvore 46 Cap tulo 8 Segredos Revelados Se voc executar o filter branch voc obter objetos antigos que n o precisa mais Embora sejam eliminados automaticamente quando o per odo de armazenamento expirar iremos delet los agora para tornar o nosso exemplo mais f cil de seguir S rm r git refs original git reflog expir expire now all S git prune Para projetos reais voc deve tipicamente evitar comandos como esses j que eles destroem os backups Se voc deseja um reposit rio limpo geralmente melhor criar um novo clone Tamb m tome cuidado quando manipular diretamente o git e se um comando Git esta executando ao mesmo tempo ou uma falha na alimenta o eletrica ocorre Geralmente as refer ncias podem ser deletadas com git update ref d embora seja mais seguro remover manualmente o refs original 8 9 Commits Explicamos 2 dos 3 objetos O terceiro o objeto commit Seu conte do depende da mensagem de commit bem como da data e hora em que foi criado Para combinar com o que temos aqui vamos ter que fazer um pequeno truq
24. cisa voltar 3 vers es e temporariamente colocar algumas declara es de controle para ver como algo funciona Ent o S git commit a git checkout HEAD 3 E Agora voc pode adicionar temporariamente c digo feio em qualquer lugar Pode at fazer commit destas mudan as Quando estiver tudo pronto git checkout master para voltar para o trabalho original Observe que qualquer mudan a sem commit s o tempor rias E se voc desejasse salvar as mudan as tempor rias depois de tudo F cil git checkout b dirty e fa a commit antes de voltar ao branch master Sempre que quiser voltar sujeira simplesmente digite git checkout dirty N s j falamos deste comando num cap tulo anterior quando discutimos carregamento de estados antigos salvos Finalmente podemos contar toda a hist ria os arquivos mudam para o estado requisitado por m sa mos do branch master Cada commit realizado a partir deste ponto nos seus arquivos o levar o em outra dire o que nomearemos mais adiante 18 Cap tulo 4 Bruxarias com branch Em outra palavras depois de fazer checkout em um estado antigo o Git automaticamente o colocar em um novo branch n o identificado que pode ser identificado e salvo com git checkout b 4 3 Corre es r pidas Voc est fazendo algo quando mandam largar o que quer que seja e corrigir um erro rec m descoberto no commit 1b6d git commit a git checkout b fixes 1b6d E
25. cular onde era o nico desenvolvedor Entre os comandos relacionados a natureza distribu da do Git eu precisava somente do pull e clone de modo a manter o mesmo projeto em v rios lugares Mais tarde quis publicar meu c digo com o Git e incluir as altera es dos contribuidores Tive que aprender como gerenciar projetos com v rios desenvolvedores de todas as partes do mundo Felizmente esse o forte do Git e indiscutivelmente sua raz o de existir 6 1 Quem sou eu Cada commit tem um nome de autor e e mail que pode ser mostrado pelo git log O Git utiliza as configura es do sistema para preencher esses campos Para fazer o preenchimento expl cito digite git config global user name John Doe git config global user email johndoefexample com Omita o flag global para configurar essas op es somente para o reposit rio atual 6 2 Git sob SSH HTTP Suponha que voc tenha acesso SSH a um servidor web mas que o Git n o esteja instalado Embora n o t o eficiente quanto seu protocolo nativo o Git pode se comunicar via HTTP Baixe compile e instale o Git em sua conta e crie um reposit rio no seu diret rio web GIT DIR proj git git init cd proj git git bare update server info cp hooks post update sample hooks post update Ur Ur i i Para vers es mais antigas do Git o comando copy falha e voc deve executar chmod a x hooks post update Agora voc pode publicar suas ltimas edi es v
26. dependente de firmware o qual provavelmente estar em um grande arquivo bin rio O hist rico de arquivos de firmware irrelevante para os usu rios e as atualiza es t m uma p ssima compress o assim revis es de firmware estourar o o tamanho do reposit rio sem necessidade Neste caso o c digo fonte deve ser armazenado num reposit rio Git e os arquivos bin rios mantidos separados do mesmo Para facilitar o trabalho algu m pode criar e distribuir um script que usa o Git para clonar o c digo e o faz um rsync ou um cria um clone vazio do Git para o firmware 9 8 Contador Global Alguns sistemas centralizados de controle de vers es mant m um n mero inteiro positivo que incrementado quando um novo commit aceito O Git referencia as modifica es por seus hash o que o melhor na maioria das circunst ncias Mas algumas pessoas gostariam de ter este n mero por perto Felizmente f cil criar um script que fa a isso a cada atualiza o o reposit rio central do Git incrementa o n mero talvez em uma marca tag e associa a mesma com o hash do ltimo commit Cada clone poderia gerenciar este contador por m isto provavelmente seja desnecess rio j que apenas o contador do reposit rio central que importar para todos 51 Cap tulo 9 Ap ndice A Defici ncias do Git 9 9 Subdiret rios Vazios Subdiret rios vazios n o s o monitorados Crie arquivos vazios para resolver esse problema A imple
27. e computacional suficiente para corromper silenciosamente um reposit rio Git Esperamos que o Git ir migrar para uma fun o hash melhor antes que mais pesquisas destruam o SHA1 9 2 Microsoft Windows O Git no Microsoft Windows pode ser trabalhoso Cygwin http cygwin com um ambiente que deixa o Windows parecido com o Linux tem uma vers o do Git para Windows http cy gwin com packages git Git no MSys http code google com p msysgit uma alternativa que requer suporte minimo para execu o embora alguns poucos comandos precisem ser mais trabalhados 9 3 Arquivos Independentes Se seu projeto muito grande e tem muitos arquivos independentes que est o sendo constantemente modificados o Git pode ser prejudicado mais do que os outros sistemas pois os arquivos n o s o monitorados isoladamente O Git monitora modifica es no projeto como um todo o que geralmente ben fico Uma solu o dividir seu projeto em peda os cada um composto de arquivos relacionados Use git submodule se ainda quiser manter tudo num reposit rio s 49 Cap tulo 9 Ap ndice A Defici ncias do Git 9 4 Quem Est Editando O Que Alguns sistemas de controle de vers es ir o for lo a marcar explicitamente um arquivo de alguma maneira antes de edit lo Embora seja especialmente irritante quando isso envolve usar um servidor centralizado isto tem dois benef cios 1 Diff s o r pido pois apenas os arq
28. elados http www zlib net zpipe c ou digite git cat file p aa823728ea7d592acc69b36875a482cdf3fd5csd que mostra o objeto em um formato leg vel 8 8 rvores Mas onde est o os nomes de arquivos Eles precisam ser armazenados em algum lugar Git fica sabendo o nome do arquivo durante um commit git commit Type some messag find git objects type f Voc pode ver agora 3 objetos Dessa vez eu n o consigo dizer quais os dois nomes de arquivos j que eles dependem parcialmente do nome do arquivo que voc escolheu Vamos prosseguir assumindo que voc escolheu rose Se n o escolheu esse nome voc pode reescrever o hist rico para ficar parecido com o que voc fez git filter branch tree filter mv YOUR FILENAME rose find git objects type f Agora voc poder ver o arquivo git objects 05 b217bb859794d08bb9e4f7f04cbda4b207fbe9 porque esse o hash SHA 1 de seu conteudo tree SP 32 NUL 100644 rose NUL 0xaa823728ea d592acc69b36875a482cdf3fd5c8d Verifique que este arquivo cont m efetivamente o que falamos acima digitando echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 git cat file batch Com o zpipe f cil verificar o hash zpipe d lt git objects 05 b217bb859794d08bb9e4f7f04cbda4b207fbe9 shalsum A verifica o do hash mais complicada via cat file porque sua saida contem mais do que os dados descomprimidos do arquivo object Esse arquivo um o
29. ema de controle de vers es deveria ser igual a escolher um novo editor de texto ou navegador para internet Fiquei chocado quando posteriormente fui for ado a usar um sistema centralizado Uma conex o ruim com a Internet pouco importa com o Git mas torna o desenvolvimento insuport vel quando precisa ser t o confi vel quanto o disco local Al m disso me condicionava a evitar determinados comandos devido a lat ncia envolvida o que me impediu em ltima inst ncia de continuar seguindo meu fluxo de trabalho Quando executava um comando lento a interrup o na minha linha de pensamento causava um enorme preju zo Enquanto espero a comunica o com o servidor concluir fa o algo para passar o tempo como checar email ou escrever documenta o Na hora em que retorno a tarefa original o comando j havia finalizado h muito tempo e perco mais tempo lembrando o que estava fazendo Os seres humanos s o ruins com trocas de contexto Houve tamb m um interessante efeito da trag dia dos comuns antecipando o congestionamento da rede 29 Cap tulo 5 Li es de historia os indiv duos consomem mais banda que o necess rio em varias opera es numa tentativa de reduzir atrasos futuros Os esfor os combinados intensificam o congestionamento encorajando os indiv duos a consumir cada vez mais banda da pr xima vez para evitar os longos atrasos 30 Cap tulo 6 Git Multiplayer Inicialmente utilizei o Git em um projeto parti
30. en Er irao re A cas sn inss Len esa ana Sn Teca neah AE 49 9 2 Microsoft WindoWS s essi cerirenanrinasiansel aesardesundos EA EA css EO A ENEA 49 9 3 Arquivos Independentes re rena EEA Se e nene EE Er e ee 49 9 4 Quem Est Editando O Que seseneeseeesseeeseeesseereseeseersseereserresesseersseeroseeeoeeesersseeresrereseeseersseereee 49 9 5 Arquivo do Hist rico sn ae in ee E E a e i E K TAE IE EE ANI Rri 50 O Clone Imcial EEEE ET E E E EEEE EE DEEN E OOE EEE ORRE 50 0 71 Projetos VOL tEIS suis missa iieerisenias E a E E EO 50 9 38 Contador Global essas io dessas das e o deb do ia doa se tona e dado ALA ethaan a as 51 9 9 Subdiret rios VAZIOS uia can da aan ata o 51 9 10 Commitinicial suis EE nei EEE ENE AE sms a liga ni di se dor Boda tante atm a iss estados 52 9 11 Peculiaridades da Interface seres reesaes aee renina A E ensaios sia e 52 10 Apendice B Traduzindo esse guia e s sesseoessososessosoosessoseosesessesossesossessesossesoesessesossesossesssosssssosessososs 53 Pref cio Git http git sem com um canivete su o do controle de vers es Uma ferramenta polivalente realmente vers til cuja extraordin ria flexibilidade torna o complicado de aprender principalmente sozinho Como Arthur C Clarke observou Qualquer tecnologia suficientemente avan ada considerada m gica Esta uma tima forma de abordar o Git novatos podem ignorar seu funcionamento interno e v lo como algo dive
31. etach it may already be running Algumas hospedagens p blicas siga as instru es para configura o de um reposit rio git vazio Na maioria das vezes isso feito atrav s do preenchimento de um formul rio no site deles Envie Push seu projeto para o servidor principal com git push central server path to proj git HEAD Para verificar os fontes um desenvolvedor pode digitar git clone central server path to proj git Ap s realizar as altera es o desenvolvedor pode salvar as altera es localmente com S git commit a Para atualizar para a ultima vers o git pull Qualquer conflito de merge deve ser resolvido e ent o feito o commit git commit a Para verificar as mudan as locais no reposit rio central git push Se o servidor principal possui novas altera es devido a atividades de outros desenvolvedores o push ir falhar e o desenvolvedor dever fazer o pull da ultima vers o resolver qualquer conflito de merge e ent o tentar novamente Os desenvolvedores devem ter acesso a SSH para utilizar os comandos de push e pull acima Entretanto qualquer pessoa pode examinar os arquivos fonte digitando git clone git central server path to proj git 11 Cap tulo 3 Um pouco de clonagem O protocolo nativo do Git semelhante ao HTTP n o existe nenhum tipo de autentica o de modo que qualquer um pode baixar o projeto Da mesma maneira o push por default proibido pelo prot
32. g gitmagic Ubuntu package http packages ubuntu com gitmagic get a fast and local copy of this site Handy when this server is offline http csdcf stanford edu status Physical book Amazon com http www amazon com Git Magic Ben Lynn dp 1451523343 64 pages 15 24cm x 22 86cm black and white Handy when there is no electricity vi Pref cio 1 Agradecimentos com grande orgulho que vejo o grande n mero de pessoas que trabalho na tradu o deste livro Eu realmente agrade o pela grande audi ncia permitida pelos esfor os dos tradutores citados a seguir Dustin Sallings Alberto Bertogli James Cameron Douglas Livingstone Michael Budde Richard Albury Tarmigan Derek Mahar Frode Aannevik Keith Rarick Andy Somerville Ralf Recker yvind A Holm Miklos Vajna S bastien Hinderer Thomas Miedema Joe Malin Tyler Breisacher Sonia Hamilton Julian Haagsma Romain Lespinasse Sergey Litvinov Oliver Ferrigni David Toca Ceprei Ceprees Jo l Thieffry e Baiju Muthukadan contribuiram com corre es e melhorias Fran ois Marier mant m o pacote Debian criado originalmente por Daniel Baumann My gratitude goes to many others for your support and praise I m tempted to quote you here but it might raise expectations to ridiculous heights If Pve left you out by mistake please tell me or just send me a patch 2 Licen a Este guia regido pelos termos da a Licen a Publica Geral GNU Vers o 3 http www
33. git objects aa 823728ea7d592acc69b36875a482cdf3fd5c8d Como eu posso saber disso sem saber o nome do arquivo por que o hash SHA1 de blob SP 6 NUL sweet LF aa823728ea7d592acc69b36875a482cdf3fd5c8d onde SP espa o NUL o byte zero e LF um linefeed Voc pode verificar isso digitando printf blob 6 000sweetin shalsum O Git endere vel por conte do os arquivos n o s o armazenados de acordo com seus nomes de arquivos e sim pelo hash de seus dados em um arquivo que chamamos de objeto blob blob object Podemos pensar que o hash um identificador nico para o conte do do arquivo de modo que estamos endere ando os arquivos pelo seu conte do O blob 6 inicial meramente um header que consiste do tipo do objeto e seu tamanho em bytes isso simplifica a organiza o interna Assim eu poderia prever o que voc ir ver O nome do arquivo irrelevante somente os dados internos s o utilizados para construir o objeto blob Voc pode estar se perguntando o que acontece com os arquivos id nticos Tente adicionar c pias de seu arquivo com qualquer nome de arquivo O conte do do git objects continua o mesmo n o importa quantos voc adiciona O Git somente armazena o dado uma nica vez A prop sito os arquivos dentro de git objects s o comprimidos com a zlib de modo que voc n o consegue examin los diretamente Fa a uma filtragem por meio do zpipe d 45 Cap tulo 8 Segredos Rev
34. gnu org licenses gpl 3 0 html Naturalmente os fontes est o num reposit rio Git e podem ser obtido digitando git clone git repo or cz gitmagic git Cria um diret rio gitmagic ou a partir de algum desses mirrors git clone git github com blynn gitmagic git git clone git gitorious org gitmagic mainline git git clone https code google com p gitmagic git clone git git assembla com gitmagic git git clone gitfbitbucket org blynn gitmagic git WO WU GitHub Assembla e Bitbucket suportam reposit rios privados os dois ltimos s o gr tis vii Cap tulo 1 Introdu o Usaremos uma analogia para falar sobre controle de vers es Veja o verbete Sistema de Controle de Vers es http en wikipedia org wiki Revision control para uma explica o mais formal 1 1 Trabalhar Divertido Divirto me com jogos para computador quase a minha vida toda Em contrapartida s comecei a usar sistemas de controle de vers es quando adulto Suspeito que n o fui o nico e comparar os dois pode tornar estes conceitos mais f ceis de explicar e entender Pense na edi o de seu c digo documento ou qualquer outra coisa como jogar um jogo Uma vez que tenha feito muitos progressos e gostaria de de salv los Para isso voc clica em Salvar no seu editor preferido Por m isto vai sobrescrever a vers o anterior como nos antigos jogos onde voc s tinha uma espa o para salvar voc pode salvar mas nunca
35. har na part2 Isso n o comum At agora n s trocamos de ramos imediatamente ap s a sua cria o como em git checkout HEAD 7 b master Create a branch and switch to it 4 6 Reorganizando uma Bagun a Talvez voc goste de trabalhar com todos os aspectos de um projeto num mesmo branch E gostaria de manter seu trabalho para voc mesmo e que os outros s vejam seus commit apenas quando eles estiverem organizados Inicie um par de branch git branch sanitized Create a branch for sanitized commits git checkout b medley Create and switch to a branch to work in A seguir trabalhe em alguma coisa corrigindo erros adicionando fun es adicionando c digo tempor rio e assim por diante fa a commit muitas vezes ao longo do caminho Ent o git checkout sanitized git cherry pick medley aplique o comit av ao commit HEAD do ramo medley para o ramo sanitized Com os cherry picks apropriados voc pode construir um branch que cont m apenas c digo permanente e tem os commit relacionados agrupados juntos 21 Cap tulo 4 Bruxarias com branch 4 7 Gerenciando os Branches Para listar todos os branch digite S git branch Por default voc deve iniciar em um branch chamado master Alguns defendem que o branch master deve permanecer intocado e que a seja criado novos branchs para suas pr prias mudan as As op es d e m permitem a voc deletar ou mover renome
36. ia SSH de qualquer clone git push web server path to proj git master E qualquer um pode obter seu projeto com 31 Cap tulo 6 Git Multiplayer git clone http web server proj git 6 3 Git sobre qualquer coisa Deseja sincronizar os reposit rios sem servidores ou mesmo sem uma conex o de rede Precisa improvisar durante uma emerg ncia Vimos que git fast export e git fast import podem converter reposit rios para um nico arquivo e vice versa Podemos enviar esses arquivos para outros lugares fazendo o transporte de reposit rios git sob qualquer meio mas uma ferramenta mais eficiente o git bundle O emissor cria um bundle git bundle create somefile HEAD E ent o transporta o pacote somefile para outro lugar por e mail pen drive ou mesmo uma saida impressa xxd e um scanner com ocr sinais bin rios pelo telefone sinais de fuma a etc O receptor recupera os commits do pacote executando git pull somefile O receptor pode inclusive fazer isso em um diret rio vazio Apesar do seu tamanho somefile cont m todo o reposit rio git original Em grandes projetos podemos eliminar o desperd cio fazendo o empacotamento somente das mudan as que o outro reposit rio necessita Por exemplo suponha que o commit Ib6d o commit mais recente compartilhado por ambas as partes git bundle create somefile HEAD 1lb6d Se executado frequentemente podemos esquecer que commit foi feito po
37. icas do git ge S git config gc auto O assim os commit s ser o permanentemente eliminados quando executado o git ge manualmente 7 7 Baseando se no Git Seguindo o jeito UNIX de ser o Git permite ser facilmente utilizado como um componente de baixo n vel para outros programas tais como interfaces GUI interfaces web interfaces alternativas de linha de comando ferramentas de gerenciamento de patchs ferramentas de importa o e convers o e outras Na realidade alguns comandos Git s o eles mesmos scripts apoiados em ombros de gigantes Com pouco trabalho voc pode configurar o Git para suas preferencias Um truque simples criar alias abrevia es internas ao Git para abreviar os comandos utilizados mais frequentemente git config global alias co checkout git config global get regexp alias display current aliases alias co checkout S git co foo same as git checkout foo Outra imprimir o branch atual no prompt ou no t tulo da janela s executar git symbolic ref HEAD 40 Cap tulo 7 Gr o Mestre Git que mostra o nome do branch atual Na pr tica muito provavelmente voc n o quer ver o refs heads e ignorar os erros git symbolic ref HEAD 2 gt dev null cut b 12 O subdiret rio contrib um ba do tesouro de ferramentas constru das com o Git Com o tempo algumas delas devem ser promovidas para comandos oficiais Nos sistemas Debian e Ubuntu esse diret r
38. io esta em usr share doc git core contrib Um residente popular workdir git new workdir Por meio de um inteligente link simb lico este script cria um novo diret rio de trabalho cujo hist rico compartilhado com o reposit rio original S git new workdir an existing repo new directory O novo diret rio e arquivos dentro dele podem ser vistos como um clone exceto que como o hist rico compartilhado as duas arvores automaticamente estar o em sincronia N o necess rio fazer merge push ou pull 7 8 Manobras Radicais As vers es recentes do Git tornaram mais dif cil para o usu rio destruir acidentalmente um dado Mas se voc sabe o que esta fazendo voc pode transpor estas salvaguardas utilizadas nos comandos mais comuns Checkout Se h modifica es sem commit um checkout simples falhar Para destruir estas modifica es e fazer um checkout de um certo commit assim mesmo use a op o force f git checkout f HEAD Por outro lado se for especificado algum endere o em particular para o checkout ent o n o haver checagem de seguran a O endere o fornecido ser silenciosamente sobrescrito Tenha cuidado se voc usa o checkout desse jeito Reset O Reset tamb m falha na presen a de modifica es sem commit Para obrig lo execute git reset hard 1b6d Branch Apagar um branch falha se isto levar a perda das modifica es Para for ar digite git branch D dead_branch in
39. ixa Veja git help diff e git help rev parse 52 Cap tulo 10 Apendice B Traduzindo esse guia Recomendo os seguintes passos para a tradu o desse guia de modo que meus scripts produzam a vers o HTML e PDF e que todas as tradu es possam conviver em um mesmo reposit rio Fa a um clone do fonte e ent o crie um diret rio correspondente a tag IETF da idioma alvo veja o artigo da W3C sobre internacionaliza o http www w3 org International articles language tags Overview en php Por exemplo Ingles Aus English en e Japon s ja No novo diret rio traduza os arquivos txt a partir do subdiretorio en Por exemplo para traduzir este guia para a l ngua Klingon http en wikipedia org wiki Klingon language voc deve digitar git clone git repo or cz gitmagic git cd gitmagic mkdir tlh tlh is the IETF language code for Klingon cd tlh cp en intro txt edit intro txt Translate the file A W e assim por diante para cada arquivo txt Edite o Makefile e adicione o c digo do idioma na vari vel TRANSLATIONS Voc poder ent o rever seu trabalho de forma incremental S make tlh firefox book tlh index html Fa a frequentes commits de suas altera es e me avise quando o trabalho estiver pronto O GitHub tem uma interface que facilita isso fa a um fork do projeto gitmagic fa a um push de suas altera es e ent o me pe a para fazer um merge 53
40. iza outro sistema de controle de vers es e sente saudade do Git Inicialize um reposit rio Git no seu diret rio de trabalho S git init S git add git commit m Initial commit Fa a um clone dele git clone some new directory Agora v para o novo diret rio e trabalhe nele n o no anterior usando Git para felicidade geral da na o De vez em quando voc desejar sincronizar com os outros neste caso v para o diret rio original sincronize usando o outro sistema de controle de vers es e ent o digite S git add S git commit m Sync with everyone else Depois v para o novo diret rio e execute S git commit a m Description of my changes S git pull O procedimento para enviar suas altera es para os outros depende do outro sistema de controle de vers es O novo diret rio cont m os arquivos com as suas altera es Execute qualquer comando do outro sistema de controle de vers es necess rio para envi las para o reposit rio central O subversion talvez o melhor sistema de controle de vers es centralizado utilizado em muitos projetos O comando git svn automatiza tudo isso para reposit rios Subversion e tamb m pode ser utilizado para exportar um reposit rio Git para um reposit rio Subversion http google opensource blogspot com 2008 05 export git project to google code html 14 Cap tulo 3 Um pouco de clonagem 3 10 Mercurial Mercurial um sistema de controle de vers es
41. mais poder voltar a um estado salvo anteriormente O que um pena pois o estado anterior era uma parte muito divertida do jogo e voc gostaria de poder revisit lo outra hora Ou pior o ltimo estado salvo dific limo e voc ter que recome ar 1 2 Controle de Vers es Ao editar voc pode Salvar como num arquivo diferente ou copiar o arquivo antes de sobrescrev lo se voc quiser manter as vers es anteriores Pode tamb m comprim los para economizar espa o Isto uma forma rudimentar e muito trabalhosa de controle de vers es Jogos de computador aperfei oaram este m todo muitos deles acrescentam automaticamente a data e a hora aos estados salvos Vamos dificultar um pouco Digamos que s o um monte de arquivos juntos como os fontes do seu projeto ou arquivos para um website Agora se quiser manter suas vers es anteriores ter que arquivar todo um diret rio ou v rios Manter muitas vers es na m o inconveniente e rapidamente se tornar caro Em alguns jogos de computador um estado salvo consiste de um diret rio cheio de arquivos Estes jogos escondem estes detalhes do jogador e lhe apresentam uma interface conveniente para gerenciar as diferentes vers es neste diret rio Sistemas de controle de vers es n o s o diferentes Todos t m uma boa interface para gerenciar seu diret rio de vers es Voc pode salvar o diret rio sempre que desejar e pode rever qualquer um dos Cap tulo 1 Intr
42. menta o atual do Git e n o seu o design a raz o deste inconveniente Com sorte uma vez que o Git ganhe mais utiliza o mais usu rios devem clamar por esse recurso e ele poder ser implementado 9 10 Commit Inicial Um cientista da computa o tipico inicia uma contagem do 0 ao inv s do 1 Entretanto no que diz respeito a commit o Git n o segue esta conven o Muito comandos s o confusos antes do commit inicial Al m disso existem algumas arestas que precisam aparadas manualmente seja com um rebase de um branch com um commit inicial diferente O Git iria se beneficiar por definir o commit zero assim que um reposit rio constru do o HEAD deve ser definido para uma cadeia de 20 bytes zero Esse commit especial representaria uma arvore vazia sem pai em um momento anterior a todos os reposit rios Git Ent o executando um git log por exemplo deveria informar ao usu rio que nenhum commit foi feito at agora ao inv s de terminar com um erro fatal Da mesma maneira que as outras ferramentas Cada commit inicial implicitamente um decendente desse commit zero Infelizmente existem alguns casos problem ticos Se v rios branch com commit iniciais diferentes forem merged juntos ent o um rebase do resultado vai requerer uma interven o manual substancial 9 11 Peculiaridades da Interface Para commit A e B o significado da express o A B e A B depende de onde o comando espera os dois pontos ou uma fa
43. mo jogo salvo que est em um n vel que pode ser completado com sucesso Ou talvez queira comparar dois jogos salvos para saber o quanto um jogador avan ou Podem existir v rios motivos para ver uma vers o antiga mas o modus operandi o mesmo T m que solicitar ao servidor centralizado a vers o antiga E quanto mais jogos salvos forem necess rios maior o tr fego de informa o A nova gera o de sistemas de controle de vers es dentre eles o Git conhecida como sistemas distribu dos e pode ser pensada como uma generaliza o dos sistemas centralizados Quando os jogadores baixam do servidor principal eles recebem todos os jogos salvos e n o apenas o mais recente como se estivessem espelhando o servidor principal A primeira opera o de clonagem pode ser bem demorada especialmente se h um longo hist rico mas compensada no longo prazo Um benef cio imediato que se por qualquer raz o desejar uma antiga vers o o trafego de informa o com o servidor desnecess rio Cap tulo 1 Introdu o 1 4 Uma supersti o Um equ voco popular que sistemas distribu dos est o mal adaptados a projetos que exijam um reposit rio central oficial Nada poderia estar mais longe da verdade Fotografar algu m n o ir roubar a sua alma Igualmente clonar o reposit rio master n o diminui sua import ncia Uma boa compara o inicial qualquer coisa que um sistema centralizado de controle de vers es f
44. n eee EOR rE E oE SS en ia en Ia 7 ZAA Ulma Versao ennnen PR RR RR 7 2 8 Publica o instant nea snn n n ooe ea e Ea eE E EEn E E E N Ear e is 7 2970 guec fiz min dolar ada Tan E Soon os adiada soda ia tb SUS ea adia neo od ad iba Cosas EEES 8 2 10 EXETC CIOS 5 ais ln eres ip E aaa ERAS anda E E E O Sa and do ana T A ETR Ma T gaia 8 3 Um pouco de clonagem eceereeesnecesnecerneresnesesesseseenesesne serao ses nes es nes es nes esc ea esa sns aiiai 10 3 1 Sincronizando Computadores retro re ceraeeneere era ananreaeaa ar neracenna 10 3 2 Controle cl ssico de C digo ske ire ron oenen e o o e e a ao atado dons qua Md aD Ee EEE 10 3 3 Codigo font setie toreni r E EE EE E EER E A 12 34 Repositonos VAZIOS sil cor io nE e E E a E A E DRa Ta 12 3 5 Push versus Pullin naa a A TA A E E A A NE E A EE 12 3 0 Fazendo um Fork do Projeto ssor ereere ee r rr Eei Pa IAE ORE SEE PERENE OEE EE 13 3 7 Backup SUpremoS eeo g a E e E E E E A A and E E 13 3 0 Multitarefa n vel cidad da TUZ iiinn En E E iron RE anal icssiaimado 13 3 9 Controle de Vers es de Guerrilha a n E e 14 3510 Mercirial essi arenis dis adsl Fiber quad datdes Dead esa cado dd a daN Ioa do dede e 14 Doll Bazat iea s CE E RR USA O RR EUA SS SD eai ana R Casa Dada E end Pedi naus a a assada ad nada 15 312 PORQUE SO OG Pati su aE mas Tn di E S lonas une LL doa nda dE eU E EA E ERE 16 4 Bruxarias com branch cceceerecesnecer
45. nda pessoa entre Alice e Bob que enviar suas altera es ser informado do conflito e escolher se aplica sua altera o sobre a do outro ou revisa a linha para manter ambas as altera es Situa es muito mais complexas podem surgir Sistemas de controle de vers es s o capazes de resolver os casos mais simples e deixar os casos mais dif ceis para n s resolvermos Normalmente seu comportamento configur vel Cap tulo 2 Truques b sicos Ao inv s de se aprofundar no mar de comandos do Git use estes exemplos elementares para dar os primeiros passos Apesar de sua simplicidade cada um deles s o muito teis Na verdade no meu primeiro m s com o Git nunca precisei ir al m das informa es deste cap tulo 2 1 Salvando estados Pensando em tentar algo mais arriscado Antes de faz lo tire uma fotografia de todos os arquivos do diret rio atual com S git init S git add git commit m My first backup Assim se algo der errado voc s precisar executar git reset hard Para salvar o estado novamente fa a S git commit a m Another backup 2 2 Adicionar Remover Renomear Os comandos acima s ir o verificar altera es nos arquivos que estavam presentes quando voc executou seu primeiro git add Se voc adicionar novos arquivos ou diret rios ter que informar ao Git com git add readme txt Documentation Do mesmo modo se voc quiser que o Git n o verifique certos arqui
46. necernesesneseseeseseonesecn serao ses nes cena ristori trikis N aa cne cerne casas eras i aiast 17 AA tecla chefes E E E ides dial E iva SUA denied E Inara r dice on edi teres 17 4 2 Trabalho POTCO series e andina a Sad CEL SU A A EE E EEE cia De as ETA cb SEU E a 18 4 3 Corre es r pidas iios saasaa e st enaisi peeso nai ea EE Pala Ela pts a EE na as doa so sta Pipa ada Eid ei aro algas 19 4 4 Meren E oeta oie eae ion O coecie ho ab antn acao A E E load sutis aos de eo Ta den Sud 19 4 5 Fluxo MInterrupto siise neir iee ree e DA o Del EE EEE e nE eri Ea 20 4 6 Reorganizando uma Bagun a sseeeeseeeiesrsresrssserrrsrssertssestssreresrstettssretstestetsrentstenreresreresreeet 21 4 7 Gerenciando os Branches e n aeie oee ea aea E a aA EAE EEA EEE SEEE nata ne E ERNE 21 4 8 Branches Tempor rios esie esii oe eeose ee reia aea Eien Eea AO EESE EE SEEE EEE E aa 22 4 9 Trabalhe como gU Ser isseire asas rear coa ia aiee ico A SEE EEE EEEE Es EEE dadas r rRe 22 iii 5 Li es de historia secs anessesasersesiosoistaesiesosesciusaesvi srasesca v seosei ci device iss desdo s sonia ceu sonia cons an s is Suas die sisie 24 JENCO Onon RR RR RR RN ROO STO RI O RD DURON RP RO RONNIE SRA RR A 24 DD do CUEIAMAIS n Sida spo Udo da Tin Piedra sacada dc e panda Dado das dn en e Me tino head 24 5 3 Altera es locais por ltimo errante ar ae aeee era eeeeearaataaa 25 JA Reescrevendo ONISL FICO aeaa nr sb segura R A A O E
47. nt o assim que tiver corrigido o erro git commit a m Bug fixed git checkout master e volte a trabalhar no que estava fazendo anteriormente Voc pode at fazer um merge na corre o realizada git merge fixes 4 4 Merging Com alguns sistemas de controle de vers es a cria o de ramos branching f cil mas realizar o merge de volta dificil Com o Git o merge t o trivial que voc pode nem perceber que ele acontece N s na realidade encontramos o merge h bastante tempo O comando pull na realidade busca fetches um commit e faz um merge no ramo branch atual Se voc n o tem nenhuma altera o local ent o ele faz um merge r pido que um caso especial parecido a buscar a ultima vers o em um sistema de controle de vers es centralizado Mas se voc tem mudan as locais o Git ir automaticamente fazer o merge e reportar qualquer conflito Comumente um commit possui exatamente um commit pai que recebe o nome de commit anterior Fazer o merge de ramos branches juntos produz um commit com no m nimo dois pais Isso levanta a quest o a que commit HEAD 10 estamos nos referindo Um commit pode ter v rios pais e qual deles vamos seguir Acontece que essa nota o escolhe o primeiro pai a cada vez Isso o desej vel porque o ramo atual se torna o primeiro pai durante o merge frequentemente voc estar preocupado com as altera es que realizou no ramo atual em oposi o s altera
48. o dessa decis o digite 7 para aprender como Uma vez satisfeito digite git commit para fazer um commit exatamente com as modifica es aprovadas staged Lembre se de retirar a op o a caso contr rio o commit conter todas as modifica es E se voc tiver editado v rios arquivos em v rios locais Rever cada modifica o uma por uma ser frustante e enfadonho Neste caso use git add i cuja interface menos simples por m mais flex vel Com algumas poucas teclas voc pode aprovar ou n o v rios arquivos de uma vez ou rever e selecionar as modifica es em um arquivo especifico Alternativamente execute git commit interactive o que automaticamente efetuar seus commit assim que terminar de aprovar 7 4 O Indice A rea de Atua o do Git At agora estivemos evitando o famoso index do git mas agora teremos que enfrent lo para explicar o t pico acima O index uma rea de atua o tempor ria O Git frequentemente atualiza os dados diretamente entre seu projeto e sua historia Preferencialmente Git primeiro armazena os dados no index e ent o copia os dados do index para seu destino final Por exemplo commit a na realidade um processo em duas etapas A primeira etapa coloca uma fotografia do estado atual de cada arquivo rastreado em um ndice O segundo passo registra permanentemente a fotografia localizado no ndice O commit sem a op o a somente executa o segundo passo e
49. ocolo Git 3 3 Codigo fonte secreto Para um projeto que n o seja de c digo aberto omita o comando touch e garanta que voc nunca ir criar um arquivo com o nome git daemon export ok O reposit rio n o poder ser baixado via protocolo git somente aqueles com acesso SSH poder o visualiza lo Se todos os seus rep sit rios forem fechados n o necess ria a execu o do daemon do git pois todas as comunica es ir o ocorrer por meio do SSH 3 4 Repositorios Vazios Um reposit rio chamado de vazio bare porque ele n o possui um diret rio de trabalho ele cont m somente arquivos que normalmente est o escondidos no subdiret rio git Em outras palavras ele mant m a hist ria de um projeto e nunca guarda uma fotografia de alguma vers o Um reposit rio vazio tem um papel semelhante aquele do servidor principal nos sistemas de controle de vers o centralizados o diret rio principal home de seu projeto Os desenvolvedores clonam seu projeto a partir dele e fazem o push da ultima vers o oficial para ele Geralmente ele reside em um servidor que somente dissemina os dados O desenvolvimento ocorre nos clones de modo que o reposit rio principal home pode funcionar sem um diret rio de trabalho Muitos comandos git falham em reposit rios vazios a n o ser que a vari vel de ambiente GIT DIR seja configurada para o path do reposit rio ou a op o bare seja fornecida 3 5 Push versus Pull Por q
50. odos os descendentes desses commits Isso significa que o hash do Head oficial ser diferente do hash do reposit rio alterado Seguindo a trilha dos hash n o correspondentes podemos apontar o arquivo alterado bem como o commit onde ele foi corrompido Resumindo gra as aos 20 bytes que representam o ultimo commit seguro imposs vel adulterar um reposit rio Git sobre as famosas caracter sticas do Git Branching Merging Tags Meros detalhes O cabe alho atual mantido em um arquivo git HEAD que cont m um hash de um objeto commit O hash atualizado durante um commit bem como com muitos outros comandos Branch s o quase a mesma coisa eles s o arquivos em git refs heads Tags tamb m elas est o em git refs tags mas s o atualizadas por um conjunto diferente de comandos 48 Cap tulo 9 Ap ndice A Defici ncias do Git H algumas quest es sobre o Git que joguei pra debaixo do tapete Algumas s o facilmente tratadas com script e gambiarras algumas requerem uma reorganiza o ou redefini o do projeto e para as poucas chatea es remanescentes s resta esperar por uma solu o Ou melhor ainda solucione as e ajude a todos 9 1 Pontos fracos do SHA1 A medida que o tempo passa os cript grafos descobrem mais e mais os pontos fracos do SHA1 Atualmente encontrar colis es de hash fact vel para algumas organiza es bem equipadas Dentro de alguns anos talvez at um PC comum ter capacidad
51. odu o estados salvos quando quiser Ao contr rio da maioria dos jogos de computador eles s o geralmente mais espertos na economia de espa o Normalmente apenas uns poucos arquivos mudam de vers o para vers o e com poucas diferen as Armazenar as diferen as ao inv s de todos os arquivos economiza espa o 1 3 Controle distribu do Agora imagine um jogo de computador muito dif cil T o dif cil de terminar que v rios jogadores experientes pelo mundo decidem formar uma equipe e compartilhar seus estados salvos do jogo para tentar venc lo Speedruns s o exemplos reais jogadores especializados em diferentes n veis do mesmo jogo colaboram na produ o de resultados incr veis Como voc configura um sistema para que todos possam obter facilmente o que os outros salvarem E salvar novos estados Nos velhos tempos todos os projetos utilizavam um controle de vers es centralizado Um servidor em algum lugar mantinha os jogos salvos Ningu m mais teria todos os jogos Cada jogador mantinha apenas alguns jogos salvos em suas maquinas Quando algum jogador quiser avan ar no jogo ele pega o ultimo jogo salvo do servidor joga um pouco salva e manda de volta para o servidor para que os outros possam usar E se um jogador quiser pegar um jogo antigo salvo por algum motivo Talvez o jogo atual salvo esteja em um n vel imposs vel de jogar devido algu m ter esquecido um objeto tr s n veis atr s e preciso encontrar o lti
52. omando git commit a N o gosta de copiar e colar hash Ent o use git checkout My first b para ir ao commit que come a a frase informada Voc tamb m pode solicitar pelo estado salvo ha 5 commit atr s git checkout master 5 2 4 Revertendo Como nun tribunal eventos podem ser retirados dos registros Da mesma maneira voc pode especificar qual commit desfazer git commit a git revert 1b6d ir desfazer apenas o commit do hash informado A regress o gravada como um novo commit e que pode ser confirmada executando o comando git log Cap tulo 2 Truques b sicos 2 5 Gera o do Changelog Alguns projetos precisam de um changelog http en wikipedia org wiki Changelog Podemos gerar um changelog com o comando S git log gt ChangeLog 2 6 Download de arquivos Para obter uma c pia de um projeto gerenciado com GIT digite S git clone git server path to files Por exemplo para obter todos os arquivos usados para criar este site S git clone git git or cz gitmagic git Mais adiante teremos muito o que dizer sobre o comando clone 2 7 A ltima Vers o Se voc j obteve a c pia de um projeto usando git clone pode agora atualizar para a ltima vers o com S git pull 2 8 Publica o instant nea Suponha que voc tenha escrito um script e gostaria de compartilh lo Voc poderia simplesmente dizer para pegarem do seu computador mas se o fizerem enquanto voc est
53. projeto Apag lo insuficiente pois pode ser acessado pelos commit anteriores Temos que remover o arquivo de todos os commit git filter branch tree filter rm top secret file HEAD Veja git help filter branch que discute este exemplo e mostra um m todo mais r pido No geral filter branch permite que voc altere grandes se es do hist rico s com um comando Depois o diret rio git refs original descreve o estado dos casos antes da opera o Verifique se o comando filter branch faz o que voc deseja e ent o apague esse diret rio se voc deseja executar mais comandos filter branch Por ultimo voc deve substituir os clones do seu projeto pela vers o revisada se desejar interagir com eles depois 26 Cap tulo 5 Li es de historia 5 5 Fazendo hist ria Quer migrar um projeto para Git Se ele for gerenciado por um algum dos sistemas mais conhecidos ent o poss vel que algu m j tenha escrito um script para exportar todo o hist rico para o Git Caso contr rio d uma olhada em git fast import que l um texto num formato especifico para criar o hist rico Git do zero Normalmente um script usando este comando feito as pressas sem muita frescura e executado apenas uma vez migrando o projeto de uma s vez Por exemplo cole a listagem a seguir num arquivo tempor rio como tmp history commit refs heads master committer Alice lt alicefexample com gt Thu 01 Jan 1970 00 00 00 0
54. quivos com nomes normais vamos encontrar somente identificadores Ids Utilizando os Ids como 43 Cap tulo 8 Segredos Revelados nomes de arquivos bem como uns poucos lockfiles e alguns truques com o timestamp o Git transforma qualquer sistema de arquivos simples em um poderoso banco de dados 8 3 Intelig ncia Como o Git sabe que um arquivo foi renomeado mesmo que voc nunca tenha mencionado o fato explicitamente Com certeza voc executou git mv mas isto exatamente o mesmo que um git rm seguido por um git add A an lise heur stica do Git verifica al m das a es de renomear e de c pias sucessivas entre vers es De fato ele pode detectar at peda os de c digo sendo movidos ou copiados entre arquivos Embora n o cubra todos os casos faz um trabalho decente e esta caracter stica est sendo sempre aprimorada Caso n o funcione com voc tente habilitar op es mais refinadas para detec o de c pias e considere uma atualiza o 8 4 Indexando Para cada arquivo monitorado o Git armazena informa es como tamanho hora de cria o e ltima modifica o em um arquivo conhecido como index Para determinar se um arquivo foi modificado o Git compara seus status atual com o que tem no index Se coincidem ent o ele pode ignorar o arquivo J que verifica es de status s o imensamente mais baratas que ler o conte do do arquivo se voc editar poucos arquivos o Git vai atualizar seus status qua
55. r ltimo A p gina de ajuda sugere utilizar tags para resolver esse problema Isto ap s enviar um pacote digite git tag f lastbundle HEAD e crie um novo pacote de atualiza o com git bundle create newbundle HEAD lastbundle 6 4 Patches A moeda Universal Patches s o representa es textuais das suas mudan as que podem ser facilmente entendidas pelos 32 Cap tulo 6 Git Multiplayer computadores e pelos seres humanos Isso tem um forte apelo Voc pode mandar um patch por e mail para os desenvolvedores n o importando que sistema de vers o eles est o utilizando Como os desenvolvedores podem ler o e mail eles podem ver o que voc editou Da mesma maneira do seu lado tudo o que voc precisa de uma conta de e mail n o necess rio configurar um reposit rio online do Git Lembrando do primeiro cap tulo S git diff 1b6d gt my patch produz um patch que pode ser colado em um e mail para discuss o Em um reposit rio Git digite S git apply lt my patch para aplicar o patch Em configura es mais formais quando o nome do autor e talvez sua assinatura precisem ser armazenadas podemos gerar os patches correspondentes a partir de um certo ponto com o comando git format patch 1b6d Os arquivos resultantes podem ser fornecidos ao git send email ou enviados manualmente Voc tamb m pode especificar uma faixa de commits git format patch 1b6d HEAD No lado do receptor
56. r muito quando o n mero de usu rios aumenta O trabalho pode ser interrompido quando a rede ou o servidor central para Ao contr rio o Git guarda o hist rico do seu projeto no diret rio git no diret rio de trabalho Essa a sua c pia do hist rico de modo que voc pode ficar offline at que deseje se comunicar com os outros Voc tem total controle sobre o destino de seus arquivos pois o Git pode facilmente recriar um estado salvo a partir do git a qualquer hora 8 2 Integridade A maioria das pessoas associam criptografia com manter informa es secretas mas outra aplica o igualmente importante manter a integridade da informa o O uso correto das fun es criptogr ficas de hash pode prevenir o corrup o acidental ou intencional dos dados Um hash SHAI pode ser entendido como um n mero identificador nico de 160 bits para cada sequ ncia de bytes que voc vai encontrar na vida Na verdade mais que isso para cada sequ ncia de bytes que qualquer ser humano jamais usar durante v rias vidas Como um hash SHA1 ele mesmo uma sequ ncia de bytes podemos gerar um hash de sequ ncias de bytes formada por outros hash Essa observa o simples surpreendentemente til a procura por cadeias hash hash chains Vamos ver mais adiante como o Git a utiliza para garantir com efici ncia a integridade de dados A grosso modo o Git mant m os seus arquivos no subdiret rio git objects onde ao inv s de ter ar
57. rande k soimaan e a R a i ig 37 7 4 O Indice A rea de Atua o do Class setsa Andei Gas si 38 1 5 N o perca CABE A HEAD aeeoe n iosiaiga dh ces casado as EEEE EEE raise canela cea ads 38 1 6 Explorando o HEAD snenie a Eer EEE St pcs E Eo EEE E TESS 39 1 leB seando seno Gitaar a a a e a ae e cas E a ae aea 40 Tee Manobras RA Oa S r E E A EST ii 41 1 9 Preven o a maus ComM aeien nee oni E eE EEE EEEE AEE AEE E 42 8 Segredos Revelados sesossesosoosossosecsosossosossecoosecsesoesesosssesssossesossesossossesossesossesosoossesosossosoesessosossesosseso 43 ABA TENAS Aos i ILa fe T6 SS AaS E E E 43 8 2 Integridade n an A A A RE E EE E EE NTEN E Aa ETERA 43 O Io INE rencide eese er oore ameen AE AEE E EP ESENE ES SERENE SEE S AEREE E EEOSE EET 44 SA Indexando nienn a a e a a a a a a a a a i 44 85 Origem do Gl tirria n a E T E E A E E E E 44 8 6 O Banco de Dados de Objetos ssesseseesesseeesseesresssresrsrestrrrsteestesertsserresrnsertnsentesenteensrererenreees 44 8 15 BIODS OAE AEO TEE EEE AEE EEEE Hd dd E EE EO EET 45 S SAOS nen A a a a a a raa a a a E 46 SDS COMMIS aeee o E ERA TR TEREA EIEE EO AERE ETR 47 8 10 Indistingu vel da Magia eesesseeesseseseesseeeseesrerrsrerrsreserrrsreresterstsserresrnsertnseetesrntertsseeterentetee 47 9 Ap ndice A Defici ncias do Git s sss sssssssrsesosossssossosssnesoss sossssesssssosovssssvsssross vorsrosopssso or ss vossososessss ss 49 9 1 Pontos fracos do SHA Lurr
58. ras palavras voc praticamente faz um espelhamento do servidor central Tudo o que se pode fazer no reposit rio principal voc pode fazer no seu reposit rio local 3 1 Sincronizando Computadores Eu posso aguentar fazer tarballl ou usar o rsync para backup e sincroniza es b sicas Mas s vezes edito no meu laptop outras no meu desktop e os dois podem n o ter conversado entre si nesse per odo Inicialize um reposit rio Git e fa a um commit seus arquivos em uma das m quinas Ent o fa a na outra m quina git clone other computer path to files para criar uma segunda c pia dos seus arquivos e do reposit rio Git A partir de agora use S git commit a S git pull other computer path to files HEAD o que deixar os arquivos da m quina em que voc est trabalhando no mesmo estado que est o no outro computador Se voc recentemente fez alguma altera o conflitante no mesmo arquivo o Git lhe informar e voc poder fazer um novo commit e ent o escolher o que fazer para resolv lo 3 2 Controle cl ssico de c digo Inicialize um reposit rio Git para seus arquivos S git init S git add git commit m Initial commit No servidor principal inicialize um reposit rio vazio do Git em algum diret rio mkdir proj git S cd proj git 10 Cap tulo 3 Um pouco de clonagem S git bare init S touch proj git git daemon export ok E inicie o daemon Git se necess rio git daemon d
59. rtido que pode agradar aos amigos e enfurecer os inimigos com suas maravilhosas habilidades Ao inv s de entrar em detalhes forneceremos apenas instru es para casos espec ficos Ap s o uso repetido voc gradualmente entender como cada truque funciona e como adaptar as receitas s suas necessidades Tradu es Simplified Chinese blynn gitmagic intl zh cn by JunJie Meng and JiangWei Converted to Traditional Chinese blynn gitmagic intl zh tw via cconv f UTF8 CN t UTF8 TW French blynn gitmagic intl fr by Alexandre Garel Paul Gaborit and Nicolas Deram Also hosted at itaapy http tutoriels itaapy com German blynn gitmagic intl de by Benjamin Bellee and Armin Stebich also hosted on Armin s website http gitmagic lordofbikes de Portuguese Brazilian blynn gitmagic intl pt BR by J I Serafini and Leonardo Siqueira Rodrigues Russian blynn gitmagic intl ru by Tikhon Tarnavsky Mikhail Dymskov and others Spanish blynn gitmagic intl es by Rodrigo Toledo and Ariset Llerena Tapia Ukrainian blynn gitmagic intl uk by Volodymyr Bodenchuk e Vietnamese blynn gitmagic intl vi by Tr lt 7847 gt n Ng lt 7885 gt c Qu n also hosted on his website http vnwildman users sourceforge net gitmagic Outras Edi es Single webpage book html barebones HTML with no CSS PDF file book pdf printer friendly Debian package http packages debian or
60. s vezes navego pelo hist rico com o ggit http sourceforge net projects qgit em raz o de sua interface mais fotog nica ou com o tig http jonas nitro dk tig uma interface em modo texto tima para conex es lentas Alternativamente instale um servidor web e execute git instaweb e use um navegador Cap tulo 2 Truques b sicos 2 10 Exerc cios Seja A B C D quatro commits sucessivos onde B id ntico a A exceto por alguns arquivos que foram removidos Queremos adicionar novamente os arquivos em D Como podemos fazer isso Existem no minimo 3 solu es Assumindo que estamos em D 1 A diferen a entre A e B s o or arquivos removidos Podemos criar um patch representando esta diferen a e aplic la S git diff BA git apply 2 Como salvamos os arquivos em A podemos recuper los S git checkout A foo c bar h 3 Podemos visualizar as mudan as de A para B que queremos desfazer S git revert B Qual a op o melhor A que voc preferir E f cil fazer o que voc quer com o git e na maioria das vezes existe mais de uma forma de faz lo Cap tulo 3 Um pouco de clonagem Em sistemas de controle de vers es mais antigos checkout a opera o padr o para se obter arquivos Obtendo assim os arquivos do ponto de salvamento informado No Git e em outros sistemas distribu dos de controle de vers es clonagem a opera o padr o Para obter os arquivos criamos um clone do reposit rio inteiro Em out
61. se que instantaneamente Falamos anteriormente que o index uma rea de atua o staging Por que um monte de status de arquivos uma area de atua o staging porque o comando add coloca os arquivos no banco de dados do Git e atualiza esse status enquanto o comando commit sem op es cria um commit baseado somente no status e arquivos j existentes no banco de dados 8 5 Origem do Git Esta mensagem na lista de discuss o do Linux Kernel http 1kml org lkml 2005 4 6 121 descreve a sequ ncia de eventos que levaram ao Git A discuss o inteira um sitio arqueol gico fascinante para historiadores do Git 8 6 O Banco de Dados de Objetos Cada vers o de seus dados mantida em um bando de dados de objetos que reside no subdiret rio 44 Cap tulo 8 Segredos Revelados git objects os outros residentes de git armazenam menos dados o index nomes dos branchs etiquetas tags configura es de op es logs a localiza o do commit HEAD e outros O bando de dados objeto elementar e elegante e a origem do poder do Git Cada arquivo dentro de git objects um objeto Existem 3 tipos de objetos que nos interessam objetos blob objetos rvores tree e objetos commit 8 7 Blobs Primeiro um truque m gico Peque um nome de arquivo qualquer arquivo Em um diret rio vazio execute S echo sweet gt YOUR FILENAME Sgt Init git add find git objects type f Voce ver
62. semelhante e que pode trabalhar perfeitamente junto com o Git Com o plugin hg git um usu rio do Mercurial pode realizar push e pulls de um repositorio Git Para obter o hg git plugin com o Git git clone git github com schacon hg git git ou no Mercurial hg clone http bitbucket org durin42 hg git Infelizmente n o conhe o de um plugin semelhante para o Git Por essa raz o aconselho o Git no lugar do Mercurial para o reposit rio principal mesmo que voc prefira o Mercurial Com o Mercurial geralmente um volunt rio mant m um repositorio Git paralelo para acomodar os usu rios Git e gra as ao plugin hg git um projeto Git automaticamente acomoda os usu rios Mercurial Embora o plugin converta um repositorio Mercurial em um reposit rio Git fazendo o push para um reposit rio vazio esse servi o mais f cil de fazer com o script ng fast export sh dispon vel em S git clone git repo or cz fast export git Para fazer a convers o em um diret rio vazio execute git init hg fast export sh r hg repo ap s adicionar o script ao seu PATH 3 11 Bazaar Vamos mencionar o Bazaar rapidamente por que o sistema de controle de vers es distribu do mais utilizado depois do Git e do Mercurial Bazaar tem a vantagem de retrospectiva j que relativamente recente seus projetistas puderam aprender com os erros dos projetos anteriores e evitar as principais falhas Al m disso seus desenvolvedores es
63. stead of d Analogamente a tentativa de sobrescrever um branch movendo o falha for causar a perda de dados Para for ar a movimenta o do branch use 41 Cap tulo 7 Gr o Mestre Git git branch M source target instead of m Ao contr rio do checkout e do reset estes dois comandos adiar o a destrui o dos dados As modifica es ainda ser o armazenadas no subdiret rio git e podem ser resgatados recuperando o hash apropriado do git 1ogs veja a se o Explorando o HEAD acima Por padr o eles ser o mantidos por pelo menos duas semanas Clean Alguns comandos do Git recusam se a avan ar devido o receio de sobrescrever arquivos n o monitorados sem commit Se voc tiver certeza de que todos os arquivos e diret rios n o monitorados s o dispens veis ent o apague os sem miseric rdia com git clean f d Da pr xima vez o maldito comando n o se recusar a funcionar 7 9 Preven o a maus Commits Erros est pidos poluem meus reposit rios Os mais assustadores s o os arquivos perdidos devido a comandos git add esquecidos Transgress es mais leves s o espa o em branco e conflitos de merge n o resolvidos embora sem perigo eu gostaria que eles nunca aparecessem nos meus registros p blicos Se eu tivesse comprado um seguro idiota usando hook para me alertar sobre esses problemas S cd git hooks cp pre commit sample pre commit Older Git versions chmod x pre commit Agora o Git
64. t o preocupados com a portabilidade e interopera o com outros sistemas de controle de vers o O plugin bzr git permite que os usu rios do Bazaar trabalhem com os repositorios Git de alguma forma O programa tailor converte um reposit rio Bazaar em reposit rios Git e pode fazer isso de 15 Cap tulo 3 Um pouco de clonagem forma incremental enquanto que bzr fast export adequada para realizar convers es uma nica vez 3 12 Por que uso o Git Originalmente escolhi o Git porque escutei que poderia gerenciar o inimagin vel e ingerenci vel c digo fonte do kernel do Linux E nunca senti necessidade de mudar O Git tem me servido admiravelmente bem e j estou acostumado com suas falhas Como utilizo na maior parte do tempo o Linux os problemas nas outras plataformas n o s o importantes Tamb m prefiro programas em C e scripts bash a execut veis tais como scripts Python existem poucas depend ncias e sou viciado em tempos de execu o muito r pidos J pensei tamb m como o Git poderia ser melhorado criando minha pr pria ferramenta Git mas somente como um exerc cio acad mico Assim que completei meu projeto continuei com o git pois os ganhos seriam m nimos para justificar a utiliza o de um sistema diferente Naturalmente voc pode e precisa pensar diferente e pode se sentir melhor com outro sistema No entanto voc n o pode estar muito errado com o Git 16 Cap tulo 4 Bruxarias com branch R
65. t cedo e com frequ ncia e arrume tudo facilmente mais tarde com um rebase 25 Cap tulo 5 Li es de historia 5 3 Altera es locais por ltimo Voc est trabalhando em um projeto ativo Faz alguns commit locais ao longo do tempo e sincroniza com a rvore oficial com merge Este ciclo se repete algumas vezes at estar tudo pronto para ser enviado rvore central Mas agora o hist rico no seu clone local est uma confus o com o emaranhado de modifica es locais e oficiais Voc gostaria de ver todas as suas modifica es em uma se o cont nua e depois todas as modifica es oficiais Este um trabalho para git rebase conforme descrito acima Em muitos casos pode se usar a op o onto e evitar sua intera o Veja tamb m git help rebase com exemplos detalhados deste incr vel comando Voc pode dividir commit Ou at reorganizar branch de uma rvore Tome cuidado o comando rebase muito poderoso Para rebases complicados primeiro fa a um backup com git clone 5 4 Reescrevendo o hist rico Eventualmente ser necess rio que seu controle de c digo tenha algo equivalente ao modo Stanlinesco de retirada de pessoas das fotos oficiais apagando os da hist ria Por exemplo suponha que temos a inten o de lan ar um projeto mas este envolve um arquivo que deve ser mantido privado por algum motivo Talvez eu deixe meu n mero do cart o de cr dito num arquivo texto e acidentalmente adicione o ao
66. tanto se voc estiver fazendo commit o Git pode localizar o problema git bisect start git bisect bad HEAD git bisect good 1b6d O Git verifica um estado intermedi rio entre as duas vers es Testa a fun o e se ainda estiver errada git bisect bad Sen o substitua bad por good O Git novamente o levar at um estado intermedi rio entre as vers es definidas como good e bad diminuindo as possibilidades Ap s algumas itera es esta busca bin ria o guiar at o commit onde come ou o problema Uma vez terminada sua investiga o volte ao estado original digitando git bisect reset Ao inv s de testar todas as mudan as manualmente automatize a busca com git bisect run my_script O Git usa o valor de retorno do comando utilizado normalmente um nico script para decidir se uma mudan a good ou bad o comando deve terminar retornando com o c digo 0 se for good 125 se a mudan a for ignor vel e qualquer coisa entre 1 e 127 se for bad Um valor negativo abortar a bissec o Podemos fazer muito mais a p gina de ajuda explica como visualizar as bissec es examinar ou reproduzir o log da bissec o e eliminar mudan as reconhecidamente inocentes para acelerar a busca 28 Cap tulo 5 Li es de historia 5 7 Quem fez tudo dar errado Tal como outros sistema de controle de vers es o Git tem um comando blame culpado git blame bug c que marca cada linha do arquivo mostr
67. te mova para um branch diferente um pull posterior ir seguir fielmente o branch original Essa op o somente aplica ao reposit rio que fizemos a clonagem em primeiro lugar que armazenado na op o branch master remote Se fizermos um pull de outro reposit rio devemos estabelecer explicitamente que branch desejamos git pull git example com other git master Isso explica por que alguns de nossos exemplos de pull e push n o possuem argumentos 6 6 Branches Remotos Quando clonamos um reposit rio clonamos tamb m todos os seus branches Voce pode n o ter notado isso porque o Git sempre esconde os branches mas podemos solicit los especificamente Isso previne os branches no reposit rio remoto de interferir com seus branches e tamb m torna o Git mais f cil para os iniciantes Liste os branches remotos com git branch r Voce deve obter uma sa da como origin HEAD origin master origin experimental 34 Cap tulo 6 Git Multiplayer Eles representam branches e a HEAD de um reposit rio remoto e pode ser utilizado em comandos normais do Git Por exemplo suponha que voc fez v rios commits e gostaria de comparar contra a ltima vers o buscada fetched Voc pode buscar nos logs pelo hash apropriado SHA1 mas muito mais f cil digitar git diff origin HEAD Ou voc pode ver o que o branch experimental cont m S git log origin experimental 6 7 Remotos M ltiplos Suponha q
68. teragirem Alguns desenvolvedores acreditam que o hist rico deva ser imut vel com falhas ou n o Outros acreditam que suas rvores devem estar apresent veis antes de liber las ao p blico O Git contempla ambos pontos de vista Tal como a clonagem branch e merge rescrever o hist rico simplesmente outro poder que o Git lhe concede Cabe a voc a us lo sabiamente 5 1 Eu corrijo Acabou de fazer um commit mas queria ter escrito uma mensagem diferente Ent o execute git commit amend para mudar a ltima mensagem Percebeu que esqueceu de adicionar um arquivo Execute git add para adicion lo e ent o execute o comando acima Quer incluir mais algumas modifica es no ltimo commit Fa a as e ent o execute git commit amend a 5 2 e tem mais Suponha que o problema anterior dez vezes pior Ap s uma longa sess o onde voc fez um monte de commit E voc n o est muito satisfeito com a organiza o deles e algumas das mensagens dos commit poderiam ser reformuladas Ent o execute git rebase i HEAD 10 e os ltimos 10 commit aparecer o em seu EDITOR favorito Trecho de exemplo pick 5c6eb73 Added repo or cz link pick a311a64 Reordered analogies in Work How You Want pick 100834f Added push target to Makefile 24 Cap tulo 5 Li es de historia Os commit antigos precedem os mais novos nessa lista diferentemente do comando log Aqui 5c6eb73 o commit mais velho e o 10083
69. ue S git commit amend m Shakespear Change the commit message git filter branch env filter export GIT AUTHOR DATE Fri 13 Feb 2009 15 31 30 0800 GIT AUTHOR NAME Alice GIT AUTHOR EMAIL alice fexample com GIT COMMITTER DATE Fri 13 Feb 2009 15 31 30 0800 GIT COMMI ER NAME Bob GIT COMMITTER EMAIL bobftexample com Rig timestamps and authors find git objects type f Agora voc pode ver git objects 49 993fe130c4b3bf24857a15d7969c396b7bc187 que o hash SHA 1 de seu conte do commit 158 NUL tree 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 LF author Alice lt alicefexample com gt 1234567890 0800 LF committer Bob lt bobfexample com gt 1234567890 0800 LF LF Shakespeare LF Como anteriormente voc pode executar o zpipe ou cat file para ver voc mesmo Esse o primeiro commit de modo que n o existe nenhum commit pai mas commit posteriores ir o sempre conter no m nimo uma linha identificando o seu commit pai 47 Cap tulo 8 Segredos Revelados 8 10 Indistingu vel da Magia O segredo do Git parece ser t o simples Parece que voc pode misturar um pouco de script shell e adicionar uma pitada de c digo C para cozinha lo em quest o de horas uma mistura de opera es b sicas do sistema de arquivos e hash SHA 1 guarnecido com arquivos lock e fsyncs para robustez De fato isso descreve acuradamente as primeiras vers es do Git
70. ue dois desenvolvedores est o trabalhando em nosso projeto e que queremos manter o controle de ambos Podemos seguir mais de um reposit rio a qualquer hora com git remote add other git example com some repo git git pull other some branch Agora temos merged em um branch a partir do segundo reposit rio e temos f cil acesso a todos os branches de todos os reposit rios S git diff origin experimental other some branch 5 Mas e se s queremos comparar as suas altera es sem afetar o trabalho de ambos Em outras palavras queremos examinar seus branches sem ter que suas altera es invadam nosso diret rio de trabalho Ent o ao inv s de pull execute S git fetch Fetch from origin the default git fetch other Fetch from the second programmer Isso faz com que somente busque os hist ricos Embora o diret rio de trabalho continue intocado podemos fazer referencia a qualquer branch de qualquer reposit rio em um comando Git pois agora possu mos uma copia local Lembre se de nos bastidores um pull simplesmente um fetch e um merge Geralmente fazemos um pull pois queremos fazer um merge do ultimo commit ap s o fetch essa situa o uma exce o not vel Veja git help remote para saber como remover reposit rios remotos ignorar certos branches e outras informa es 35 Cap tulo 6 Git Multiplayer 6 8 Minhas preferencias Para meus projetos eu gosto que contribuidores para preparar os reposit
71. ue n s falamos do comando push ao inv s de basearmos no familar comando pull Em primeiro lugar porque o pulling falha em reposit rios vazios ao contr rio voc deve fazer um fetch um comando que ser discutido mais adiante Mas mesmo que utilizamos um reposit rio normal em um servidor centralizado fazer o pull para ele ainda ser problem tico Primeiro teremos que fazer o login no servidor e ent o entrar com o comando pull com o endere o de rede da m quina que estamos fazendo o pull Os firewall podem interferir e o que dizer quando n o temos acesso a uma janela de shell do servidor Entretanto al m desse caso desencorajamos o push em um reposit rio por causa da confus o que pode ocorrer quando o destino possui um diret rio de trabalho 12 Cap tulo 3 Um pouco de clonagem Em resumo enquanto estiver aprendendo a utilizar o git somente fa a push quando o alvo for um reposit rio vazio caso contr rio utilize o pull 3 6 Fazendo um Fork do Projeto Chateado com a rumo que o seu projeto est tomando Acha que pode fazer um trabalho melhor Ent o no seu servidor S git clone git main server path to files Em seguida avise a todos sobre seu fork do projeto no seu servidor A qualquer hora voc poder mesclar merge suas mudan as do projeto original no mesmo com S git pull 3 7 Backup Supremos Gostaria de ter v rios arquivos geogr ficamente dispersos redundantes e anti falsifica es Se seu
72. uivos marcados s o examinados 2 Outros podem saber quem est trabalhando no arquivo perguntando ao servidor central quem marcou o arquivo para edi o Com o script certo voc pode fazer o mesmo com o Git Isto requer apenas a coopera o dos programadores que devem executar o script em particular quando estiver editando um arquivo 9 5 Arquivo do Hist rico Como o Git armazena modifica es muito amplas no projeto reconstruir o hist rico de um nico arquivo requer mais trabalho do que em sistemas de controle de vers es que monitoram arquivos individualmente A penalidade usualmente leve e vale a pena devido efici ncia que d as outras opera es Por exemplo git checkout t o r pido quanto cp a e os deltas que abrangem grandes partes do projeto tem uma compress o melhor do que os deltas de agrupamentos de arquivos 9 6 Clone Inicial A cria o de um clone mais trabalhosa do que fazer checkout em outros sistemas de controle de vers es quando h um hist rico grande O custo inicial se paga a longo prazo pois as futuras opera es ser o mais r pidas e offline Entretanto em algumas situa es prefer vel criar um clone vazio com a op o depth Isto muito mais r pido por m resulta em um clone com funcionalidades reduzidas 9 7 Projetos Vol teis O Git foi feito para ser r pido no que diz respeito ao tamanho das mudan as Humanos fazem poucas edi es de uma vers o para outra
73. voc estar numa realidade alternativa pois suas a es s o diferentes das realizadas da primeira vez Esta realidade alternativa chamada de branch n s falaremos mais sobre isso depois Por ora apenas lembre se que git checkout master Cap tulo 2 Truques b sicos lhe levar de volta para o presente Assim fa a o Git parar de reclamar sempre fa a um commit ou reset em suas altera es antes de executar um checkout Voltemos para a analogia dos jogos de computador e git reset hard carrega um salvamento antigo e apaga todos jogos salvos mais novos do que este que foi carregado git checkout carrega um salvamento antigo mas se jogar a partir dele os pr ximos salvamento realizados se desvincular o dos salvamentos j realizados ap s o que foi carregado Qualquer jogo salvo que voc fizer ser colocado em um branch separado representado uma realidade alternativa em que entrou Lidaremos com isso mais adiante We deal with this later Voc pode escolher restaurar apenas alguns arquivos ou diret rios acrescentando os ao final do comando git checkout 82f5 some file another fil Tome cuidado pois esta forma de checkout pode sobrescrever arquivos sem avisar Para prevenir acidentes fa a um commit antes de qualquer comando checkout especialmente quando esta aprendendo a utilizar o Git De modo geral sempre que se sentir inseguro sobre alguma opera o seja um comando Git ou n o execute primeiro o c
74. vos fa a git rm kludge h obsolete c git rm r incriminating evidence O Git ir apagar estes arquivos se voc ainda n o apagou Renomear um arquivo o mesmo que remover o nome antigo e adicionar um novo nome H tamb m o atalho git mv que tem a mesma sintaxe do comando mv Por exemplo Cap tulo 2 Truques b sicos git mv bug c feature c 2 3 Desfazer Refazer avan ado As vezes voc s quer voltar e esquecer todas as mudan as realizadas a partir de um certo ponto pois est o todos erradas Ent o git log mostrar uma lista dos ltimos commit e seus hash SHA1 commit 766f9881690d240ba334153047649b8b8f11c664 Author Bob lt bobfexample com gt Date Tue Mar 14 01 59 26 2000 0800 Replace printf with write commit 82f5ea346a2e651544956a8653c0f58dcl51275c Author Alice lt alicefexample com gt Date Thu Jan 1 00 00 00 1970 0000 Initial commit Os primeiros caracteres do hash s o suficientes para especificar o commit alternativamente copie e cole o hash completo Digite git reset hard 766f para restaurar ao estado de um dado commit e apagar permanentemente os registros de todos os novos commit a partir deste ponto Outras vezes voc quer voltar brevemente para um estado Neste caso digite git checkout 82f5 Isto levar voc de volta no tempo preservando os novos commit Entretanto como nas viagens no tempo dos filmes de fic o se voc editar e fizer um commit

Download Pdf Manuals

image

Related Search

Related Contents

Whirlpool ET22MM User's Manual      Manuale Craftsbury  8XT coaxial enclosure coaxial enclosure 8XT enceinte coaxiale  

Copyright © All rights reserved.
Failed to retrieve file