Home
manual do usuário
Contents
1. checkout Esse hook pode ser usado para realizar checagens de valida o no reposit rio mostrar as diferen as de um HEAD anterior caso seja diferente ou configurar as propriedades dos metadados do diret rio post merge GIT DIR hooks post merge Esse hook invocado pelo git merge que acontece quando um git pui1 feito sobre um reposit rio local O hook leva um simples par metro um flag de status especificando se um merge que est sendo feito ou n o era um merge do tipo squash Esse hook n o afeta o resultado do git merge e n o executado se o merge falha devido aos conflitos 103 O Livro da Comunidade Git 104 Esse hook pode ser usado em conjunto com o hook pre commit correspondente para salvar e restaurar qualquer forma de metadados associdados com a arvore de trabalho ex permiss es donos ACLS etc pre receive GIT DIR hooks pre receive Esse hook invocado pelo git receive pack sobre o reposit rio remoto que acontece quando um git push feito sobre o reposit rio local S antes de iniciar uma atualiza o das refer ncias sobre o reposit rio remoto o hook pre receive invocado Seu status de sa da determina o sucesso ou falha da atualiza o Esse hook executa uma vez para receber a opera o Ele n o leva nenhum argumento mas para cada refer ncia ser atualizada ele recebe sobre a entrada padr o uma linha no formato SP SPLF onde lt old value gt o nome do objeto antigo a
2. git clone bare proj proj git touch proj git git daemon export ok 82 Cap tulo 5 Uso intermedi rio O diret rio resultante proj git cont m um reposit rio git m nimo ele s o conte do do diret rio git sem qualquer arquivo dentro dele Depois copie o proj git para o servidor onde voc planeja hospedar o reposit rio p blico Voc pode usar scp rsync ou qualquer coisa mais conveniente Exportando um reposit rio git via protocolo git Esse o m todo preferido Se algu m ent o administra o servidor ele dever pedir a voc qual o diret rio para colocar o reposit rio dentro e qual URL git aparecer nele Se nao fosse assim tudo que voc precisa para fazer iniciar git daemon ele ouvir a porta 9418 Por padr o permitir acessar qualquer diret rio que se pare a com um diret rio git e cont m o arquivo m gico git daemon export ok Passando alguns caminhos de diret rios como argumentos para git daemon restringir mais ainda esses caminhos exportados Voc pode tamb m executar git daemon como um servi o inetd veja as p ginas de manual do git daemon para mais detalhes Veja especialmente a sec o de exemplos Exportando um reposit rio git via http O protocolo git d melhor desempenho e confiabilidade mas sobre host com um servidor web configurado exportar via http pode ser mais simples de configurar 83 O Livro da Comunidade Git 84 Tudo que voc precisa fazer
3. Sempre publique a altera o do submodule antes de publicar as altera es para o superproject que referencia ele Se voc esquecer de publicar as altera es do submodule outros n o ser o capazer de clonar o reposit rio S cd git super a echo i added another line to this file gt gt a txt git commit a m doing it wrong this time S cd i git add a git commit m Updated submodule a again git push cd git cloned grt pull git submodule update error pathspec 261dfac35cb99d380eb966e102c1197139f7fa24 did not match any file s known to git Did you forget to git add Unable to checkout 261dfac35cb99d380eb966e102c1197139f7f a24 in submodule path ta Se voc est selecionando um submodule para realizar um commit manualmente tenha cuidado para n o esquecer as barras quando especificar o path Com as barras adicionadas Git assumir que voc est removendo o submodule e verificando que o conteudo do diret rio cont m um reposit rio TH GR dr d dn dn d Xr cd git super a echo i added another line to this file gt gt a txt git commit a m doing it wrong this time GO ss git add a git status On branch master Changes to be committed Cap tulo 6 Git Avan ado use git reset HEAD file to unstage deleted a new file a a txt Modified submodules aaSc351 0000000 1 Initial commit submodule a Para corrigir o index depois de realizar dessa opera
4. o reset as modifica es e ent o adicione o submodule sem a barra S git reset HEAD A S git add a git status On branch master Changes to be committed use git reset HEAD file to unstage modified a Modified submodules d ddbc35Ll BDd3baso 41 doing it wrong this time Voc tamb m nao deveria voltar branches em um submodule al m de commits que sempre foram gravados em algum superproject 115 O Livro da Comunidade Git N o seguro executar git submodule update Se voc tem feito e realizado commit das altera es dentro do submodule sem verificar o branch primeiro Eles ser o sobrescritos silenciosamente cat a txt module a echo line added from private2 gt gt a txt git commit a m line added inside private2 S d ss git submodule update Submodule path a checked out d266b9873ad50488163457f025db7cdd9683d88b cc a cat a txt module a NOTA As altera es ainda s o vis veis no reflog dos submodules Isso n o o caso se voc n o realizou o commit de suas altera es gitcast c11 git submodules 116 Cap tulo 7 Trabalhando com Git GIT NO WINDOWS mSysGit gitcast c10 windows git DEPLOYING COM GIT Capistrano and Git GitHub Guide on Deploying with Cap Capitulo 7 Trabalhando com Git 117 O Livro da Comunidade Git 118 Git and Capistrano Screencast INTEGRAC O COM SUBVERSION MIGRA O DE UM SCM Ent o voc tomou a
5. d065e76 empty commit to push project to runcoderun era 791ec6b updated grit gemspec i 756a947 including code from github updates ES 3fa3284 whitespace dO lcffd whitespace i a0e4a3d updated grit gemspec 7569d0d including code from github updates Finalmente voc pode reverter a ordem do log com a opc o reverse gitcast c4 git log 42 Cap tulo 4 Uso B sico COMPARANDO COMMITS GIT DIFF Voc pode gerar diffs entre duas vers es quaisquer do seu projeto usando git diff git diff master test Isso produzir o diff entre os dois branches Se voc preferir encontrar o diff dos ancestrais comuns do test voc pode usar tr s pontos ao inv s de dois git diff master test git diff uma ferramenta incrivelmente util para entender as alterac es que existem entre dois pontos quaisquer no hist rico de seu projeto ou para ver o que as pessoas est o tentando introduzir em novos branches etc O que voc levar para o commit Voc usar normalmente git diff para entender as diferen as entre seu ltimo commit seu index e seu diret rio de trabalho Um uso comum simplesmente executar git diff que mostrar a voc altera es no diret rio de trabalho atual que ainda n o foi selecionado para o pr ximo commit Se voc quer ver o que est selecionado para o pr ximo commit voc pode executar git diff cached que mostrar a voc as diferen as entre o index e o seu ltimo commit o
6. voc realiza pull eles realizam pull eles realizam push V repo p blico deles lt repo pessoal deles Enviando altera es para um reposit rio p blico Veja que exportando via http ou git permite outros mantenedores recuperem suas ltimas altera es mas eles n o tem permiss o de acesso para escrita Por isso voc precisar atualizar o reposit rio p blico com as ltimas altera es criadas em seu reposit rio privado 49 O Livro da Comunidade Git 50 Uma forma simples de fazer isso usando git push e ssh para atualizar o branch remoto chamado master com o ltimo estado de seu branch chamado master execute git push ssh seuservidor com voce proj git master master ou s git push ssh seuservidor com voce proj git master Como o git fetch git push ir reclamar se isso n o resultar em um fast forward veja a se o seguinte sobre como proceder nesse caso Veja que o alvo de um push normalmente um reposit rio m nimo Voc tamb m pode enviar para um reposit rio que ja possui uma rvore de trabalho mas essa rvore nao ser atualizada pelo push Isso pode levar a resultados inesperados se o branch que voc enviou o branch atual Como com o git fetch voc tamb m pode ajustar as op es de configura o ent o por exemplo depois cat gt gt git config EOF remote public repo url ssh seuservidor com voce proj git EOF voc
7. 0500 initial commit Uma rvore pode referenciar um ou mais objetos blob cada um correspondendo a um arquivo Al m disso uma rvore pode tamb m referenciar para outros objetos tree desta maneira criando uma hierarquia de diret rios Voc pode examinar o conte do de qualquer rvore usando Is tree lembre se que uma por o inicial suficiente do SHA1 tamb m funcionar git ls tree 92b8b694 100644 blob 3b18e512dba79e4c8300dd08aeb37f 8e728b8dad file txt Desse form vemos que a tree possui um arquivo dentro dela O hash SHA1 uma refer ncia para aqueles arquivos de dados git cat file t 3b18e512 blob Um blob s um arquivo de dados que tamb m podemos examinar com cat file git cat file blob 3b18e512 hello world Veja que esse um arquivo de dados antigo ent o o objeto que o git nomeou dele corresponde a rvore inicial que era uma tree com o estado do diret rio que foi gravado pelo primeiro commit Cap tulo 8 Internals and Plumbing Todos esses objetos s o armazenados sobre seus nomes SHA1 dentro do diret rio do git find git objects onu o GLEO gea git o gt sqit o Jit git o zd E 5 qit o grea grt 8 UE git o zit bj b bj bj bj bj bj bj bj bj bj bj D bj D ects jects pack ects info ects 3b ects 3b 18e512dba79e4c8300dd08aeb37f8e728b8dad ects 92 ects 92 b8b694ffb1675e5975148e1121810081dbdffe ects 54 ects 54 196cc2703dc165cbd373a65a4dc 224d50a
8. 110 Cap tulo 6 Git Avan ado for in a boc do git submodule add git i Si done NOTA Nao use URLs locais aqui se voc planeja publicar seu superproject Veja que arquivos git submodule criou ls a git gitmodules a b c d O comando git submodule faz varias coisas Ele clona o submodule sobre o diret rio atual e por padr o troca para o branch master Ele adiciona o caminho do clone do submodule para o arquivo gitmodules e adiciona esse arquivo no index pronto para o commit Ele adiciona a ID do commit atual do submodule no index pronto para o commit Commit o superproject git commit m Add submodules a b c and d Agora clone o superproject 9 Gd ues git clone super cloned cd cloned Os diret rios do submodule existem mas est o vazios 111 O Livro da Comunidade Git 112 ls a a git submodule status d266b9873ad50488163457 025db7cdd9683d88b a e81d457dal5309b4 fef4249aba9b50187999670d b c1536a972b9affea0f16e0680ba87332dc059146 c d96249ff5d57de5de093e6baff9e0aafa5276a74 d NOTA Os nomes dos objetos commit mostrado acima ser o diferentes para voc mas eles dever o corresponder aos nomes dos objetos commit do HEAD em seu reposit rio Voc pode verificar ele executando git ls remote git a Realizar um pull dos submodules um processo de dois passos Primeiro execute git submodule init para adicionar a URL do reposit rio submodule para git config
9. colocar o rec m criado reposit rio git m nimo no diret rio que est exportado pelo web server e fazer alguns ajustes para dar os clientes webs algumas informa es extras que eles precisam mv proj git home you public html proj git cd pro ggit git bare update server info chmod atx hooks post update Ur oro dod Para uma explica o das ltimas duas linhas veja git update server info e githooks Divulgue a URL do proj git Qualquer um ent o deveria ser capaz de clonar ou baixar dessa URL por exemplo com a linha de comando git clone http yourserver com you proj git CONFIGURANDO UM REPOSIT RIO PRIVADO Se voc precisa configurar um reposit rio privado e quer faz lo localmente em vez de usar uma soluc o de hospedada voc tem v rias opc es Acesso a reposit rio atrav s do SSH Geralmente a solu o mais f cil simplesmente usar o Git sobre SSH Se os usu rios j possuem contas ssh na m quina voc pode colocar o reposit rio em qualquer lugar que eles tenham acesso deixando eles acessarem atrav s de logins ssh Por exemplo digamos que voc tem um reposit rio que voc quer hospedar Voc pode export lo como um reposit rio m nimo e ent o envi lo para dentro do seu servidor assim Cap tulo 5 Uso intermedi rio git clone bare home user myrepo git tmp myrepo git scp r tmp myrepo git myserver com opt git myrepo git Ent o algu m pode clonar com uma conta ssh no servid
10. de sua m quina O Livro da Comunidade Git 10 Diferengas do SVN E importante notar que isso muito diferente da maioria dos sistemas SCM com que voc pode estar familiarizado Subversion CVS Perforce Mercurial e como todos eles usam sistemas Delta Storage como eles armazenam as diferencas entre um commit e o pr ximo Git nao faz isso ele armazena um snapshot de todos os arquivos de seu projeto como eram nessa estrutura em rvore no momento de cada commit claro que isso n o significar necessariamente que seu hist rico do reposit rio atingir um tamanho enorme Usando git gc o Git far alguma limpeza interna incluindo compress o de arquivos de revis o Esse um conceito muito importante para entender quando estiver usando Git Objeto Blob Um blob geralmente armazena o conte do de um arquivo 5bld3 ifndef REVISION H define REVISION H include parse options h define SEEN 1u 9 define UNINTERESTING iu define TREESAME lu lt lt 2 Cap tulo 2 O b sico sobre os objetos no git Voc pode usar git show para examinar o conte do de qualquer blob Supondo que temos um SHA para um blob podemos examinar seu conte do assim git show 6ff87c4664 Note that the only valid version of the GPL as far as this project is concerned is this particular version of the license ie v2 not v2 2 or v3 x or whatever unless explicitly otherwise stated Um objeto blob n o nada mais que
11. dever estar capaz de realizar o push acima s com git push public repo master Veja as explica es das op es remote url branch remote e remote push em git config para mais detalhes Cap tulo 4 Uso B sico O que fazer quando um push falha Se um push n o resultar em um fast forward do branch remoto ent o falhar com um erro desse tipo error remote refs heads master is not an ancestor of local refs heads master Maybe you are not up to date and need to pull first error failed to push to ssh seuservidor com voce proj git Isso pode acontecer por exemplo se voc usar git reset hard para remover commit j publicados ou usar git commit amend para substituir commits j publicados ou usar git rebase para recriar qualquer commit j publicado Voc pode for ar git push para realizar a atualiza o precedendo o nome do branch com um sinal de git push ssh seuservidor com voce proj git master Normalmente quando um branch head modificado em um reposit rio p blico ele modificado para apontar para um descendente desse commit que ele apontou antes For ando um push nessa situa o voc quebra aquela conven o Contudo essa uma pr tica comum para pessoas que precisam de uma forma simples para publicar uma s rie de patch de um trabalho em progresso e um compromisso aceit vel contanto que voc avise os outros desenvolvedores que dessa forma que preten
12. git checkout HEAD hello rb O primeiro comando restaura hello rb para a vers o no index para que o git diff hello rb retorne nenhuma direfenga O segundo comando ir restaurar hello rb da vers o no HEAD para que ambos git diff hello rb e git diff cached hello rb retornem nenhuma diferenga 79 O Livro da Comunidade Git 80 Corrigindo erros que foram para o commit Se voc realizou um commit e depois se arrependeu existem dois caminhos fundamentalmente diferentes para resolver o problema 1 Voc pode criar um novo commit que desfaz qualquer coisa que foi feita pelo commit antigo Essa a maneira correta se seu erro j se tornou p blico 2 Voc pode voltar e modificar o commit antigo Voc nunca deveria fazer isso se voc j tornou o hist rico publico git normalmente nao espera que o hist rico de um projeto mude e nao pode realizar corretamente merges repetidos de um branch que possue o hist rico alterado Se voc reescrever o hist rico do reposit rio qualquer pessoa que clonou o reposit rio ter que manualmente corrigir o problema em sua c pia veja a se o RECUPERANDO DE UM REBASE REMOTO em git rebase Corrigindo um erro com um novo commit Criar um novo commit que reverte um altera o mais recente muito f cil s passar para o comando git revert a refer ncia para o commit ruim por exemplo para reverter o commit mais recente git revert HEAD Isso criar um novo commit que desfaz
13. n o entendeu completamente tudo at agora iremos revisar todos esses t picos nas pr ximas sec es Agora estamos prontos para irmos a instala o configura o e uso do Git 22 Cap tulo 3 A Primeira vez Cap tulo 3 A Primeira vez INSTALANDO O GIT Instalando a partir do C digo Fonte Em resumo em um sistema baseado em Unix voc pode baixar o c digo fonte do Git em Git Download Page e entao executar essas linhas make prefix usr all com seu pr prio usu rio make prefix usr install como root Voc precisar dessas bibliotecas instaladas expat curl zlib e openssl embora com uma poss vel excec o do expat esse normalmente j existe no sistema 23 O Livro da Comunidade Git 24 Linux Se voc est rodando o Linux voc pode provavelmente instalar o Git facilmente atrav s do sistema de gerenciamento de pacotes nativo yum install git core apt get install git core Se nao funcionar voc pode baixar os pacotes deb ou rpm daqui RPM Packages Stable Debs Se voc preferir instalar a partir do c digo fonte em um sistema Linux este artigo pode ser til Article Installing Git on Ubuntu Mac OS X 10 4 Em ambos Mac 10 4 e 10 5 voc pode instalar o Git via MacPorts se voc tiver que instal lo Se n o voc pode instal lo a partir daqui http www macports org install php Uma vez instalado tudo o que voc deveria fazer sudo port install git core
14. o diretamente na linha de comando Veja gitignore para mais detalhes REBASING Suponha que voc crie um branch mywork sobre um branch remoto origin git checkout b mywork origin 55 O Livro da Comunidade Git origin Ros Agora voc faz algum trabalho criando dois novos commits vi file txt git commit vi otherfile txt git commit Ur Xr Xr od Enquanto isso algu m tamb m faz algum trabalho criando dois novos commits sobre o branch origin Nisso ambos origin e mywork avangam seus trabalhos existindo diverg ncias entre eles 56 Cap tulo 5 Uso intermedi rio Neste ponto voc poderia usar pull para juntar suas alterac es de volta nele o resultado criar um novo commit atrav s do merge como isso 57 O Livro da Comunidade Git git merge Contudo se voc prefere manter o hist rico em mywork como uma simples s rie de commits sem qualquer merge ao inv s disso voc pode escolher usar git rebase git checkout mywork git rebase origin 58 Cap tulo 5 Uso intermedi rio Isso remover cada um dos seus commits de mywork temporariamente salvando eles como patches em um diret rio chamado git rebase atualizar mywork para apontar para a ltima vers o de origin ent o aplicar cada um dos patches salvos para o novo mywork git rebase Uma vez que mywork atualizado para apontar para o mais novo objeto commit criado seus velhos commits ser o abandon
15. 3 121 0 unstaged nothing nothing nothing path assets stylesheets style css layout book index template html layout chapter template html script pdf zrh text 14 Interactive Rebasing 0 Interactive Rebasing markdown path assets stylesheets style css layout book index template html layout chapter template html script pdf rb text 14 Interactive Rebasing 0 Interactive Rebasing markdown levado de volta para o menu principal onde posso ver que arquivos que possuem o status path assets stylesheets style css layout book index template html layout chapter template html 67 O Livro da Comunidade Git 3 3 nothing script pdf rb S unchanged 121 0 text 14 Interactive Rebasing 0 Interactive Rebasing markdown N s podemos ver o primeiro dos quatro arquivos selecionados e o ultimo que ainda n o est Isso basicamente uma forma resumida para ver a mesma informa o que vemos quando executamos git status a partir da linha de comando git status modified On branch master Changes to be committed use git reset HEAD file to unstage modified assets stylesheets style css modified layout book index template html modified layout chapter template html modified script pdf rb Changed but not updated use git add lt file gt to update what will be committed text 14 Interactive Rebasing 0 Interactive Rebasing markdown Existem v rias coisas teis que podemos fazer incluindo d
16. Engel 11 days ago message Add dependency for Open4 0f87b4d was Scott Chacon 12 days ago message merged recent changes Outra coisa interessante que voc pode fazer visualizar o gr fico do commit com a op o graph como git log pretty format h s graph 2d3acf9 ignore errors from SIGCHLD on trap 5e3eell Merge branch master of git github com dustin grit IN 39 O Livro da Comunidade Git 40 420eac9 Added a method for getting the current branch 30e367c timeout code and tests 58309431 add timeout protection to grit e1193 8 support for heads with slashes in them d6016bc require time for xmlschema Dar uma tima representac o em formato ASCII dos hist ricos dos commits Ordenando o Log Voc tamb m pode visualizar as entradas do log em algumas diferentes ordens Veja que git log inicia com os commits mais recentes e vai at os mais antigos pais contudo desde que o hist rico do git pode conter m ltiplas linhas diferentes de desenvolvimento a ordem particular que os commits s o listados podem ser de alguma forma arbitr rias Se voc quer especificar uma certa ordem voc pode adicionar uma op o de ordena o para o comando git log Por padr o os commits s o mostrados em ordem cronol gica reversa Contudo voc tamb m pode especificar topo order que faz os commits aparecerem em order topol gica ex commits descendentes s o
17. Uma tree equivalente a um diret rio tree ish Uma refer ncia para qualquer um objeto commit objeto tree ou um objeto tag apontando para um objeto tag ou commit ou tree unmerged index Um index que cont m entradas no qual ainda n o foram realizadas num merge Cap tulo 9 Gloss rio objeto inalcangavel Um objeto no qual nao ating vel a partir de um branch tag ou qualquer outra refer ncia working tree Uma rvore de trabalho com os arquivos do projeto corrente Ele normalmente equivalente ao HEAD mais qualquer alterac es locais que voc tenha feito mas n o foi realizado commit 165
18. as modificac es no HEAD Ser dado a voc a oportunidade de editar a mensagem do commit para o novo commit Voc pode tamb m reverter uma altera o mais recente por exemplo o pr ximo para ltimo git revert HEAD Cap tulo 5 Uso intermedi rio Nesse caso o git entender para desfazer a altera o antiga enquanto mant m intacto qualquer altera o feita desde ent o Se altera es mais recentes sobreporem com as altera es para serem revertidas ent o voc ser questionado para corrigir manualmente os conflitos bem na hora da resolu o do merge Corrigindo um erro atrav s da modifica o de um commit Se voc j realizou o commit de algo mas percebe que precisa consert lo vers es recentes do git commit suporta uma flag amend que instrui o git para substituir o commit HEAD com um novo baseado no conte do atual do index Isso d a voc uma oportunidade para adicionar arquivos que voc esqueceu de adicionar ou corrigir a mensagem do commit antes de enviar as altera es para o mundo ver Se voc encontrar um erro em um commit antigo mas ainda um dos que voc ainda n o publicou para o mundo voc pode usar git rebase em modo interativo com git rebase i fazendo a altera o que requerem corre o com edit Isso permitir a voc juntar o commit durante o processo de rebase MANUTEN O NO GIT Garantindo bom desempenho Em grandes reposit rios git conta com a compress o para manter as i
19. banco de dados de outro banco de dados de objetos que chamado de alternate bare repository 150 Cap tulo 9 Gloss rio Um reposit rio bare normalmente um nome apropriado para um diret rio com um sufixo git que nao possui um c pia checkout local de qualquer arquivo sobre o controle de revis o Entao todos os arquivos administrativos e de controle do git que normalmente estariam no sub diret rio escondido git est o presentes diretamente no diret rio repository git por exemplo e nenhum outro arquivo presente ou checkout Normalmente publicadores de reposit rios p blicos tornam diret rios bare dispon veis objeto blob Objeto sem tipo o conte do de um arquivo branch Um branch uma linha ativa de desenvolvimento O commit mais recente sobre um branch referenciado como o ponto mais alto naquele branch Esse ponto refenciado por um HEAD no qual movido para cima quando algum desenvolvimento adicional feito sobre ele Um simples reposit rio do git pode conter um n mero arbitr rio de branches mas sua arv re de trabalho associada somente a um deles o branch atual ou corrente e o HEAD aponta para aquele branch cache Termo obsoleto para index chain Uma lista de objetos onde cada objeto em uma lista cont m a refer ncia para o seu sucessor por exemplo o sucessor de um commit poderia ser um dos seus pais 151 O Livro da Comunidade Git changeset Forma como BitKeeper cvsps
20. comando que voc precisa git remote add f Bproject path to B 1 git merge s ours no commit Bproject master 2 git read tree prefix dir B u Bproject master 3 git commit m Merge B project as our subdirectory 4 git pull s subtree Bproject master 5 Ur or Xr od od O benef cio de usar subtree merges que ele requer menos carga administrativa dos usu rios de seu reposit rio Isso funciona com clientes antigos antes de Git v1 5 2 e voc possui o c digo correto depois do clone 91 O Livro da Comunidade Git 92 Contudo se voc usa sub m dulos ent o voc pode escolher n o transferir os objetos do sub m dulo Isso pode ser um problema com subtree merges Tamb m nesse caso de voc fazer altera es para outro projeto mais f cil para enviar altera es se voc s usa sub m dulos de Using Subtree Merge ENCONTRANDO ERROS GIT BISECT Suponha uma vers o 2 6 18 de seu projeto mas a vers o no master est defeituosa As vezes a melhor forma de encotrar a causa realizar uma busca usando for a bruta no hist rico do projeto para encontrar o commit em particular que causou o problema O comando git bisect pode ajudar voc a fazer isso git bisect start git bisect good v2 6 18 git bisect bad master Bisecting 3537 revisions left to test after this 65934a9a028b88e83e2b0f8b36618fe503349f8e BLOCK Make USB storage depend on SCSI rather than selecting it try Se voc execu
21. create refs heads if it is not 9764edd90cf9a423c9698a2f1e814f16f0111238 Add diff lcs dependency elbale3ca83d53a2f16b39c453fad33380f8dlcc Add dependency for Open4 0f87b4d9020fff756c18323106b3fd4e2f422135 merged recent changes accepts relative alt pat f0ce7d5979dfb0 4157998086e14a8d2 9653300 updated the Manifest file ou voc pode usar o formato short 38 git log pretty short commit a6b444f570558a5f31ab508dc2a24dc34773825f Author Scott Chacon lt schacon gmail com gt dammit this is the second time this has reverted commit 49d77 72783e4e9f12d1bbcacc45e7a15c800240 Author Scott Chacon lt schacon gmail com gt modified index to create refs heads if it is not there commit 9764edd90cf9a423c9698a2f1e814f16f0111238 Author Hans Engel lt engel engel uk to gt Add diff lcs dependency Cap tulo 4 Uso B sico Voc tamb m pode usar medium full fuller email ou raw Se esses formatos n o s o exatamente o que voc precisa voc tamb m pode criar seu pr prio formato com a op o pretty format veja a documenta o do git log para ver todas as op es de formata o git log pretty format h was an ar message a6b444f was Scott Chacon 5 days ago message dammit this is the second time this has re 49d77 7 was Scott Chacon 8 days ago message modified index to create refs heads if it i 9764edd was Hans Engel 11 days ago message Add diff lcs dependency elbale3 was Hans
22. do Git de volta a 1 5 2 e tem sido implementado de volta para a 1 4 4 5 se voc est usando sobre a s rie 1 4 Vers o 2 tamb m inclui uma checagem de CRC de cada objeto ent o dados comprimidos podem ser copiados diretamente de um packfile para outro durante o re empacotamento sem precisar detectar corrup o de dados Indexes vers o 2 tamb m podem manipular packfiles maiores que 4GB Cap tulo 8 Internals and Plumbing objects pack pack 4eb8b c5 idx fanout 255 gt Version Version 2 o moe _ J T C aioe fanout table 256 x 4 bytes fanout table fanout 255 gt size 256 x 4 bytes Lo Sib Sto IL JL A offset shas table sha listing size x 20 byte size x 20 4 bytes 3 crc checksum J size x 4 byte trailer 2 x 20 bytes packfile offset size x 4 byte I368ge packfile c th n n indic Re held a N x 8 bytes N is number of 4 byt ED unen O Livro da Comunidade Git 134 Em ambos formatos a tabela fanout simplesmente uma forma de encontrar o deslocamento de um sha particular mais r pido dentro do arquivo index As tabelas de offset sha1 s o ordenados por valores sha1 isso permite busca bin ria nessa tabela e a tabela fanout aponta para a tabela offset sha1 de uma forma espec fica para que parte da ltima tabela que cobre todos os hashes que iniciam com o byte dado pode ser encontrado para evitar 8 intera es da busca bin ria Na vers o 1 os offsets e shas est o n
23. do reposit rio qualquer pessoa que clonou o reposit rio ter que manualmente corrigir o problema em sua c pia veja a se o RECUPERANDO DE UM REBASE REMOTO em git rebase Um m todo simples usar git commit amend para modificar o ltimo commit Ele til para corrigir uma mensagem do commit ou fazer uma simples modifica o antes de envi lo Rebase interativo uma boa maneira de modificar m ltiplos commits Commits podem ser combinados por squashing alterando por edi o ou removendo completamente git filter branch uma boa maneira de editar commits em massa Ele til quando um componente inteiro precisa ser removido de um projeto Por exemplo removendo um sub sistema que licenciado sobre uma licen a open source incompat vel Ou ele pode ser usado para alterar o autor do commit sem alterar o c digo BRANCHING E MERGING AVAN ADOS Conseguindo ajuda na resolu o de conflitos durante o merge Todas as altera es que o merge foi capaz de realizar automaticamente j est o adicionadas no arquivo index ent o git diff mostrar somente os conflitos Ele usa uma sintaxe incomum 87 O Livro da Comunidade Git 88 git diff daff esce file txt index 802992c 2b60207 0000000 a file txt b file txt 888 1 1 1 1 41 5 GGG lt lt lt lt lt lt lt HEAD file txt Hello world Goodbye gt gt gt gt gt gt gt 77976da35alldb4580b80ae27e8d65caf5208086 file txt Lembre se
24. git submodule init Agora use git submodule update para clonar o reposit rio e verificar os commits especificados no superproject git submodule update cd a ls a sit ms txt Uma das maiores diferen as entre git submodule update git submodule add QUE git submodule update verifica um commit espec fico ou melhor o branch atual Isso como mover se para uma tag o head isolado entao voc nao trabalha sobre o branch git branch no branch master Cap tulo 6 Git Avan ado Se voc quer fazer uma alterac o dentro de um submodule e voc tem um head isolado ent o voc dever criar ou mudar para um branch fazer suas altera es publicar a altera o dentro do submodule e ent o atualizar o superprojetct para referenciar o novo commit git checkout master ou git checkout lt b fix up ent o echo adding a line again gt gt a txt git commit a m Updated the submodule from within the superproject git push GO zu git diff diff git a a b a index d266b98 26ldfac 160000 Ur Xr Xo dX od afa b a 1 1 Subproject commit d266b9873ad50488163457 025db7cdd9683d88b Subproject commit 261dfac35cb99d4380eb966e102c1197139f7fa24 git add a git commit m Updated submodule a git push Voc tem que executar git submodule update depois git pull se voc tamb m quer atualizar os submodules 113 O Livro da Comunidade Git 114 Armadilhas com submodules
25. linhas que possuem um dos termos e qualquer um dos dois outros termos por exemplo se queremos ver onde tem qualquer uma das constantes definidas PATH ou MAX git grep e define and e PATH e MAX abspath c define MAXDEPTH 5 builtin blame c define MORE THAN ONE PATH 1u 13 builtin blame c define MAXSG 16 builtin describe c define MAX TAGS FLAG BITS 1 builtin fetch pack c define MAX IN VAIN 256 builtin fsck c fdefine MAX SHA1 ENTRIES 1024 78 Cap tulo 5 Uso intermedi rio DESFAZENDO NO GIT RESET CHECKOUT E REVERT Git prov m ltiplos m todos para corrigir erros quando voc est desenvolvendo Selecionar um m todo apropriado depende se possui ou nao erros nos commits ja realizados se voc realizou commits com erros e se voc compartilhou os commits com problemas com algu m Corrigindo erros que ainda nao foram para o commit Se voc cometeu erros na sua arvore de trabalho mas ainda nao fez o commit desses erros voc pode retornar a arvore de trabalho inteira para o estado do ultimo commit com git reset hard HEAD Isso descartar qualquer alterac o que voc possa ter adicionado no index do git e assim como qualquer altera o que voc tenha na sua rvore de trabalho Em outras palavras isso causa no resultado de git diff e git diff cached que sejam ambos vazios Se voc quer restaurar s um arquivo digamos seu hello rb use git checkout git checkout hello rb
26. nome da refer ncia que na verdade foi atualizada Esse hook usado essencialmente para notifica es e n o pode afetar o resultado do git receive pack O hook post update pode dizer quais s o os heads que foram enviados mas ele n o sabe quais deles s o valores original ou atualizados por isso um mau lugar para fazer ver os logs entre o antigo novo O hook post 107 O Livro da Comunidade Git 108 receive consegue ambos originais e atualizados valores das refer ncias Pode ser que voc considere ele por exemplo se precisar dele Quando ativado o hook post update padr o executa git update server info para manter a informa o usada no transporte mudo ex HTTP atualizado Se voc est publicando um reposit rio git que acess vel via HTTP voc deveria provavelmente ativar esse hook Ambas as sa das e erros padr es s o encaminhadas para git send pack na outra extremidade ent o voc pode simplesmente fazer um echo nas mensagens para o usu rio pre auto gc GIT DIR hooks pre auto gc Esse hook invocado pelo git gc auto Ele nao leva nenhum par metro e a sa da com o status diferente de zero desse script faz com que O git gc auto seja cancelado Refer ncias Git Hooks Git hooks make me giddy RECUPERANDO OBJETOS CORROMPIDOS Recovering Lost Commits Blog Post Cap tulo 6 Git Avan ado Recovering Corrupted Blobs by Linus SUBMODULES Grandes projetos muitas vezes s o compostos de peq
27. o root e um objeto blob para cada arquivo Ent o temos um objeto commit apontando para o root ent o podemos rastre lo at o momento em que o nosso projeto se parecia quando foi commitado Objeto Tag 49e11 tag i type tagger scott o my tag message that explains this tog Um objeto tag cont m um nome de objeto chamado simplesmente de object tipo de objeto nome da tag o nome da pessoa tagger que criou a tag e uma mensagem que pode conter um assinatura como pode ser visto usando git cat file grt cat file tag v1 5 0 object 437b1b20df4b356c9342dac8d38849f24ef44f27 type commit tag v1 5 0 18 Cap tulo 2 O b sico sobre os objetos no git tagger Junio C Hamano lt junkio cox net gt 1171411200 0000 GIT 1 540 Version GnuPG v1 4 6 GNU Linux iD8DBOBF01GqwMbZpPMRm50RAURiAJ9OhBLd7s2kqj kKlqlqqC57SbnmzQCdG4ui nLE L9aUXdWeTFPron96DLA 2E 0 Veja o comando git tag para aprender como criar e verificar objetos tag Note que git tag pode ser tamb m usado para criar tags peso leve que nao sao objetos tag mas s simples refer ncias dos quais os nomes iniciam com refs tags DIRET RIO GIT E DIRET RIO DE TRABALHO O Diret rio Git O diret rio git o diret rio que armazena todos os hist ricos Git e meta informa es do seu projeto incluindo todos os objetos commits trees blobs tags todos os ponteiros onde os diferentes branches est o e muito mais Existe somente u
28. refs e percorrer os objetos commits at o cliente ter todos os objetos que ele precisa Por exemplo se voc pedir para recuperar o branch master ele ver que o master est apontando para 32aae7ae e que o seu master est apontando para abo4a88 ent o voc precisa do 32aae7ae Voc recupera aquele objeto Cap tulo 8 Internals and Plumbing CONNECT http myserver com GET git myproject git objects 32 aae7aef7a412d62192 710 2130302997ec883 200 e ele se parecer com isso and it looks like this tree aal76f b83a47d00386be237b450fb9dfb5be251la parent bd7lcad2d597d0f1827d4a3f67bb96a646f02889 author Scott Chacon lt schacon gmail com gt 1220463037 0700 committer Scott Chacon lt schacon gmail com gt 1220463037 0700 added chapters on private repo setup scm migration raw git Ent o agora ele recupera a tree aa176fb8 GET git myproject git objects aa 176fb83a47d00386be237b450fb9dfb5be25la 200 que se parecer com isso 100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3 COPYING 100644 blob 97551a6d36855093cfb345c9e79516e5099a13fb README 100644 blob 9d1b23b8660817e4a74006f15fae86e2a508C573 Rakefile Ent o ele recupera aqueles objetos GET git myproject git objects 6f f 87c4664981e4397625791c8ea3bbb5f2279a3 200 GET git myproject git objects 97 b51a6d43685b093cfb345c9e79516e5099a13fb 200 GET git myproject git objects 9d 1b23b8660817e4a74006f15fae86e2a508c573 200 Ele na verdade faz isso com Curl e po
29. revis o local Todo o hist rico est escondido Com controle de revis o distribuida voc pode clonar o hist rico externo inteiro e muito mais facilmente seguir o desenvolvimento e realizar o re merge das altera es locais 109 O Livro da Comunidade Git O suporte a submodules no Git permite um reposit rio conter como um sub diret rio uma c pia de um projeto externo Submodules mant m sua pr pria identidade o suporte a submodule s armazena a localiza o do reposit rio do submodule e a identifica o do commit ent o outros desenvolvedores que clonarem o conte do do projeto superproject podem facilmente clonar todos os submodules na mesma revis o Checkouts parciais do superproject s o poss veis voc pode chamar o Git para clonar nenhum alguns ou todos os submodules O comando git submodule est dispon vel desde o Git 1 5 3 Usu rios com Git 1 5 2 podem procurar os commits do submodule no reposit rio e manualmente mover se para eles vers es mais antigas n o reconhecer o os submodules Para ver como o suporte a submodule funciona crie por exemplo quatro reposit rios de exemplo que podem ser usados depois como submodule mkdir git S Gd grt amp for Ll in ab oe 2 do mkdir i ed i git init echo module i gt Si txt git add Si txt git commit m Initial commit submodule i ed a done Agora crie um superproject e adicione todos os submodules mkdir super cd super 9 git init
30. timo exemplo de um symret Refer ncias simb licas s o manipuladas com o comando git symbolic ref tag Uma ref apontando para um objeto tag ou commit Diferente do head uma tag n o alter vel por um commit Tags n o objetos tag s o armazenados em scrr DIR refs tags Uma tag mais comumente usado para marcar um ponto particular de um commit dentro do projeto tag object Um objeto contendo uma refer ncia apontando para outro objeto que pode conter uma mensagem como no objeto commit Ele pode conter tamb m uma assinatura PGP nesse caso ele chamado de objeto tag assinado topic branch 163 O Livro da Comunidade Git 164 Um branch git comum que usado pelo desenvolvedor para identificar uma linha de desenvolvimento conceitual Como os branches s o f ceis e simples s o muitas vezes desej veis terem diversos pequenos branches onde cada um cont m conceitos bem definidos ou ainda pequenas mudan as relacionadas tracking branch Um branch comum que usado para seguir as modifica es de outro reposit rio Um tracking branch n o deveria conter modifica es diretas ou ter commits locais feitos nele tree Qualquer rvore de trabalho ou uma rvore de objetos juntas com objetos blob e tree dependentes ex uma representa o armazenada de uma rvore de trabalho objeto tree Um objeto contendo uma lista de nomes de arquivos e seus modos de acesso com refs para um blob associado e ou objetos tree
31. tree particular do que cuspir o SHA de 40 d gitos inteiro No Git eles s o conhecidos como um treeish Cap tulo 5 Uso intermedi rio SHA Parcial Se o SHA de seu commit 980e3ccdaac54a0d4de358f3fe5d718027d96aae O git reconhecer qualquer um desses igualmente 980e3ccdaac54a0d4de358 3 e5d718027d96aae 980e3ccdaac54a0d4 980e3cc Contanto que o SHA parcial seja nico ele n o pode ser confundido com outro que inacredit velmente improv vel se voc usa pelo menos 5 caracteres git expandir o SHA parcial para voc Branch Remote ou Tag Voc sempre pode usar um branch remote ou tag ao inv s de um SHA desde que eles sejam de alguma forma ponteiros Se o seu branch master o commit 98063 e voc enviou ele para o origin remoto e nomeado com tag v1 0 ent o todos os seguintes sao equivalentes 980e3ccdaac54a0d4de358 3 e5d4718027d96aae origin master refs remotes origin master master refs heads master V1 0 refs tags v1 0 Significa que os seguintes comandos dar o um resultado id ntico 71 O Livro da Comunidade Git 72 git log master git log refs tags v1 0 Formato de Datas O log que o git mant m permitir a voc fazer algumas coisas localmente como git log master yesterday git log master 1 month ago No qual um atalho para onde o head do branch master estava ontem etc Veja que esse formato pode resultar em diferentes SHAs em diferentes computadores mes
32. um snapshot dos arquivos dados e os que est o no index prontos para inclus o no pr ximo commit gitcast c2 normal workflow Cap tulo 4 Uso B sico B SICO SOBRE BRANCHING E MERGING Um simples reposit rio git pode manter multiplos branches de desenvolvimento Para criar um novo branch chamado experimental use git branch experimental Se executar agora git branch voc ter uma lista de todos os branches existentes experimental master O branch experimental o que voc criou e o branch master um padr o que foi criado automaticamente para voc O asterisco marca o branch no qual voc est atualmente Digite git checkout experimental para trocar para o branch experimental Agora edite um arquivo realize o commit da alterac o e volte para o branch master edit file git commit a git checkout master Verifique que a altera o que voc fez n o est mais vis vel visto que foi feito sobre o branch experimental e agora que voc est de volta sobre o branch master 31 O Livro da Comunidade Git 32 Voc pode fazer uma altera o diferente sobre o branch master edite um arquivo git commit a nesse ponto os dois branches tem diverg ncias com diferentes modifica es em cada um Para realizar um merge das altera es feitas no branch experimental para o master execute git merge experimental Se as mudangas nao conflitarem voc terminou aqui Se exis
33. um grande peda o de dados bin rios Ele n o se referencia a nada ou possui atributos de qualquer tipo nem mesmo um nome de arquivo Visto que o blob inteiramente definido por esses dados se dois arquivos em uma rvore de diret rio ou dentro de m ltiplas vers es diferentes desse reposit rio possui o mesmo conte do eles ir o compartilhar o mesmo objeto blob O objeto totalmente independente da localiza o do arquivo na rvore de diret rio e renomeando esse arquivo n o muda o objeto com o qual est associado Objeto Tree Um tree um objeto simples que possui um conjunto de ponteiros para blobs e outras trees ele geralmente representa o conte do de um diret rio ou sub diret rio 11 O Livro da Comunidade Git blob 5bid3 README tree 03e78 lib tree cdc b test Blob chaga test zb blob Slie7 xdiff O sempre vers til comando git show pode tamb m ser usado para examinar objetos tree mas git Is tree dar a voc mais detalhes Supondo que temos um SHA para uma tree podemos examinar ela assim git ls tree fb3a8bdd0ce 00644 blob 63c918c667fa005ff12ad89437f 2fdc80926e21c gitignore 00644 blob 5529b198e8dl4decbe4ad99db3f7fb632de0439d mailmap 00644 blob 6f 87c4664981e4397625791c8ea3bbb5 2279a3 COPYING 040000 tree 2fb783e477100ce076f6bf57e4a6f026013dc745 Documentation 00755 blob 3c0032cec592a765692234f1cba47dfdcc3a9200 GIT VERSION GEN 00644 blob 289b046a443c064
34. ximo commit e o levar para a linha de comando para voc poder corrigir o commit ou modificar o conte do do commit de alguma forma Se voc quisesse dividir um commit por exemplo voc especificaria edit para esse commit pick pick edit pick pick fc62e55 9824bf4 21d80a5 76b9da6 c264051 added file size fixed little thing added number to log added the apply command Revert added file size not implemented correctly E ent o quando voc for levado para a linha de comando voc reverte aquele commit em dois ou mais novos Digamos que o 21d80a5 modificou dois arquivos arquivo1 e arquivo2 e voc quisesse dividir eles em commits separados Voc poderia fazer isso depois que o rebase deix lo na linha de comando 65 O Livro da Comunidade Git 66 git reset HEAD git add filel git add file2 Ur or Xr X Xr od git rebase co ntinue git commit first part of split commit git commit second part of split commit E agora ao inv s dos 5 commits voc ter 6 A ultima coisa util que o modo interativo do rebase pode fazer retirar commits para voc Se ao inv s de escolher pick squash ou edit para a linha do commit voc simplesmente remove a linha e isso remover o commit do hist rico SELE O INTERATIVA Sele o interativa realmente uma tima forma de trabalhar e visualizar o index do Git De in cio simplesmente digite git add i O Git mostrar a voc to
35. 005 001 360 204 225 376 330 345 z2673 0037 002Total 2797 delta 1799 reused 2360 delta 1529 n Cap tulo 8 Internals and Plumbing lt 276 255L 273s 005 001w0006 001 0000 Veja o capitulo anteriormente sobre Packfile para o formato real dos dados do packfile nessa resposta Enviando Dados Enviar dados sobre os protocolos git ou ssh sao similares mas simples Basicamente o que acontece o cliente requisitar uma inst ncia de receive pack que est iniciado se o cliente tem acesso ent o o servidor retorna todos os SHAs do ref heads dele tem novamente o cliente gera o packfile de tudo que o servidor precisa geralmente somente se o que est no servidor um ancestral direto do que enviado e envia esse fluxo do packfile onde o servidor tamb m armazena ele no disco e constroi um index para ele ou desempacota ele se nao existe muitos objetos nele Esse proceso inteiro realizado atrav s do comando git send pack no cliente que invocado pelo comando git push e o git receive pack no lado do servidor que invocado pelo processo de conex o ssh ou daemon git se ele um servidor aberto para envio 149 O Livro da Comunidade Git Cap tulo 9 Gloss rio GLOSS RIO Aqui n s temos o significado de alguns termos usados dentro do contexto do Git Esses termos foram retirados do Git Glossary alternate object database Atrav s de mecanismos alternativos um reposit rio pode herdar parte de seus objetos do
36. 0e64aac647f3ed22dfd692f70 Author Robert Schiele lt rschiele gmail com gt Date Mon Aug 18 16 17 04 2008 0200 adapt git cvsserver manpage to dash free syntax diff git a Documentation git cvsserver txt b Documentation git cvsserver txt index c2d3c90 785779e 100644 a Documentation git cvsserver txt b Documentation git cvsserver txt 11 7 11 7 SYNOPSIS SSH verse export CVS SERVER git cvsserver export CVS SERVER git cvsserver cvs d ext user server path repo git co HEAD name pserver etc inetd conf Cap tulo 4 Uso B sico 37 O Livro da Comunidade Git Estat sticas do Log Se voc passar a op o stat para git log ele mostrar a voc quais arquivos tem altera es naquele commit e quantas linhas foram adicionadas e removida de cada um S git log stat commit dba9194a49452b5f093b96872e19c91b50e526aa Author Junio C Hamano lt gitster pobox com gt Date Sun Aug 17 15 44 11 2008 0700 Start 1 6 0 X maintenance series Documentation RelNotes 1 6 0 1 txt 15 RelNotes 2 2 files changed 16 insertions 1 deletions Formatando o Log Voc tamb m pode formatar a sa da do log como queira A op o pretty pode dar um numero de formatos pr determinados como oneline git log pretty oneline a6b444f570558a5f31ab508dc2a24dc34773825f dammit this is the second time this has reverted 49d77 72783e4e9f12dlbbcacc45e7a15c800240 modified index to
37. 16ace212efa00felf our files e ent o usar git mk tree novamente cat tmp newtree txt git mk tree 5bac6559179bd543a024d6d187692343e2d8ae83 E agora temos uma estrutura de diret rio artificial no Git se parece com isso fllel copy Our files filel file2 1 diret rio 3 arquivos sem que a estrutura tenha na verdade existido no disco Mas n s temos um SHA 5 ac6559 que aponta para ele Rearranjando Trees Podemos tamb m fazer manipula o de tree atrav s da combina o de trees em novas estruturas usando o arquivo index Como um exemplo simples pegamos a tree que n s j criamos e fazemos uma nova tree que 141 O Livro da Comunidade Git 142 tem duas c pias de nossa tree 5bac6559 dentro dela usando um arquivo index tempor rio Voc pode fazer isso atrav s de um reset na vari vel de ambiente GIT INDEX FILE ou na linha de comando Primeiro lemos a tree dentro de nosso arquivo index sobre um novo prefixo usando o comando git read tree e ent o escrever o conte do do index como uma tree usando o comando git write tree export GIT INDEX FILE tmp index git read tree prefix copyl 5bac6559 git read tree prefix copy2 5bac6559 git write tree bb2fa6de7625322322382215d9ea78c e76508c1 S gt git ls tree bb2fa 040000 tree 5bac6559179bd543a024d6d187692343e2d8ae83 copyl 040000 tree 5bac6559179bd543a024d6d187692343e2d8ae83 copy2 Ent o agora podemos ver que temos criado uma n
38. 205 commits desde not reachable from v2 5 git log test master commits ating veis do master mas n o test git log master test commits ating veis do test mas n o do git log master test commits ating vel de qualquer um dos test ou master mas n o ambos git log since 2 weeks ago commits das 2 ltimas semanas git log Makefile commits que modificaram o Makefile 9 gat Log fs commits que modificaram qualquer arquivo sobre fs 9 git log S foo commits que adicionaram ou removeram arquivos e casam com o texto foo git log no merges n o mostra commits com merge E claro voc pode combinar todas essas op es vamos encontrar commits desde v2 5 que modificou o Makefile ou qualquer arquivo sobre fs git log v2 5 Makefile fs Git log mostrar uma listagem de cada commmit com os commits mais recentes primeiro que casa com os argumentos dados no comando commit 491239170cb1463c7c3cd970862d6de636ba787 Author Matt McCutchen lt matt mattmccutchen net gt Date Thu Aug 14 13 37 41 2008 0400 git format patch documentation clarify what cover letter does commit 7950659dc9ef7 2b50b18010622299c508bfdfc3 Author Eric Raible lt raible gmail com gt Date Thu Aug 14 10 12 54 2008 0700 bash completion git apply should use fix not strip Bring completion up to date with the man page Voc pode tamb m perguntar ao git log para mostrar patches git log p commit da9973c6 9600d9
39. 5975148e1121810081dbdffe author J Bruce Fields lt bfields puzzle fieldses org gt 1143414668 0500 committer J Bruce Fields lt bfields puzzle fieldses org gt 1143414668 0500 REFER NCIAS GIT Branches remote tracking branches e tags s o todos refer ncias para commits Todas as refer ncias s o nomeadas com o nome do caminho separado por barra iniciando com refs os nomes que us vamos at agora s o na verdade atalhos Cap tulo 8 Internals and Plumbing O branch test abreviado de refs heads test A tag v2 6 18 abreviado de refs tags v2 6 18 origin master abreviado de refs remotes origin master O nome completo ocasionalmente util se por exemplo se existe uma tag e um branch com o mesmo nome refs rec m criadas s o na verdade armazenadas no diret rio git refs sobre o caminho formado pelo seu nome Contudo por raz es de efici ncia eles podem tamb m ser empacotados juntos em um simples arquivo veja git pack refs Um outro atalho util o HEAD de um reposit rio pode ser referenciado para usar somente o nome daquele reposit rio Ent o por exemplo origin normalmente um atalho para o branch HEAD no reposit rio origin Para completar a lista de caminhos que o git verifica pelas refer ncias e a ordem que ele usa para decidir qual escolher quando existem m ltiplas refer ncias com o mesmo atalho veja a se o SPECIFYING REVISIONS do git rev parse Mostrando commit
40. 5f 85ba5875917319471dfd98dfc636c1dc65650 PROTOCOLOS DE TRANSFER NCIA Aqui vamos examinar como os clientes e servidores falam um com o outro para transferir todos os dados do Git 143 O Livro da Comunidade Git 144 Recuperando Dados sobre HTTP Recuperar sobre URL http s far o Git usar um protocolo ligeiramente simples Nesse caso todo a l gica est inteiramente no lado do cliente N o requer nenhuma configura o especial no servidor qualquer webserver est tico funcionar bem se o diret rio do git que voc est recuperando est no caminho do webserver Segundo as regras para isso funcionar voc precisa excutar um simples comando sobre o reposit rio do servidor cada vez que alguma coisa for atualizada mesmo assim git update server info que atualiza os arquivos objects info packs e info refs para listar quais refs e packfiles est o dispon veis desde que n o possa realizar uma listagem sobre http Quando o comando executa o arquivo objects info packs se parece como algo assim P pack ce2bd34abc3d8ebc5922dc81b2e1 30bf17cl0cc pack P pack 7ad5f5d05 5e20025898c95296fe4b9c861246d8 pack Para que se o fetch n o poder encontrar um arquivo loose ele pode tentar esses packfiles O arquivo info refs se parecer assim 184063c9b594f8968d61a686b2f6052779551613 refs heads development 32aae7aef7a412d62192 710 2130302997ec883 refs heads master Ent o quando voc recuperar desse reposit rio ele iniciar com esses
41. 7624607d471289b2c7dcd470b INSTALL 00644 blob 4eb463797adc693dc168592656932ff 53f17d0b1 Makefile 00644 blob 548142c327a6790f 8821d67c2eeleff7ab656b52 README 12 Cap tulo 2 O b sico sobre os objetos no git Como voc pode ver um objeto tree cont m uma lista de entradas cada uma com um modo de acesso tipo nome SHA1 e nome de arquivo ordenado pelo nome de arquivo Ele representa o conte do de uma simples rvore de diret rio Um objeto referenciado por uma tree pode ser um blob representando o conte do de um arquivo ou outra tree representando o conte do de um sub diret rio Visto que trees e blobs como todos os outros objetos s o nomeados por um hash SHA1 de seus conte dos duas trees possui o mesmo hash SHA1 se somente se seus conteudos incluindo recursivamente o conteudo de todos os sub diret rios sao id nticos Isso permite ao git determinar rapidamente as diferen as entre dois objetos tree relacionados desde que ele possa ignorar qualquer entrada com nome de objetos id nticos Nota na presen a de sub m dulos trees pode tamb m ter commits como entradas veja a se o Sub M dulos Perceba que todos os arquivos possuem o modo de acesso 644 ou 755 o git na verdade somente d aten o para o bit execut vel Objeto Commit O objeto commit liga o estado f sico de uma rvore com a descri o de como a conseguimos e porque 13 O Livro da Comunidade Git ae668 Voc pode usar a op
42. 99 O Livro da Comunidade Git 100 Esse hook invocado pelo git am Ele nao leva nenhum par metro e invocado depois que o patch aplicado e um commit feito Esse hook usado essencialmente para notifica es e n o pode afetar o resultado do git am pre commit GIT DIR hooks pre commit Esse hook invocado pelo git commit e pode ser ignorado com a op o no verify Ele n o leva nenhum par metro e invocado antes de obter a mensagem do commit proposta e realizar o commit Saindo com status diferente de zero desse script faz com que git commit seja cancelado O hook pre commit padr o quando ativado captura o in cio das linhas com espa os vazios e cancela o commit quando alguma linha encontrada Todos os hooks git commit s o invocados com a vari vel de ambiente crr Eprron se o commando n o carregar um editor para modificar o mensagem de commit Aqui um exemplo de um script Ruby que executa testes RSpec antes de permitir um commit html path spec results html spec f h html_path f p spec run the spec send progress to screen save html results to html path find out how many errors were found html open html path read examples html match d examples 0 to i rescue 0 failures html match d failures 0 to i rescue 0 pending html match d pending 0 to i rescue 0 Cap tulo 6 Git Avan ado if failures zero puts 0 failures examples run pe
43. ATE logfd 0 shal file c 377 map xmmap NULL mapsz PROT READ MAP PRIVATE fd 0 shal file c 479 idx map xmmap NULL idx size PROT READ MAP PRIVATE fd shal file ct780 win gt base xmmap NULL win gt len shal file c 1076 map xmmap NULL size PROT READ MAP PR shal file c 2393 buf xmmap NULL size PROT READ MAP PRIVATE fd wrapper c 89 void xmmap void start size t length Se estamos interessados somente no nome do arquivo podemos passar a op o name only git grep name only xmmap Contigo GXFf G git compat util h read cache c refs c Shal file c wrapper c N s tamb m poder amos ver quantas linhas o termo foi encontrado em cada arquivo com a op o c S gt git grep c xmmap contig e l 76 Cap tulo 5 Uso intermedi rio difir csi git compat util h 1 read cache c 1 refs c 1 shal file c 5 wrapper c l Agora se eu quisesse ver onde foi usado em uma vers o espec fica do git eu poderia adicionar uma tag de refer ncia no final assim git grep xmmap v1 5 0 vil 5 0 sconfig ec contents xmmap NULL st st size PROT READ VIls520sdUt Elice s gt data xmmap NULL s gt size PROT READ MAP PRIVATE fd vl 5 0 git compat util h static inline void xmmap void start size t length v1 5 0 read cache c cache mmap xmmap NULL cache mmap size v1 5 0 refs c log mapped xmmap NULL st st size PROT READ MAP PRIVATE logfd v1 5 0 s5hal files map xmmap NULL st s
44. EAD git last tree c85fbd1996b8e7e5edal288b56042c0cdb91836b parent cdc9a0a28173b6ba4aca00eb34f5aabb39980735 author Scott Chacon lt schacon gmail com gt 1220473867 0700 committer Scott Chacon lt schacon gmail com gt 1220473867 0700 fixed a weird formatting problem git cat file commit HEAD tree c85fbd1996b8e7e5edal288b56042c0cdb91836b parent cdc9a0a28173b6ba4aca00eb34f5aabb39980735 author Scott Chacon lt schacon gmail com gt 1220473867 0700 committer Scott Chacon lt schacon gmail com gt 1220473867 0700 fixed a weird formatting problem Adicionando Cores Veja todas as op es de cores na documenta o de git config git config color branch auto git config color diff auto git config color interactive auto git config color status auto 97 O Livro da Comunidade Git 98 Ou voc pode configurar todos eles com a op o color ui S git config color ui true Commit Template git config commit template etc git commit template Log Format git config format pretty oneline Outras Opc es de Configurac o Existem tamb m varias op es interessantes para packing gc ing merging remotes branches http transport diffs paging whitespace e mais Se voc quer saber mais d uma olhada na documenta o do git config GIT HOOKS Hooks s o pequenos scripts que voc pode colocar no diret rio GIT DIR hooks para disparar um a o em certos pontos Quando git init executado uns ex
45. O Livro da Comunidade Git Um recurso Git aberto combinados juntos pela comunidade inteira AUTORES Agradega a esses caras Alecs King alecsk gmail com Amos Waterland apw rossby metr ou edu Andrew Ruder andy aeruder net Andy Parkins andyparkins gmail com Arjen Laarhoven arjen yaph org Brian Hetro whee smaertness net Carl Worth cworth cworth org Christian Meder chris absolutegiganten org Dan McGee dpmcgee gmail com David Kastrup dak gnu org Dmitry V Levin Idv altlinux org Francis Daly francis daoine org Gerrit Pape pape smarden org Greg Louis glouis dynamicro ca Gustaf Hendeby hendeby isy liu se Horst H von Brand vonbrand inf utfsm cl J Bruce Fields bfields fieldses org Jakub Narebski jnareb gmail com Jim Meyering jim meyering net Johan Herland johan herland net Johannes Schindelin Johannes Schindelin gmx de Jon Loeliger jd freescale org Josh Triplett josh freedesktop org Junio C Hamano gitster pobox com Linus Torvalds torvalds osdl org Lukas Sandstr m lukass etek chalmers se Marcus Fritzsch m fritschy de Michael Coleman tutufan gmail com Michael Smith msmith cbnco com Mike Coleman tutufan gmail com Miklos Vajna vmiklos frugalware org Nicolas Pitre nico cam org Oliver Steele steele osteele com Paolo Ciarrocchi paolo ciarrocchi gmail com Pavel Roskin proski gnu org Ralf Wildenhues Ralf Wildennues gmx de Robin Rosenberg robin rosenberg lists d
46. Se voc preferir instalar a partir do c digo fonte esses artigos podem ser teis Cap tulo 3 A Primeira vez Article Installing Git on Tiger Article Installing Git and git svn on Tiger from source Mac 10 5 em diante Com o Leopard voc pode tamb m instalar atrav s do MacPorts mas aqui voc tem opc es adicionais para uso do timo instalador que voc pode baixar daqui Git OSX Installer Se voc preferir instal lo a partir do c digo fonte esses guias podem ser particularmente teis para voc Article Installing Git on OSX Leopard Article Installing Git on OS 10 5 Esse instalador tamb m funciona sobre Snow Leopard Windows No Windows instalar o Git muito f cil Simplesmente baixe e instale o pacote msysGit Veja no capitulo Git no Windows por um screencast demonstrando a instala o e uso do Git no Windows 25 O Livro da Comunidade Git 26 CONFIGURA O E INICIALIZA O Git Config A primeira coisa que voc vai querer fazer configurar o seu nome e o endere o de email para o Git us lo para assinar seus commits git config global user name Scott Chacon git config global user email schacon gmail com Isso ir configurar um arquivo em seu diret rio home que pode ser usado por qualquer um dos seus projetos Por padr o esse arquivo gitconfig e o conte do ir se parecer com isso user name Scott Chacon email schacon gmail com Se voc quer sobrescrever esse
47. acima o que voc precisa saber para resolver um simples merge Mas o git tamb m prov mais informa es para ajudar a resolver os conflitos Desfazendo um merge Se voc ficar preso e decide desistir e jogar toda a bagun a fora voc pode sempre retornar ao estado do pre merge com git reset hard HEAD Ou se voc j estiver realizado o commit do merge que voc quer jogar fora git reset hard ORIG HEAD Contudo esse ltimo comando pode ser perigoso em alguns casos nunca jogue fora um commit se esse commit j pode ter sido realizado um merge em outro branch que pode confundir novos merges Merges Fast forward Existe um caso especial n o mencionado acima que tratado diferentemente Normalmente um merge resulta em um commit com dois pais um de cada uma das duas linhas de desenvolvimento que foram realizados o merge Contudo se o branch atual n o divergiu do outro ent o cada commit presente no branch atual j est contido no outro ent o o git s realiza um fast foward o HEAD do branch atual movido para o ponto do HEAD do branch que realiza o merge sem que qualquer novo commit seja criado 35 O Livro da Comunidade Git 36 gitcast c6 branch merge REVISANDO O HIST RICO GIT LOG O comando git log pode mostrar listas de commits Com ele s o mostrados todos commits ating veis a partir do commit pai mas voc pode tamb m fazer requisi es mais espec fica 9 Git Log v2
48. ados Eles provavelmente ser o removidos se voc executar a coleta de lixo see git gc 59 O Livro da Comunidade Git vossa Ent o agora podemos ver a diferen a em nosso hist rico entre um merge e um rebase executado 60 Cap tulo 5 Uso intermedi rio git rebase git merge G8 6 6 7 9 w O Livro da Comunidade Git 62 No processo de rebase ele pode descobrir alguns conflitos Nesse caso ele interromper e permitir a voc corrigir os conflitos depois que corrig los use git add para atualizar o index com esse conte do e ent o ao inv s de executar git commit s execute git rebase continue e o git continuar aplicando o resto dos patches Em qualquer ponto voc pode usar a op o abort para esse processo e retornar mywork para o estado que tinha antes de voc iniciar o rebase git rebase abort gitcast c7 rebase REBASING INTERATIVO Voc pode tamb m realizar um rebase interativamente Isso usado muitas vezes para re escrever seus pr prios objetos commit antes de envi los para algum lugar Isso uma forma f cil de dividir juntar ou re ordenar os commits antes de compartilh los com os outros Voc pode tamb m us lo para limpar commits que voc tenha baixado de algu m quando estiver aplicando eles localmente Se voc tem um numero de commits que voc gostaria de alguma maneira modificar durante o rebase voc pode invocar o modo interativo passando
49. am ajudam no desenvolvimento desta vers o Djalma Oliveira djalmaoliveira gmail com no Github http github com djalmaoliveira gitbook Enderson Maia endersonmaia gmail com no Github http github com enderson gitbook Refer ncias Muitos dos conte dos desse livro foram extra dos de diferentes fontes e ent o adicionados Se voc gostaria de ler sobre alguns dos artigos originais ou recursos por favor visite eles e agrade a os autores Git Manual do Usu rio The Git Tutorial The Git Tutorial pt 2 My Git Workflow blog post O Livro da Comunidade Git Cap tulo 2 O b sico sobre os objetos no git O MODELO DE OBJETOS DO GIT O SHA Todas as informa es necess rias para representar a hist ria do projeto s o armazenados em arquivos referenciados por um nome do objeto de 40 d gitos que se parece com isso 6 87c4664981e4397625791c8ea3bbb5 2279a3 Voc ver esses 40 d gitos em todo lugar no Git Em cada caso o nome calculado baseado no valor hash SHA1 do conte do do objeto O hash SHA1 uma fun o criptogr fica O que isso significa para n s que ele virtualmente imposs vel de encontrar dois objetos diferentes com o mesmo nome Isso tem in meras vantagens entre outras Cap tulo 2 O b sico sobre os objetos no git Git pode rapidamente determinar se dois objetos s o id nticos ou n o somente comparando os seus nomes Visto que os nomes dos objetos s o calculados da mesma f
50. anch master Changes to be committed use git reset HEAD file to unstage modified filel modified file2 modified file3 Se voc precisar fazer qualquer ajustes a mais ent o fa a o agora e ent o adicione qualquer novo conte do modificado no index Finalmente commit suas mudangas com git commit 29 O Livro da Comunidade Git 30 Isso ir novamente mostrar a voc uma mensagem descrevendo as mudangas e ent o gravar uma nova versao do projeto Alternativamente ao inv s de executar git aaa voc pode usar git commit a que ir automaticamente avisar sobre quaisquer arquivos modificados mas n o novos adicion los no index e realizar o commit tudo de uma vez Uma nota sobre as mensagens de commit Embora nao necess rio uma boa ideia iniciar a mensagem de commit em uma linha curta menos do que 50 caracteres resumindo as mudangas seguido por uma linha em branco e ent o mais uma descri o profunda Ferramentas que transformam commits em emails por exemplo usam a primeira linha para o Assunto e o resto da mensagem do commit para o corpo do email Git percebe conte do n o arquivos Muitos sistemas de controle de revis es disp em de um comando add que chama o sistema para iniciar a busca por mudangas em novos arquivos O comando add faz algumas coisas das mais simples as mais poderosas git aaa usado ambos para arquivos novos e arquivos alterados e em ambos os casos fornece
51. berto tamb m sobre ssh ou porta 9418 nesse caso o protocolo git e o comando git fetch pack no cliente inicia a comunica o com um processo filho no servidor do git upload pack Cap tulo 8 Internals and Plumbing Ent o o servidor pedir ao clente que SHAs ele tem para cada ref e o cliente entende que ele precisa e responde com a lista de SHAs que ele quer e j possue Ness ponto o servidor gerar um packfile com todos os objetos que o cliente precisa e iniciando a transfer ncia para o cliente Vamos dar uma olhada em um exemplo O cliente conecta e enviar um cabe alho de requisi o O comando clone git clone git myserver com project git produz a seguinte requisi o 0032git upload pack project git 000host myserver com 000 Os primeiros quatros bytes cont m o tamanho em hexadecimal da linha incluindo os 4 bytes e removendo caracter de nova linha se existir Seguindo est o o comando e os argumentos Isso seguido por um byte null e ent o a informa o do host A requisi o terminada por um byte null A requisi o processada e transformado em uma chamada para git upload pack git upload pack path to repos project git Isso imediatamente retorna a informa o do reposit rio 007c74730d410fcb6603ace96fldc55ea6196122532d HEADN000multi ack thin pack side band side band 64k ofs delta shall 003e7d1665144a3a975c05 1 43902ddaf084e784dbe refs heads debug 003d5a3f6be755bbb7deae50065988cbfalffa9ab68a r
52. chama um commit Uma vez que o git n o armazena mudan as mas estados realmente nao faz sentido usar o termo changesets com o git checkout A a o de atualizar todo ou parte da rvore de trabalho com um objeto tree ou blob do banco de dados de objetos e atualizar o index e o HEAD se a rvore de trabalho inteira tem sido apontada para um novo branch cherry picking No jarg o do SCM cherry pick significa escolher um subconjunto de modifica es fora da s rie de modifica es tipicamente commits e grav las como um nova s rie de mudan as no in cio de um base de c digo diferente No GlT ele realizado pelo comando git cnerry pick para extrair as modifica es introduzidas por commit existente e grav las baseadas no in cio do branch atual como um novo commit clean Um diret rio de trabalho est limpo se ele corresponde a revis o referenciada pelo head atual Veja tamb m dirty commit Como um substantivo Um simples ponto no hist rico do git o hist rico completo do projeto representado como um conjunto de commits inter relacionados A palavra commit frequentemente 152 Cap tulo 9 Gloss rio usada pelo git nos mesmos locais onde outros sistemas de controle de revis o usam as palavras revis o or vers o Tamb m usado como atalho para um objeto tipo commit Como um verbo A ac o de armazenar um novo ponto do estado do projeto no hist rico do git atrav s da cria o de um novo comm
53. comando git hash object tudo que voc precisar Para criar um objeto blob de um arquivo existente s executar ele com a op o w que dir a ele para escrever o blob n o somente calcular o SHA git hash object w myfile txt 6 87c4664981e4397625791c8ea3bbb5 2279a3 git hash object w myfile2 txt 3bb0e8592a41ae3185ee32266c860714980dbed7 A sa da STDOUT do comando mostrar o SHA do blob que foi criado Criando Trees Agora digamos que voc quer criar um tree de seus novos objetos O comando git mktree faz isso de maneira muito simples para gerar novos objetos tree apartir da sa da formatada de git Is tree Por exemplo se voc escrever o seguinte para o arquivo chamado tmp tree txt 100644 blob 6ff87c4664981e4397625791c8ea3bbb5 2279a3 filel 100644 blob 3bb0e8592a41ae3185ee32266c860714980dbed7 file2 e ent o interligar eles atrav s do commando git mktree o Git escrever uma nova tree no banco de dados de objeto e devolver o novo sha daquela tree cat tmp tree txt git mk tree f66a66ab6a7bfe86d52a66516ace212efa00felf Cap tulo 8 Internals and Plumbing Ent o podemos peg lo e faz lo um sub diret rio de uma outra tree e assim em diante Se quisermos criar uma nova tree com um deles sendo uma subtree somente criamos um novo arquivo tmp newtree txt com o nosso novo SHA com a tree dentro dele 100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3 filel copy 040000 tree f66a66ab6a7bfe86d52a665
54. contendo todos os objetos que sao alcan veis pelo refs possivelmente acompanhado por meta dados de um ou mais porcelains Um reposit rio pode compartilhar um banco de dados de objetos com outros reposit rios via mecanismos alternativos resolve A a o de corrigir manualmente uma falha que um merge autom tico causou revision Um estado particular dos arquivos e diret rios no qual est o armazenados no banco de dados de objetos Ele referenciado por um objeto commit rewind Descartar parte do desenvolvimento Ex atribuir o head para uma revis o anterior SCM Gerenciador de c digo fonte ferramenta SHA1 Sin nimo para um nome de objeto shallow repository Cap tulo 9 Gloss rio A shallow repository has an incomplete history some of whose commits have parents cauterized away in other words git is told to pretend that these commits do not have the parents even though they are recorded in the commit object This is sometimes useful when you are interested only in the recent history of a project even though the real history recorded in the upstream is much larger A shallow repository is created by giving the depth option to git clone and its history can be later deepened with git fetch symref Refer ncia Simb lica ao inv s de conter uma identificac o SHA1 por ele mesmo ele est no formato ref refs alguma coisa e quando referenciado ele recursivamente desreferencia para essa refer ncia HEAD um
55. d e mova se at ele com git reset hard fb47ddb2db ent o teste execute bisect good ou bisect bad de acordo e continue 93 O Livro da Comunidade Git ENCONTRANDO ERROS GIT BLAME O comando git blame realmente util para entender quem modificou que sec o de um arquivo Se voc executar git blame nomedoarquivo voc conseguir visualizar o arquivo inteiro com o ultimo SHA do commit data e autor para cada linha dentro do arquivo git blame shal file c Ofcfd160 Linus Torvalds 2005 04 18 13 04 43 0700 gy Ofcfd160 Linus Torvalds 2005 04 18 13 04 43 0700 9 finclude cache h lf688557 Junio C Hamano 2005 06 27 03 35 33 0700 0 finclude delta h a733cb60 Linus Torvalds 2005 06 28 14 21 02 0700 1 finclude pack h 8e440259 Peter Eriksen 2006 04 02 14 44 09 0200 2 include blob h 8e440259 Peter Eriksen 2006 04 02 14 44 09 0200 3 include commit h 8e440259 Peter Eriksen 2006 04 02 14 44 09 0200 4 include tag h 8e440259 Peter Eriksen 2006 04 02 14 44 09 0200 5 include tree h f35a6d3b Linus Torvalds 2007 04 09 21 20 29 0700 6 include refs h 70 5d5d3 Nicolas Pitre 2008 02 28 00 25 19 0500 7 include pack revindex h 628522ec Junio C Hamano 2007 12 29 02 05 47 0800 8 finclude shal lookup h Isso frequentemente util se um arquivo possui uma linha revertida ou um erro que o danificou para ajudar voc a ver quem alterou que linha por ltimo Voc pod
56. de abrir m ltiplos threads paralelos para aumentar a velocidade desse processo Quando ele termina recursando a tree apontado pelo commit ele recupera o pr ximo pai 145 O Livro da Comunidade Git 146 GET git myproject git objects bd 71cad2d597d40f 1827d4a3f670596a646 02889 200 Agora nesse caso o commit que chega se parece com isso tree b4cc00cf8546edd4fcf29defc3aecl4de53e6cf8 parent ab0448884140f7b0cf8bbf86d6883869f16a46f65 author Scott Chacon lt schacon gmail com gt 1220421161 0700 committer Scott Chacon lt schacon gmail com gt 1220421161 0700 added chapters on the packfile and how git stores objects e podemos ver que o pai ab04a88 onde nosso branch master est atualmente apontando Ent o recursivamente recuperamos essa tree e ent o para desde que sabemos que temos tudo antes desse ponto Voc pode for ar o Git para realizar uma dupla checagem do que temos com a op o recover Veja git http fetch para mais informa es Se a recupera o de um dos objetos loose falha o Git baixa o ndice do packfile procurando pelo sha que ele precisa ent o baixa esse packfile Isso importante se voc est executando um servidor git que serve reposit rios desta forma para implementar um hook post receive que executar o comando git update server info cada vez ou haver confus o Recuperando Dados com Upload Pack Para protocolos espertos recuperar objetos muito mais eficiente Um socket a
57. de gerenciar o branch Dessa forma tamb m poss vel para um push falhar quando outras pessoas tem o direito de enviar para o mesmo reposit rio Nesse caso a solu o correta para tentar re enviar depois da primeira atualiza o de seu 51 O Livro da Comunidade Git 52 trabalho qualquer um pull ou um fetch seguido por um rebase veja a pr xima se o e gitcvs migration para mais informa es gitcast c8 dist workflow TAGS NO GIT Tags Peso Leve N s podemos criar uma tag para referenciar um commit particular executando git tag sem nenhum argumento git tag stable 1 1b2eld63ff Depois disso n s podemos usar a tag stable 1 para referenciar o commit 1b2e1d63ff Isso cria uma tag peso leve basicamente atua como um branch mas que nunca se altera Se voc tamb m gostaria de incluir um coment rio na tag e possivelmente assinar criptograficamente ent o em vez disso n s podemos criar um fag object Tag Objects Se um dos a s ou u passado o comando cria um objeto tag e solicita uma mensagem da tag A n o ser que m ou F seja dado um editor iniciado para o usu rio digitar a mensagem para a tag Cap tulo 4 Uso B sico Quando isso acontece um objeto adicionado para o banco de dados de objeto Git e a refer ncia da tag aponta para esse objeto tag em vez realizar um commit dele A forga disso que voc pode assinar a tag entao voc pode verificar que este o ultimo commit correto V
58. de modifica es no qual voc quer levar juntos para o pr ximo commit Quando voc cria um commit o que levado para o commit o que est no index atualmente nao o que est no seu diret rio de trabalho Cap tulo 2 O b sico sobre os objetos no git Visualizando o Index A forma mais f cil para ver o que est no index com o comando git status Quando voc roda o git status voc pode ver quais arquivos est o selecionados para o pr ximo commit atualmente no seu index quais est o modificados mas nao ainda nao foram selecionados e quais est o completamente sem nenhuma selec o S gt git status On branch master Your branch is behind origin master by 11 commits and can be fast forwarded Changes to be committed use git reset HEAD file to unstage modified daemon c Changed but not updated use git add lt file gt to update what will be committed modified grep c modified grep h Untracked files use git add lt file gt to include in what will be committed blametree blametree init git gui git citool Se voc descartar o index completamente voc em geral nao perde qualquer informagao contanto que voc tenha o nome da tree que ele descreveu 21 O Livro da Comunidade Git E com isso voc deveria ter um bom entendimento das coisas b sicas que o Git faz por traz da cena e porque ele um pouco diferente da maioria dos outros sistemas SCM N o se preocupe se voc
59. de seja dita ele tamb m pode conter uma segunda e at mesmo uma terceira vers o da rvore de trabalho que s o usadas quando realizam algum merge index entry Uma informa o relativa a um arquivo particular armazenado no index Uma entrada no index pode estar umerged se um merge foi iniciado mas ainda n o finalizado ex se o index cont m m ltiplas vers es daquele arquivo master O branch padr o de desenvolvimento Sempre que voc cria um reposit rio git um branch nomeado de master criado e se torna o branch ativo Na maioria dos casos ele cont m os arquivos de desenvolvimento local embora ele seja uma conven o e n o seja necess rio merge Como verbo Contruir o conte do de outro branch possivelmente de um reposit rio externo no branch atual No caso onde o merge de entrada for de um reposit rio diferente ele pode ser feito primeiramente recuperando o branch remoto e ent o realizando um merge com o resultado no branch atual Essa combina o de opera es de fetch e merge chamado de pull Um merge realizado atrav s de um processo autom tico que identifica mudan as feitas desde as diverg ncias dos branches e ent o aplica todas essas altera es juntas Nos caso onde as altera es conflitam uma interven o manual pode ser requisitada para completar o merge 157 O Livro da Comunidade Git 158 Como um substantivo a nao ser que seja um fast forward o resultado de um merg
60. decis o de mudar de seu sistema atual e converter todo o seu projeto para o Git Como voc pode fazer isso facilmente Importando do Subversion Git vem com um script chamado git svn que tem um comando clone que importar um reposit rio subversion dentro de um novo reposit rio git Existe tamb m uma ferramenta gr tis no GitHub que pode fazer isso para voc S git svn clone http my project googlecode com svn trunk new project Isso dar a voc um novo reposit rio Git com todo o hist rico do reposit rio Subversion original Isso levar um bom tempo geralmente desde que ele in cie com a vers o 1 e checkouts e commits localmente a cada simples revis o um por um Importando do Perforce Em contrib fast import voc encontrar o script git p4 que um script em Python que importar um reposit rio Perforce para voc Cap tulo 7 Trabalhando com Git git git contrib fast import git p4 clone depot project main all myproject Importando Outros Existem outros SCMs que s o listados no Git Survey deveria encontrar a documenta o de importa o deles HA FAZER CVS Mercurial hg Bazaar NG Darcs ClearCase GIT GR FICO Git tem algumas bastante populares GUIs Graphial User Interfaces que podem ler e ou manipular reposit rios Git Bundled GUIs Git vez com dois dos principais programas GUI escrito em Tcl Tk Gitk uma ferramente de navega o de reposit rio e visualizac o do hist ric
61. do n o mostrado acima e n o est armazenado no objeto tree criado mas ele pode ser usado para determinar rapidamente quais arquivos no diret rio de trabalho diferem de qual foi armazenado no index e dessa maneira economizar o git de ter que ler todos os dados de cada arquivo em busca de altera es 131 O Livro da Comunidade Git 132 3 Ele pode eficientemente representar informa es sobre os conflitos de merge entre diferentes objetos tree permitindo cada caminho ser associado com informa o suficiente sobre as trees envolvidas que voc pode criar um merge de tr s passos entre eles Durante um merge o index pode armazenar m ltiplas vers es de um simples arquivo chamados de est gios A terceira coluna na sa da do git Is files acima o n mero do est gio e aceitar valores exceto 0 para arquivo com conflidos de merge O index dessa maneira uma rea ordenada de est gios tempor rios que preenchido com uma tree no qual VOC est no processo de trabalho O PACKFILE Esse cap tulo explica em detalhes a n vel de bits como os arquivos packfile e o pack index s o formatados O Index do Packfile Primeiro n s temos o index do packfile que basicamente s uma s rie de bookmarks dentro do packfile Existem duas vers es de index do packfile vers o um que a padr o nas vers es anteriores do Git 1 6 e a vers o dois que o padr o a partir da 1 6 mas que pode ser lida pelas vers es
62. dos s uma stream zlib para tipos de objetos n o delta para as duas representa es de objetos delta a por o de dados cont m algo que identifica que objeto base essa representa o do delta depende e o delta para aplicar sobre o objeto base para ressucitar esse objeto ref delta usa um hash de 20 bytes do objeto base no inicio dos dados enquanto ofs delta armazena um offset dentro do mesmo packfile para identificar o objeto base Em qualquer caso duas importantes restric es devem ser aderidas delta to apply on the base object to resurrect this object ref deita uses 20 byte hash of the base object at the beginning of data while ofs delta stores an offset within the same packfile to identify the base object In either case two important constraints a reimplementor must adhere to are representac o delta deve ser baseado em algum outro objeto dentro do mesmo packfile o objeto base deve ser o mesmo tipo subjacebte blob tree commit ou tag RAW GIT Aqui daremos uma olhada em como manipular o git em baixo n vel se voc por acaso gostaria de escrever uma ferramenta que gere novos blobs trees ou commits de uma forma mais artificial Se voc quer escrever um script que usa a estrutura de mais baixo n vel do git para fazer algo novo aqui est o algumas das ferramentas que voc precisar 139 O Livro da Comunidade Git 140 Criando Blobs Criar um blob no seu reposit rio Git e conseguir o SHA muito f cil O
63. dos os arquivos modificados que voc tem e seus status git add i staged unchanged unchanged unchanged unchanged unchanged O10 NN Hd Commands 1 status dt 5 patch 6 What now unstaged path 4 0 assets stylesheets style css 23 11 layout book index template html 7 7 layout chapter template html 3 3 script pdf rb 121 0 text 14 Interactive Rebasing 0 Interactive Rebasing markdown update diff 33 as revert 4 add untracked quit 8 help Cap tulo 5 Uso intermedi rio Nesse caso podemos ver que existem 5 arquivos modificados que nao foram adicionados em nosso index ainda sem selec o e at mesmo a quantidade de linhas que foram adicionadas e removidas de cada um Entao ele mostra nos um menu interativo mostrando o que podemos fazer Se quisermos selecionar esses arquivos podemos digitar 2 ou u para o modo de atualiza o Ent o eu posso especificar quais arquivos eu quero selecionar adicionar no index atrav s da digitac o dos n meros que correspondem aos arquivos nesse caso 1 4 What now 2 staged ils unchanged 23 unchanged 35 unchanged 4 unchanged 53 unchanged Update gt gt 1 4 staged Ti unchanged 23 unchanged Riso unchanged 4 unchanged 54 unchanged Update gt gt Se teclar enter serei modificado What now gt status staged ps 4 0 2 23 11 33 7 7 unstaged 4 0 23 11 7 7 3 3 121 0 unstaged 4 0 x23 211 7 7 3
64. e excluindo 7b593b5 mas incluindo 51bea1 git log 75593b55 51be8al Isso incluir cada commit desde 7b593b git log 765930 TRACKING BRANCHES Um tracking branch no Git um branch local que conectado a um branch remoto Quando voc realiza um push e pull nesse branch ele automaticamente envia e recupera do branch remoto com quem est conectado Use ele se voc sempre realiza um pull de um mesmo branch dentro de um novo e se voc nao quer usar git pull explicitamente O comando git clone automaticamente configura um branch master que um branch associado com origin master o branch master sobre um reposit rio clonado Voc pode criar um tracking branch manualmente pela adi o da op o track sobre o comando branch no Git git branch track experimental origin experimental Cap tulo 5 Uso intermedi rio Ent o quando voc executar git pull experimental Ele ir automaticamente recuperar do origin e realizar um merge de origin experimental dentro de seu branch local experimental Dessa forma quando voc realizar um push para o origin ele enviar para o qual seu experimental aponta sem ter que especific lo BUSCANDO COM GIT GREP Encontrar arquivos com palavras ou frases no Git muito f cil com o comando git grep Isso poss vel ser feito com o comando grep no unix mas com git grep voc tamb m pode procurar atrav s de vers es anteriores do projeto
65. e completo na criac o de um novo commit representando o resultado do merge e tendo como pais os topos dos branches que realizaram merge Esse commit referenciado como um merge commit ou as vezes S como merge object A unidade de armazenamento no git Ele unicamente identificado pelo SHA1 de seu conte do Consequentemente um objeto nao pode ser modificado banco de dados de objetos Armazena um conjunto de objetos e um objeto individual identificado por seu nome de objeto Os objetos normalmente ficam em scit_DIR objects identificador do objeto Sin nimo para nome de objeto nome do objeto O nico identificador de um objeto O hash do conte do de um objeto usa o Secure Hash Algorithm 1 e normalmente representado por uma codifica o de 40 caracteres hexadecimais do hash de um objeto tipo de objeto Um dos identificadores commit tree tag ou blob descrevendo o tipo de um objeto Cap tulo 9 Gloss rio octopus Para realizar um merge com mais de dois branches Tamb m denota um predador inteligente origin O padr o para reposit rios remotos A maioria dos projetos tem pelo menos um projeto no qual eles acompanham Por padr o origin usado para esse prop sito Novas atualiza es neles ser o recuperados para os branches nomeados como origin nome do branch remoto que pode ser visto usando git branch r pack Um conjunto de objetos no qual foram comprimidos em um arquivo para econ
66. e tamb m especificar o inicio e o fim da linha para o blame gt git blame L 160 410 shal file c acel534d Junio C Hamano 2005 05 07 00 38 04 0700 160 acel534d Junio C Hamano 2005 05 07 00 38 04 0700 161 Ofcfd160 Linus Torvalds 2005 04 18 13 04 43 0700 162 Ofcfd160 Linus Torvalds 2005 04 18 13 04 43 0700 163 NOTE This returns a statically allocate 790296fd Jim Meyering 2008 01 03 15 18 07 0100 164 careful about using it Do an xstrdup 94 Ofcfd160 acel534d acel534d acel534d d19938ab Linus Junio Junio Junio Junio GIT E EMAIL Torvalds C Hamano C Hamano C Hamano C Hamano Enviando patches para um 2005 04 18 13 38 1393 1387 53 2005 05 07 00 2005 05 07 00 2005 05 07 00 2005 05 09 17 projeto 04 43 04 04 04 56 0700 0700 0700 0700 0700 165 166 167 168 169 Cap tulo 6 Git Avan ado filename Also note that this returns the location SHA1 file can happen from any alternate DB ENVIRONMENT environment variable if i Se voc j possui algumas altera es a forma mais simples de faz lo envi los como patches por email Primeiro use git format patch por exemplo git format patch origin produzir uma s rie numerada de arquivos no diret rio atual um para cada patch do branch atual mas nao do origin HEAD Voc pode ent o importar eles para seu cliente de email e envi los Contudo se voc tem que enviar todos de uma v
67. e7 7 ects a0 ects a0 423896973644771497bdc03eb99d5281615b51 ects d0 jects d0 492b368b66bdabf2aclfd8c92b39d3db916e59 ects c4 jects c4 d59 390b9cfd4318117afde11d601c1085 241 e o conte do desses arquivos s a compress o dos dados mais o header identificando seu tamanho e seu tipo O tipo qualquer entre blob tree commit ou tag O commit mais simples que encontra o commit HEAD que podemos encontrar no git HEAD amp cat git HEAD ref refs heads master Como voc pode ver isso nos diz qual branch estamos atualmente e nos diz o caminho completo do arquivo sobre o diret rio git que nele mesmo cont m o nome SHA1 referindo a um objeto commit que podemos examinar com cat file 127 O Livro da Comunidade Git 128 cat git refs heads master c4d59 390b9cfd4318117afdel11d601c1085 241 git cat file t c4d59f39 commit git cat file commit c4d59f39 tree d0492b368b66bdabf2aclfd8c92b39d3db916e59 parent 54196cc2703dc165cbd373a65a4dcf22d50ae7 f7 author J Bruce Fields lt bfields puzzle fieldses org gt 1143418702 0500 committer J Bruce Fields lt bfields puzzle fieldses org gt 1143418702 0500 add emphasis O objeto tree aqui se refere ao novo estado da tree git ls tree d0492b36 100644 blob a0423896973644771497bdc03eb99d5281615b51 flle txt git cat file blob a0423896 hello world e o objeto pai se refere a um commit anterior git cat file commit 54196cc2 tree 9258b694ffb1675e
68. efs heads dist 003e7e47fe2bd8d01d481f44d7af0531bd93d3b21c01 refs heads local 147 O Livro da Comunidade Git 148 003 74730d410 cb6603ace96f 1dc55ea6196122532d refs heads master 0000 Cada linha inicia com uma declara o em hexadecimal de quatro bytes A se o terminada por uma declara o de 0000 Isso enviado de volta para o cliente textualmente O cliente responde com outra requisi o 0054want 74730d410fcb6603ace96f1dc55ea6196122532d multi ack side band 64k ofs delta 0032want 7d1665144a3a975c05f 1 43902ddaf084e784dbe 0032want 5a3f6be755bbb7deae50065988cbfalffa9ab68a 0032want 7e47fe2bd8d01d481f44d7af0531bd93d3b21c01 0032want 74730d410fcb6603ace96f1dc55ea6196122532d 00000009done E enviado para abrir o processo git upload pack que ent o envia a reposta final 0008NAK An 0023 002Counting objects 2797 done n 002b 002Compressing objects 0 1 1177 002c 002Compressing objects 1 12 1177 002c 002Compressing objects 2 24 1177 002c 002Compressing objects 3 36 1177 002c 002Compressing objects 4 48 1177 002c 002Compressing objects 5 59 1177 002c 002Compressing objects 6 71 1177 0053 002Compressing objects 7 83 1177 005b 002Compressing objects 100 1177 1177 Nen ioa iem e Nae AM Men rCompressing objects 8 95 1177 Ng rCompressing objects 100 1177 1177 done n 2004 001PACK 000 000 000 002 000 000 n 355 225 017x 234 235 216K n 302 2
69. em levar em conta o que dado na linha de comando Por fim Bob pode atualizar seu reposit rio com as ltimas alterac es de Alice usando git pull Veja que nao foi preciso dar o caminho para o reposit rio de Alice quando Bob clonou o reposit rio de Alice o git armazenou a localiza o do reposit rio dela nas configura es de seu reposit rio e essa localiza o usada pelo pull git config get remote origin url home alice project A configura o completa criada por git clone vis vel usando git config I e a p gina do manual git config explica o significado de cada op o Git tamb m deixa uma c pia original do branch master de Alice sobre o nome de origin master 47 O Livro da Comunidade Git 48 git branch r origin master Se Bob decide trabalhar a partir de um host diferente ele ainda pode realizar clones e pulls usando o protocolo ssh git clone alice org home alice project myrepo Alternativamente git possui um protocolo nativo ou pode usar rsync or http veja git pull para mais detalhes Git tamb m pode ser usado no modo CVS com um reposit rio central para onde v rios usu rios enviam altera es veja git push e gitcvs migration Reposit rios Git P blicos Uma outra forma de enviar altera es para um projeto informar ao respons vel por aquele projeto para realizar um pull das altera es de seu reposit rio usando git pull Essa uma forma de conseguir atuali
70. emplos uteis de hooks sao copiados no diret rio hooks do novo reposit rio mas por padr o eles sao todos desativados Para ativar um hook renomeie ele removendo o seu sufixo sample Cap tulo 6 Git Avan ado applypatch msg GIT DIR hooks applypatch msg Esse hook invocado pelo script git am Ele leva um simples par metro o nome do arquivo que det m a mensagem de commit proposta Saindo com um status diferente de zero faz com que git am aborte antes de aplicar o patch Nesse hook permitido editar o arquivo de mensagem substituindo o e pode ser usado para normalizar a mensagem dentro em algum formato padr o de mensagens se o projeto tem um Ele pode tamb m ser usado para recusar o commit depois de inspecionar o arquivo de mensagens O hook applypatch msg padr o quando ativado executa o hook commit msg se este tamb m estiver ativado pre applypatch GIT DIR hooks pre applypatch Esse hook invocado pelo git am Ele nao leva nenhum par metro e invocado depois que o patch aplicado mas antes que um commit seja feito Se ele sai com um status diferente de zero ent o nao ser realizado o commit depois de aplicar esse patch Ele pode ser usado para inspecionar a rvore de trabalho atual e recusar realizar um commit se ele n o passar em certos testes O hook pre applypatch padr o quando ativado executa o hook pre commit se este tamb m estiver ativado post apply patch GIT DIR hooks post applypatch
71. eselecionar arquivos 3 revert adicionar arquivos nao selecionados 4 add untracked e ver as diferengas 6 diff Isso tudo de forma muito simples Contudo existe um comando muito legal aqui que selecionar patches 5 patch Se voc digitar 5 ou p no menu git mostrar a voc a diferen a por pacth e perguntar se voc quer selecionar cada um Na verdade essa uma forma que voc pode selecionar para um commit partes de um arquivo editado Se voc editou um arquivo e quer somente realizar um commit de uma parte dele e nao a parte 68 Cap tulo 5 Uso intermedi rio inacabada ou commit da documenta o ou espa os em branco voc pode usar git add i para faz lo facilmente Aqui eu tenho selecionado alterac es para o arquivo book index template html mas nao para todos eles staged unstaged path is 4 0 nothing assets stylesheets style css 23 20 7 3 4 layout book_index_template html 3z 7 7 nothing layout chapter template html 4 3 3 nothing script pdf rb 53 unchanged 121 0 text 14 Interactive Rebasing 0 Interactive Rebasing markdown 6 unchanged 85 0 text 15 Interactive Adding 0 Interactive Adding markdown Quando voc terminar de fazer as altera es para o index atrav s do git add i voc simplesmente sai 7 quit e ent o executa git commit para realizar o commit das altera es selecionadas Lembre se nao execute git commit a que descartar todas as altera es que voc cuidadosa
72. esses casos voc deveria ent o ter um novo diret rio chamado git que cont m todos os c digos fontes do Git e o hist rico que basicamente uma c pia do que estava no servidor Por padr o o Git nomear o novo diret rio do projeto de sua clonagem de acordo com o nome do arquivo no ltimo de nivel na URL antes de git ex git clone http git kernel org linux kernel git torvalds linux 2 6 git resultar em um novo diret rio chamado linux 2 6 Inicializando um Novo Reposit rio Suponha que voc tem um tarball chamado project tar gz com seu trabalho inicial Voc pode colocar ele sobre um controle de revis es do git como segue tar xzf project tar gz cd project grt init Git ir responder Initialized empty Git repository in git Agora voc tem um diret rio de trabalho inicializado voc pode notar um novo diret rio criado chamado git Cap tulo 4 Uso B sico gitcast c1 init FLUXO NORMAL DE TRABALHO Altere alguns arquivos ent o adicione seus conte dos alterados para o index git add filel file2 file3 Voc agora est pronto para realizar o commit Voc pode ver o que ser levado para commit usando git diff com a op o cached git diff cached Sem a op o cached git diff mostrar a voc qualquer modifica o que voc tem feito mas ainda n o foi adicionado no index Voc pode tamb m conseguir uma breve sum rio da situagao com git status git status On br
73. ewire com Santi B jar sbejar gmail com Scott Chacon schacon gmail com Sergei Organov osv javad com Shawn Bohrer shawn bohrer gmail com Shawn O Pearce spearce spearce org Steffen Prohaska prohaska zib de Tom Prince tom prince ualberta net William Pursell bill pursell gmail com Yasushi SHOJI yashi atmark techno com MANTENEDOR EDITOR Bug para esse cara Scott Chacon schacon gmail com Cap tulo 1 Introdu o Cap tulo 1 Introdugao BEM VINDO AO GIT Bem vindo ao Git o mais r pido sistema de controle de vers o distribu da Esse livro um ponto de partida para as pessoas novas no Git que querem aprend lo t o rapidamente e facilmente quanto poss vel Esse livro iniciar introduzindo voc sobre a forma como o Git armazena os dados dando a voc o contexto do porque ele diferente do que as outras ferramentas de SCV Essa parte ser abordada em 20 minutos Depois cobriremos O Uso b sico do Git os comandos que usar em 9096 do do seu tempo Isso Ihe dar uma boa base para usar o Git confortavelmente para a maioria das coisas onde poder us lo Essa sec o levar 30 minutos para leitura O Livro da Comunidade Git Depois iremos para Uso Intermedi rio do Git coisas que s o ligeiramente mais complexas mas podem substituir alguns dos comandos b sicos que voc aprendeu na primeira se o Este mostrar principalmente truques e comandos onde se sentir mais confort vel depo
74. ez voc pode preferir usar o script git send email para automatizar o processo Consulte primeiro a lista de email do seu projeto para determinar como eles preferem que os patches sejam manipulados 95 O Livro da Comunidade Git 96 Importando patches para o projeto Git tamb m prov uma ferramenta chamada git am uma abrevia o de apply mailbox para importar uma s rie de patches recebidos Grave todas as mensagens que cont m patches em orderm para um arquivo mailbox simples digamos patches mbox ent o execute git am 3 patches mbox Git aplicar cada patch em ordem se algum conflito for encontrado ele ir parar e voc pode manualmente corrigir os conflitos A op o 3 informa ao git para realizar um merge se voc prefere s abortar e deixar sua rvore e index int cta voc pode omitir essa op o Uma vez que o index atualizado com o resultado da resoluc o do conflito ao inv s de criar um novo commit execute git am resolved e o git criar o commit para voc e continua aplicando o restante dos patches do mailbox O resultado final ser uma s rie de commits um para cada patch no mailbox original cada um com o autor e a mensagem de commit trazido da mensagem contida em cada patch CUSTOMIZANDO O GIT git config Cap tulo 6 Git Avan ado Alterando o seu editor git config global core editor emacs Adicionando Aliases git config global alias last cat file commit H
75. is que conhece os comandos b sicos Depois que voc estiver dominado n s abordaremos Git Avan ado comandos que a maioria das pessoas n o usam frequentemente mas podem ser muito teis em certas situa es Aprendendo esses comandos dever cobrir o seu conhecimento sobre o git no dia a dia voc se tornar um mestre do Git Agora que voc conhece o Git n s iremos abordar Trabalhando com Git Aqui n s iremos falar como usar o Git em scripts com ferramentas de implanta o com editores e muito mais Estas se es s o principalmente para ajudar voc a integrar o Git ao seu ambiente Finalmente n s teremos uma s rie de artigos sobre documenta o de baixo n vel que pode ajudar hackers de Git que querem aprender como funcionam os protocolos e fun es internas no Git Coment rios e Contribui es At aqui se voc achou algum erro ou quer contribuir com o livro voc pode enviar um email para schacon gmail com ou pode clonar o c digo fonte deste livro em http github com schacon gitbook e me enviar um patch ou um pull request Coment rios e Contribuig es sobre a vers o Brasileira Caso queira contribuir com a vers o brasileira voc pode come ar fazendo um fork do reposit rio no Github em http github com schacon gitbook branch pt BR e enviar um pull request quando fizer alguma altera o Cap tulo 1 Introdu o Cr ditos e Colaboradores na vers o Brasileira Aqui a lista de colaboradores que ajudar
76. it representando o estado atual do index e avan ando o HEAD para o ponto do novo commit objeto commit Um objeto que cont m a informa o sobre uma revis o particular como os pais quem criou o commit committer autor data e o objeto tree que corresponde ao topo do diret rio da revis o armazenada core git Estruturas de dados fundamentais e utilit rios do git Expoem somente limitadas ferramentas de gerenciamento de c digo fonte DAG Gr fico ac clico direcionado Os objetos commits formam um gr fico ac clico direcionado por que eles tem pais direcionados e o gr fico dos objetos commit ac clico existe nenhuma corrente que inicia e termina com o mesmo objeto dangling object Um objeto inalcan vel que n o alcan vel mesmo de outro objeto inalcan vel um objeto dangling n o tem refer ncias para ele de qualquer outra refer ncia ou objeto no reposit rio 153 O Livro da Comunidade Git 154 detached HEAD Normalmente o HEAD armazena o nome de um branch Contudo git tamb m permite voc realizar um checkout de um commit arbitr rio que n o necessariamente o topo de um branch particular Nesse caso o HEAD dito como ser isolado dircache Voc est muito atr s Veja index directory A lista voc consegue com um 1s dirty Um diret rio de trabalho dito estar sujo se ele cont m modificac es que nao tem sido commitados no branch atual ent Sin nimo favor
77. ito para tree ish para alguns geeks Veja nttp en wikipedia org wiki Ent Middle earth para uma explica o mais profunda Evite este termo para n o confundir as pessoas evil merge Um merge infernal um merge que introduz modifica es que n o aparecem em qualquer pai fast forward Cap tulo 9 Gloss rio Um fast forward um tipo especial de merge onde voc tem uma revis o e realiza um merge com as modificac es de outro branch que descendente daquele que voc j tem Muitas vezes nesse caso voc n o faz um novo merge mas ao inv s disso s atualiza a sua revis o Isso acontece frequentemente sobre um branch em um reposit rio remoto fetch Realizar um fetch significa conseguir o head do branch do reposit rio remoto procurar quais objetos est o faltando no banco de dados do reposit rio local e recupera los Veja tamb m git fetch file system Linus Torvalds originalmente projetou o git para ser um sistema de arquivos no espa o do usu rio exemplo da estrutura que mant m arquivos e diret rios Que garante a efici ncia e velocidade do git git archive Sin nimo para reposit rio para pessoas arcaicas grafts Grafts habilitam duas outras linhas de desenvolvimento diferentes para serem unidas juntas atrav s da grava o de informa es ancestrais falsas para os commits Dessa forma voc pode fazer git fingir o conjunto de pais que o commit possui sendo diferente daquele que foi gravado qua
78. itos Veja que o argumento master no comando acima na verdade desnecess rio j que ele o padr o O comando pull realiza assim duas opera es ele recebe as altera es mais recentes do branch remoto ent o realiza um merge dele no branch atual Quando voc est trabalhando em um pequeno grupo muito unido nao incomum interagir com o mesmo reposit rio e outro novamente Definindo um reposit rio como remote voc pode fazer isso facilmente git remote add bob home bob myrepo Com isso Alice pode realizar a primeira opera o sozinha usando o comando git fetch sem realizar um merge dele com o seu pr prio branch usando git fetch bob Ao contr rio da forma longa quando Alice recebe as novas altera es de Bob usando um reposit rio remoto configurado com git remote que foi recuperado e armazenado em um branch remoto nesse caso bob master Ent o depois disso git log p master bob master mostra uma lista de todas as altera es que Bob fez desde quando ele criou o branch master de Alice Cap tulo 4 Uso B sico Depois de examinar essas altera es Alice poder realizar um merge com as altera es dentro de seu branch master git merge bob master Esse merge tamb m pode ser feito realizando um pull a partir de seu pr prio branch remoto registrado dessa forma git pull remotes bob master Perceba que o git pull sempre realiza o merge dentro de seu branch atual s
79. itos manualmente voc pode atualizar o index com o conteudo e executar o git commit como voc faria normalmente quando modifica um arquivo Se voc examinar o resultado do commit usando o gitk voc ver que ele possui dois pais um apontando para o topo do branch atual e um para topo do outro branch 33 O Livro da Comunidade Git 34 Resolvendo um merge Quando um merge n o resolvido automaticamente o git deixa o index e a rvore de trabalho em um estado especial que fornece a voc todas as informa es que voc precisa para ajudar a resolver o merge Arquivos com conflitos s o marcados especialmente no index ent o at voc resolver o problema e atualizar o index o comando git commit ir falhar git commit file txt needs merge Tamb m git status listar esses arquivos como unmerged e os arquivos com conflitos ter o os marcadores dos conflitos adicionados assim lt lt lt lt lt lt lt HEAD file txt Hello world Goodbye gt gt gt gt gt gt gt 77976da35alldb4580b80ae27e8d65caf5208086 file txt Tudo que voc precisa fazer editar os arquivos para resolver os conflitos e ent o git add file txt git commit Veja que a mensagem de commit j estar preenchida nele para voc com algumas informa es sobre o merge Normalmente voc pode us la sem mudan a nessa mensagem padr o mas voc pode adicionar um coment rio adicional se desejado Cap tulo 4 Uso B sico Tudo
80. les para mais detalhes do formato Depois da resolu o dos conflitos de maneira bvia mas antes de atualizar o index o diff se parecer com isso git diff giff esce file txt index 802992c 2b60207 0000000 a file txt b file txt 1 1 1 1 1 1 Hello world Goodbye Goodbye world Isso mostra que nossa vers o corrigida apagou Hello world do primeiro pai apagou Goodbye do segundo pai e adicionou Goodbye world que estava ausente de ambos anteriormente Algumas op es especiais do diff permitem diferenciar o diret rio de trabalho contra qualquer est gio git git git git git git Vr oXr o X od d d diff 1 file txt diff base file txt diff 2 file txt diff ours file txt diff 3 file txt diff theirs file txt diff contra o estagio 1 mesmo como acima diff contra o estagio 2 mesmo como acima diff contra o estagio 3 mesmo como acima Os comandos git log e gitk tamb m prov m ajuda especial para merges git log merge gitk merge 89 O Livro da Comunidade Git 90 Isso mostrar todos os commits que existem somente sobre HEAD ou sobre MERGE HEAD e qual tocou em um arquivo sem merge Voc tamb m pode usar git mergetool que deixa voc realizar o merge de arquivos sem merge usando ferramentas externas como emacs ou kdiff3 Cada vez que voc resolve os conflitos dentro do arquivo e atualiza o index git add file txt os difere
81. ling Git 3 Mac 105 markdown text 05 Installing Git 4 Windows markdown 0 Comparing Commits Git Diff markdown 0 Hosting Git gitweb repoorcz github markdown 9 files changed 115 insertions 6 deletions 1 Getting a Git Repo markdown Ae ONNO As vezes fazer isso mais f cil para visualizar tudo o que foi alterado para refrescar sua mem ria FLUXO DE TRABALHO DISTRIBUIDO Suponha que Alice tenha iniciado um novo projeto com um reposit rio git em home alice project e que Bob que possui um diret rio home na mesma m quina quer contribuir Bob inicia com git clone home alice project myrepo Isso cria um novo diret rio myrepo contendo um clone do reposit rio de Alice O clone est na mesma condi o de igualdade do projeto original possuindo sua pr pria c pia do hist rico do projeto original Bob ent o faz algumas altera es e commits dele edite alguns arquivos git commit a repita quando necess rio Quando terminar ele comunica a Alice para realizar um pull das altera es do reposit rio em home bob myrepo Ela faz isso com 45 O Livro da Comunidade Git 46 cd home alice project git pull home bob myrepo master Isso realiza um merge com as altera es do branch master de Bob para o branch atual de Alice Enquanto isso se Alice tem feito suas pr prias modifica es ent o ela pode precisar corrigir manualmente quaisquer confl
82. liza o da refer ncia O hook executa uma vez para cada refer ncia para ser atualizada e leva 3 par metros o nome da refer ncia sendo atualizada o nome do antigo objeto armazenado na refer ncia eo novo nome do objeto que ser armazenado na refer ncia 105 O Livro da Comunidade Git 106 Um sa da zero do hook update permite que a refer ncia seja atualizada Saindo com status diferente de zero previne git receive pack de atualizar aquela refer ncia Esse hook pode ser usado para previnir uma atualiza o for ada sobre certas refer ncias pela certeza de que o nome do objeto um objeto commit que um descedente do objeto commit nomeado pelo antigo nome de objeto Que fazer valer somente uma pol tica de fast forward Ele tamb m poderia ser usado para ver o status dos logs entre antigo novo Contudo ele faz com que nao saiba o completo conjunto de branchs embora ele terminaria enviando um email por refer ncia quando usado ingenuamente O hook post receive mais adequado Outro uso sugerido na lista de discuss o usar esse hook para implementar controle de acesso que mais refinado do que um baseado em grupos no sistema de arquivos Ambas as sa das e erros padr es sao encaminhadas para git send pack na outra extremidade ent o voc pode simplesmente fazer um echo nas mensagens para o usuario O hook update padr o quando ativado e com a op o hooks al1owunannotated ligada previne tags
83. m Diret rio Git por projeto o oposto de um por sub diret rio como no SVN ou CVS e que o diret rio por padr o embora n o necessariamente git na raiz do seu projeto Se voc olha no conte do desse diret rio voc pode ver todos os seus importantes arquivos S gt tree L 1 19 O Livro da Comunidade Git 20 HEAD aponta para o seu branch atual se contig suas configura es preferenciais description descri o do seu projeto hooks pre post action hooks index arquivo de index veja a pr xima se o logs um hist rico de onde seus branches tem estado objects seus objetos commits trees blobs tags refs ponteiros para os seus branches podem existir alguns outros arquivos diret rios aqui mas eles n o s o importantes agora O Diret rio de Trabalho O diret rio de trabalho do Git o diret rio que det m o checkout atual dos arquivos sobre o qual voc est trabalhando Arquivos nesse diret rio s o frequentemente removidos ou renomeados pelo Git quando voc troca de branches isso normal Todos os seus hist ricos s o armazenados no diret rio Git o diret rio de trabalho simplesmente um lugar tempor rio de checkout onde voc pode modificar os arquivos at o pr ximo commit O INDEX DO GIT O index do Git usado como uma rea de prepara o entre o seu diret rio de trabalho e o seu reposit rio Voc pode usar o index para construir um conjunto
84. mente fez e simplemente realizar um commit de tudo gitcast c3 add interactive STASHING Enquanto voc est trabalhando no meio de algo complicado voc encontra um erro n o documentado mas bvio e trivial Voc gostaria de corrigir ele antes de continuar Voc pode usar git stash para gravar o estado atual de seu trabalho e depois corrigir o erro ou opcionalmente depois de faz lo sobre um branch diferente e ent o voltar e recuperar as altera es que estava trabalhando antes do erro git stash save work in progress for foo feature 69 O Livro da Comunidade Git 70 Esse comando gravar suas altera es para O stash e resetar sua rvore de trabalho e o index para o in cio de seu branch atual Voc ent o pode fazer as corre es como de costume edite e teste 9 git commit a m blorpl typofix Depois disso voc pode voltar para aquilo que estava trabalhando usando git stash apply git stash apply Fila de Stash Voc tamb m pode usar o stash para enfileirar stashes Se voc executar git stash list voc pode ver que staches voc tem salvo gt git stash list stash 0 WIP on book 5lbeald fixed images stash 1 WIP on master 9705ae6 changed the browse code to the official repo Ent o voc pode aplicar eles individualmente com git stash apply stash Q 1 Voc pode limpar a lista com git stash clear GIT TREEISHES Existem v rios caminhos para referenciar um commit ou
85. mo se o branch master est atualmente apontando para o mesmo lugar Formato Ordinal Esse formato dar a voc o en simo valor anterior de uma refer ncia particular Por exemplo git log master 5 dar a voc o valor do quinto elemento do head master Carrot Parent Isso dar a voc o en simo pai de um commit particular Esse formato util sobre commits criados com merges objetos commit que possuem mais de um pai direto Cap tulo 5 Uso intermedi rio git log master 2 Formato til O dar a voc o quinto valor anterior do master head Por exemplo git log master 2 nos dar o primeiro pai do primeiro pai do commit que o master aponta Isso equivalente a git log master Voc tamb m pode continuar fazendo isso Os seguintes formatos apontar o para o mesmo commit git log master git log master 3 2 git log master 6 Apontador Tree Isso desambingua um commit da rvore para quem ele aponta Se voc quer o SHA que um commit aponta voc pode adicionar o formato no final dele git log master tree Formato Blob Se voc quer o SHA de um blob particular voc pode adicionar o caminho do blob no final do treeish assim 73 O Livro da Comunidade Git 74 git log master path to file Range Finalmente voc pode especificar uma faixa de commits com o formato Isso dar a voc todos os commits entre 7b593b5 e 51bea1 onde 51bea1 o mais recent
86. mostrados antes de seus pais Se visualizarmos o git log do reposit rio Grit em topo order voc pode ver que as linhas de desenvolvimento s o todas agrupadas juntas git log pretty format amp h s topo order graph 4a904d7 Merge branch idx2 IN EE dfeffce merged in bryces changes and fixed some testing issues PIN 9d6d250 IN cec36 7 decfe7b cd27d57 823a9d9 4eb3bf0 XN x d065e76 3fa3284 i dOlcffd 7074272 13f8Bcc3 06bae5a 0b5bedf si d40e1f0 ef8a23c 15dd347 3dabb6a eacic37 z 0a7d387 4d6b69c Cap tulo 4 Uso B sico 23f4ecf Clarify how to get a full count out of Repo commits Appropriate time zone test fix from halorgium Fix the to hash test to run in US Pacific time fixed manifest and grit rb to make correct gemspec added lib grit commit stats rb to the big list o files cleared out errors by adding in Grit Git run method resolved merge conflicts hopefully amicably empty commit to push project to runcoderun whitespace whitespace oops update version here too push 0 8 3 capture stderr and log it if debug is true when running commands update history some docs update gemspec to include the newly added files to manifest add missing files to manifest add grit test allow sending debug messages to a user defined logger if provided tes pull out the date in this assertion and compare as xmlschemaw to avoi Remo
87. nao definidas sejam enviadas post receive GIT DIR hooks post receive Esse hook invocado pelo git receive pack sobre o reposit rio remoto que acontece quando um git push feito sobre um reposit rio local Ele executa sobre o reposit rio remoto uma vez depois de todas as refer ncias tem sido atualizadas Cap tulo 6 Git Avan ado Esse hook executa uma vez para receber a opera o Ele n o leva nenhum argumento mas consegue a mesma informa o quando o hook pre receive faz sobre a sua entrada padr o Esse hook nao afeta o resultado do git receive pack quando ele chamado depois que o trabalho real feito Ele substitui o hook post update no qual ele consegue ambos antigos e novos valores de todas as refer ncias al m de seus nomes Ambas as sa das e erros padr es sao encaminhadas para git send pack na outra extremidade ent o voc pode simplesmente fazer um echo nas mensagens para o usuario O hook post receive padrao vazio mas existe um script de exemplo post receive email fornecido no diret rio contrib hooks na distribuic o do Git que implementa o envio de emails post update GIT DIR hooks post update Esse hook invocado pelo git receive pack sobre o reposit rio remoto que acontece quando um git push feito sobre o reposit rio local Ele executa sobre o reposit rio remoto uma vez depois que todas as refer ncias tem sido atualizadas Ele leva um n mero vari vel de par metros cada qual o
88. nding pending else puts aDID NOT COMMIT YOUR FILES puts View spec results at File expand_path html path puts puts failures failures examples run pending pending exit 1 end prepare commit msg GIT DIR hooks prepare commit msg Esse hook invocado pelo git commit depois de preparar a mensagem de log padr o e antes de iniciar o editor Ele leva de um a tr s par metros O primeiro o nome do arquivo da mensagem de commit O segundo a origem da mensagem de commit e pode ser message se a op o m ou F foi dada template se a op o t foi dada ou a op o de configura o commit tempiate est configurada merge se o commit um merge ou o arquivo git MERGE Msc existe squash se o arquivo git souasH msc existe commit seguido por um id SHA1 se a op o c c OU amend foi dada Se o status de sa da diferente de zero git commit ser cancelado A proposta desse hook editar o arquivo de mensagem e se ele n o for anulado pela op o no verify Uma sa da diferente de zero significa uma falha nesse hook e cancela o commit Ele n o deveria ser usado como substituto do hook pre comni t 101 O Livro da Comunidade Git 102 O exemplo do hook prepare commit msg que vem com o git comenta a parte do conflicts de uma mensagem de commit durante um merge commit msg GIT DIR hooks commit msg Esse hook invocado pelo git commit e pode ser anulado com a op o
89. ndo o commit foi criado Configurado no arquivo git info grafts hash 155 O Livro da Comunidade Git 156 No contexto do Git sin nimo para o nome do objeto head Uma refer ncia nomeada para o commit no topo do branch Heads s o armazenados em scrr DIR refs heads exceto quando est usando refs comprimidos Veja git pack refs HEAD O branch atual Em mais detalhes Sua rvore de trabalho normalmente derivado do estado da rvore referida pelo HEAD HEAD uma refer ncia para um dos heads em seu reposit rio exceto quando est usando um HEAD desacoplado que nesse caso ele pode referenciar um commit arbitr rio head ref Um sin nimo para head hook Durante a execu o normal de diversos comandos git chamadas s o feitas para scripts opcionais que permitem o desenvolvedor adicionar ou verificar funcionalidades Tipicamente os hooks permitem um comando ser pr verificado e potencialmente abortado e permitir que uma notifica o seja lan ada depois que a opera o tenha sido feita Os scripts s o encontrados no diret rio scrr DIR hooks e s o habilitados atrav s da simples remo o do sufixo sample nos nomes dos arquivos Em vers o mais antigas do git voc tinha que torn los execut veis index Cap tulo 9 Gloss rio Uma cole o de arquivos com informa es de estado no qual os conte dos s o armazenados como objetos O index uma vers o armazenada de sua rvore de trabalho Verda
90. nforma es do hist rico que ocupam muito espa o no disco ou mem ria Essa compress o n o realizado automaticamente Portanto voc deveria executar ocasionalmente git gc S git ge 81 O Livro da Comunidade Git para recomprimir o arquivo Isso pode consumir muito tempo ent o voc pode preferir executar git gc quando n o estiver trabalhando Garantindo a confiabilidade O comando git fsck executa v rias verifica es de consist ncia sobre o reposit rio e relata algum problema Isso pode levar algum tempo De longe o aviso mais comum sobre objetos dangling 5 git fsck dangling commit 7281251ddd2a61e38657c827739c57015671a6b3 dangling commit 2706a059 258c6b245f 298dc4ff2ccd30ec21a63 dangling commit 13472b7c4b80851a1bc551779171dcb03655e9b5 dangling blob 218761 9d90712d37a9c5e36 406 92202db07eb dangling commit bf093535a34a4d3573laa2bd90fe6b176302f14f dangling commit 8e4bec7f2ddaa268bef999853c25755452100f8e dangling tree d50bb86186bf 27b681d25af89d3b5b68382e4085 dangling tree b24c2473 1 d3d91352a624795be026d64c8841f Objetos dangling n o s o problemas No pior caso eles podem ocupar um pouco de espa o extra Eles algumas vezes podem prover um ltimo m todo para recupera o do trabalho perdido CONFIGURANDO UM REPOSIT RIO P BLICO Assuma que seu reposit rio pessoal est no diret rio proj Primeiro criamos um novo clone do reposit rio e pedimos ao git daemon que ele seja considerado p blico
91. no verify Ele leva um simples par metro o nome do arquivo que det m a mensagem de commit proposta Saindo com status diferente de zero faz com que O git commit aborte Com esse hook permitido editar o arquivo de mensagem e pode ser usado para normalizar a mensagem em algum formato padr o de mensagens se o projeto tem um Ele pode se usado para recusar o commit depois de inspecionar o arquivo de mensagem O hook commit msg padr o quando ativado detecta duplicadas linhas Signed off by e cancela o commit se um for encontrada post commit GIT DIR hooks post commit Esse hook invocado pelo git commit Ele n o leva nenhum par metro e invocado depois que o commit feito Esse hook usado essencialmente para notifica es e n o pode afetar o resultado do git commit Cap tulo 6 Git Avan ado pre rebase GIT DIR hooks pre rebase Esse hook chamado pelo git rebase e pode ser usado para previnir que num branch seja realizado um rebase post checkout GIT DIR hooks post checkout Esse hook invocado quando um git checkout executado depois de ter atualizado a rvore de trabalho Para esse hook dado 3 par metros a refer ncia de um HEAD anterior a refer ncia para um novo HEAD que pode ou n o ser mudado e uma flag indicando se o checkout foi um branch checkout alterando branchs flag 1 ou o checkout de um arquivo recuperando um arquivo do index flag 0 Esse hook n o afeta o resultado do git
92. nt o o arquivo ser armazenado com o seguinte caminho GIT DIR objects ab 044884140f7b0cf8bbf8646883869f16a46f65 Ele retira os dois primeiros caracteres e usa o como sub diret rio para que nunca exista muitos objetos em um diret rio O nome do arquivo na verdade o restante dos 38 caracteres A forma mais f cil de descrever exatamente como os dados do objeto s o armazenados essa implementa o em Ruby do armazenamento do objeto def put raw object content type size content length to s header type size 0 type space size null byte store header content shal path Digest SHA1 hexdigest store Ggit dir shal 0 2 shal 2 40 if File exists path content Zlib Deflate deflate store FileUtils mkdir_p directoryt shal 0 2 File open path w do f f write content end end return shal end 124 Cap tulo 8 Internals and Plumbing Objetos Packed O outro formato para o armazenamento de objetos o packfile Visto que o Git armazena cada vers o do arquivo em um objeto separado isso pode ser bastante ineficiente Imagine tendo um arquivo com milhares de linhas e ent o altera uma simples linha Git armazenar o segundo arquivo inteiramente nele que um grande desperd cio de espa o Segundo as regras para a economia de espa o Git utiliza o packfile Esse um formato onde o Git somente gravar a parte que foi alterada no segundo arquivo com um apo
93. ntador para o arquivo original Quando os objetos s o escritos no disco frequentemente no formato loose desde que o formato seja menos dispendioso para acessar Contudo finalmente voc ir querer economizar espa o atrav s do empacotamento dos objetos isso feito com o comando git gc Ele usar uma heur stica bastante complicada para determinar quais arquivos s o provavelmente mais semelhantes e e basear os deltas dessa an lise Podem ser m ltiplos packfiles eles podem ser re empacotados se necess rio git repack ou desempacotados de volta em arquivos loose git unpack objects com relativa facilidade Git tamb m escrever um arquivo index para cada packfile que muito menor e cont m o deslocamento dentro do packfile para rapidamente encontrar objetos espec ficos atrav s do sha Os detalhes exatos da implementa o do packfile s o encontrados no cap tulo Packfile um pouco mais tarde NAVEGANDO NOS OBJETOS GIT Podemos perguntar ao git sobre objetos particulares com o comando cat file Veja que voc pode encurtar os shas em somente alguns caracteres para economizar a digita o de todos os 40 digitos hexadecimais 125 O Livro da Comunidade Git 126 git cat file t 54196cc2 commit git cat file commit 54196cc2 tree 92b8b694ffb1675e5975148e1121810081dbdffe author J Bruce Fields lt bfields puzzle fieldses org gt 1143414668 0500 committer J Bruce Fields lt bfields puzzle fieldses org gt 1143414668
94. ntes est gios daquele arquivo ser o collapsed depois disso git diff n o mostrar por padr o diferen as para aquele arquivo Merge M ltiplos Voc pode realizar um merge de diversos heads de uma vez s atrav s da simples listagem deles no comando git merge Por exemplo S git merge scott master rick master tom master equivalente a S git merge scott master S git merge rick master S git merge tom master Cap tulo 6 Git Avan ado Subtree Existem situa es onde voc quer incluir o conte do em seus projetos de um projeto desenvolvido independentemente Voc s realiza um pull do outro projeto contanto que n o existam conflitos nos caminhos O caso problem tivo quando existem arquivos conflitantes Candidatos pot nciais s o Makefiles e outros nomes de arquivos padr es Voc poderia realizar um merge desses arquivos mas provavelmente voc n o vai querer faz lo Uma melhor solu o para esse problema pode ser realizar um merge do projeto com o seu pr prio sub diret rio Isso n o suportado pela estrat gia de merges recursivos ent o realizar pulls n o funcionar O que voc quer a estrat gia de subtrees do merge que ajuda voc nessa situa o Nesse exemplo digamos que voc tem o reposit rio em path to B mas ele pode ser uma URL se quiser Voc quer realizar o merge do branch master daquele reposit rio para o sub diret rio dir B em seu branch atual Aqui est a sequ ncia do
95. o pretty raw para git show ou git log para examinar seu commit favorito git show s pretty raw 2be7fcb476 commit 2be7fcb4764f2dbcee52635b91fedblb3dcf7ab4 tree fb3a8bdd0ceddd019615af4d57a53f43d8cee2bf parent 257a84d9d02e90447b149af58b271c19405edb6a author Dave Watson lt dwatson mimvista com gt 1187576872 0400 committer Junio C Hamano lt gitster pobox com gt 1187591163 0700 Fix misspelling of suppress in docs Signed off by Junio C Hamano lt gitster pobox com gt Como voc pode ver um commit definido por 14 Cap tulo 2 O b sico sobre os objetos no git uma tree O nome SHA1 do objeto tree como definido acima representando o conte do de um diret rio em um certo ponto no tempo parent s O nome SHA1 de algum n mero de commits que representa imediatamente o s passo s anterior es na hist ria do projeto O exemplo acima possui um parent commits gerados por um merge podem ter mais do que um Um commit sem nenhum parent chamado de commit root e representa a vers o revis o inicial do projeto Cada projeto deve possuir pelo menos um root Um projeto pode tamb m ter m ltiplos roots mesmo assim n o comum ou necessariamente uma boa id ia um author O nome da pessoa respons vel pela altera o junto com uma data um committer O nome da pessoa que de fato criou o commit com a data que foi feita Ele pode ser diferente do autor por exemplo se o autor escreveu um patch e enviou o para outra pessoa
96. o quando voc sair do editor o git tentar aplicar os commits como eles est o organizados agora e realizar a a o especificada Se pick especificado ele simplesmente tentar aplicar o patch e salvar o commit com a mesma mensagem de antes Se squash especificado ele combinar aquele commit com um anterior para criar um novo commit Voc cair novamente em seu editor para juntar as mensagens de commit dos dois commits que agora s o combinados Ent o se voc sair do editor com isso pick fc62e55 squash 9824bf4 squash 21d80a5 squash 76b9da6 squash c264051 added file size fixed little thing added number to log added the apply command Revert added file size not implemented correctly Ent o voc ter que criar uma nica mensagem de commit dele This is a combination of 5 commits The first commit s message is added file size This is the 2nd commit message fixed little thing This is the 3rd commit message added number to log Cap tulo 5 Uso intermedi rio This is the 4th commit message added the apply command This is the 5th commit message Revert added file size not implemented correctly This reverts commit fc62e5543b195f18391886b9f663d5a7eca38e84 Uma vez que voc tem editado a mensagem de commit e sa do do editor o commit ser salvo com a sua nova mensagem Se edit especificado far a mesma coisa mas ir parar antes de mover para o pr
97. o de commits 119 O Livro da Comunidade Git gitk git gui uma ferramenta que ajuda voc a visualizar as opera es no index como add remove e commit Ele n o far tudo que pode fazer na linha de comando mas para muitas opera es b sicas ele muito bom git gui Terceira Parte Projects Para usu rios Mac existem GitX and GitNub Para usu rios Linux ou Qt existe QGit HOSPEDAGEM GIT github repoorcz USOS ALTERNATIVOS ContentDistribution TicGit 120 SCRIPTING E GIT Ruby e Git grit jgit jruby PHP e Git Python e Git pygit Perl e Git perlgit GIT E EDITORS textmate eclipse Capitulo 7 Trabalhando com Git 121 O Livro da Comunidade Git netbeans 122 Cap tulo 8 Internals and Plumbing Cap tulo 8 Internals and Plumbing COMO O GIT ARMAZENA OBJETOS Esse cap tulo mostra em detalhes como o Git fisicamente armazenda os objetos Todos os objetos sao armazenados pela compress o do conteudo de acordo com os seus valores sha Eles cont m o tipo de objeto tamanho e conteudo no formato gzip Existem dois formatos que o Git mant m os objetos objetos loose e packed Objetos Loose Objetos loose o formato mais simples Ele simplesmente a compress o dos dados armazenados em um simples arquivo no disco Cada objeto escrito em um arquivo separado 123 O Livro da Comunidade Git Se o sha do seu objeto ab04d884140f7b0c 8bb 86d6883869F16a46f 65 e
98. o mesmo espa o na vers o 2 existem tabelas separadas para shas CRCs e offsets No final de ambos os arquivos est o as shas para ambos os arquivos de index e packfile que ele referencia Importante indexes de packfile n o s o necess rios para extrair objetos de um packfile eles s o simplesmente usados para acessar rapidamente objetos individuais de um pacote O formato do Packfile O packfile em si um formato muito simples Existe um cabe alho uma s rie de pacotes de objetos cada um com o seu pr prio cabe alho e corpo e o checksum Os primeiros quatro bytes a string PACK que d um pouco de certeza que voc est conseguindo o inicio de um packfile corretamente Isso seguido por um numero de vers o de 4 bytes do packfile e entao um numero de 4 bytes de entrada nesse arquivo Em Ruby voc pode ler os dados do cabegalho assim def read pack header sig session recv 4 ver session recv 4 unpack N 0 entries session reev 4 unpack N 0 sig ver entries end Cap tulo 8 Internals and Plumbing Depois que voc consegue uma s rie de objetos empacotados na ordem de seus SHAs que cada um consiste de um object header e object contents No final do packfile uma soma SHA1 de 20 bytes de todos os SHAs ordenados naquele packfile 135 O Livro da Comunidade Git objects pack pack 4eb8b c5 pack Offsets from pack idx 136 Cap tulo 8 Internals and Plumbing O
99. object header uma s rie de um ou mais bytes 8 bits que especifica o tipo do objeto de acordo como os dados sao com o primeiro bit existente dizendo se aquele conjunto o ultimo ou nao antes do inicio dos dados Se o primeiro bit o 1 voc ler outro byte sen o os dados iniciariam logo depois Os 3 primeiros bits no primeiro byte especifica o tipo do dado de acordo com a tabela a seguir Atualmente dos 8 valores que podem ser expressados com 3 bits 0 7 0 000 n o definido e 5 101 nao usado ainda Aqui n s podemos ver um exemplo do cabe alho de dois bytes onde o primeiro especifica que o seguinte dado um commit e o restante do primeiro e os ltimos 7 bits do segundo especifica que os dados ter o 144 bytes quando expandidos 137 O Livro da Comunidade Git OBJ COMMIT 001 OBJ TREE 010 OBJ BLOB 011 OBJ TAG 100 OBJ OFS DELTA 110 OBJ REF DELTA 111 Read from packfile 10010000 00010010 Step A 10010000 OBJ COMMIT 00010010 Step B 100 10000 A 00010010 Step C 10010000 00010010 138 B A gt 0010010 0000 Cap tulo 8 Internals and Plumbing Isso importante notar que o tamanho especificado no cabegalho nao o tamanho dos dados que na verdade segue mas o tamanho do dado quando expandido Isso porque os offsets no index do packfile sao tao teis sen o voc tem que expandir cada objeto s para dizer quando o pr ximo cabegalho inicia A parte de da
100. oc pode criar um objeto tag assim git tag a stable 1 1b2e1d63ff Na verdade poss vel adicionar um tag em qualquer objeto mas mais comum colocar tags em objetos do tipo commit No c digo fonte do kernel do Linux a primeiro objeto tag referencia uma rvore em vez de um commit Tags Assinadas Se voc tem uma chave GPG configurada voc pode criar tags assinadas mais facilmente Primeiro provavelmente ir querer configurar o id de sua chave no seu arquivo git config ou gitconfig user signingkey gpg key id Voc tamb m pode configura lo com git config global user signingkey lt gpg key id gt Agora voc pode criar uma tag assinada atrav s da substitui o do a pelo s git tag s stable 1 1b2e1d63ff Se voc n o tem sua chave GPG no seu arquivo de configura o voc pode realizar a mesmo coisa dessa forma git tag u lt gpg key id gt stable 1 1b2eld63ff 53 O Livro da Comunidade Git Cap tulo 5 54 Uso intermedi rio IGNORANDO ARQUIVOS Um projeto frequentemente ir gerar arquivos que voc n o quer gerenciar com o git Isso tipicamente inclui arquivos gerados por um processo de constru o ou arquivos de backup tempor rio feitos pelo seu editor claro n o gerenciar arquivos com o git apenas uma quest o de n o chamar git add nele Mas isso rapidamente torna se irritante ter esses arquivos n o selecionados espalhados por ai eles fazem o git add e gi
101. omizar espa o ou transmiti los com efici ncia pack index Uma lista de identificadores e outras informa es dos objetos em um pack para eficientemente ajudar no acesso do conte do de um pack parent Um objeto commit que cont m uma possivelmente vazia lista de predecessores l gicos em uma linha de desenvolvimento como exemplo seus pais pickaxe 159 O Livro da Comunidade Git 160 The term pickaxe refers to an option to the diffcore routines that help select changes that add or delete a given text string With the pickaxe a11 option it can be used to view the full changeset that introduced or removed say a particular line of text See git diff plumbing Nome mais atraente para core git porcelain Cute name for programs and program suites depending on core git presenting a high level access to core git Porcelains expose more of a SCM interface than the plumbing pull Pulling um branch significa recuper lo e realizar um merge nele Veja tamb m git pull push Pushing a branch means to get the branch s head ref from a remote repository find out if it is a direct ancestor to the branch s local head ref and in that case putting all objects which are reachable from the local head ref and which are missing from the remote repository into the remote object database and updating the remote head ref If the remote head is not an ancestor to the local head the push fails reachable Cap tulo 9 Gloss
102. or myserver com via git clone myserver com opt git myrepo git Que simplesmente solicitar suas senhas ssh ou usar suas chaves publicas contanto que eles tenham a autentica o ssh configurada Acesso de M ltiplos Usu rios usando Gitosis Se voc n o quer configurar contas separadas para cada usu rio voc pode usar uma ferramente chamada Gitosis No Gitosis existe um arquivo authorized keys que cont m uma chave p blica para todos os autorizados a acessar o reposit rio e ent o todos usam o usu rio git para realizar pushes e pulls Instalando e Configurando o Gitosis 85 O Livro da Comunidade Git Cap tulo 6 Git Avancado CRIANDO NOVOS BRANCHES VAZIOS Ocasionalmente voc pode querer manter branches em seu reposit rio que nao compartilha um ancestral com o seu c digo Alguns exemplos disso podem ser documenta es geradas ou alguma coisa nessas linhas Se voc quer criar um novo branch que n o usa seu c digo base atual como pai voc pode criar um branch vazio assim git symbolic ref HEAD refs heads newbranch rm git index git clean fdx lt do work gt git add your files git commit m Initial commit 86 Cap tulo 6 Git Avan ado gitcast c9 empty branch MODIFICANDO SEU HIST RICO Existem diversas maneiras de reescrever o hist rico de um reposit rio Todos eles podem causar problemas em commits que j tenham sido enviados para um reposit rio remoto Se voc reescrever o hist rico
103. orma em todo o reposit rio o mesmo conte do armazenado em dois reposit rios sempre ser armazenado sobre o mesmo nome Git pode detectar erros quando l um objeto atrav s da checagem do nome do objeto que ainda o hash SHA1 do seu conteudo Os Objetos Todo objeto consiste de 3 coisas um tipo um tamanho e conteudo O tamanho simplesmente o tamanho do conte do o conteudo depende do tipo que o objeto e existem quatro tipos diferentes de objetos blob tree commit and tag Um blob usado para armazenar dados do arquivo geralmente um arquivo Um tree basicamente como um diret rio ele referencia um conjunto de outras trees e ou blobs ex arquivos e sub diret rios Um commit aponta para uma simples tree fazendo com que o projeto se parecesse em um determinado ponto no tempo Ele cont m meta informa es sobre aquele ponto no tempo por exemplo um timestamp o autor das modificac es desde o ltimo commit um ponteiro para um commit anterior etc Uma tag uma forma de marcar um commit espec fico de alguma forma como especial Ele normalmente usado para identificar certos commits como vers es revis es espec ficas ou alguma coisa junto a aquelas linhas Quase tudo do Git constru do atrav s da manipula o dessa simples estrutura de quatro diferentes tipos de objetos Eles s o organizados dentro se seu pr prio sistema de arquivos que est o sobre o sistema de arquivos
104. ova tree somente com a manipula o do index Voc tamb m pode fazer opera es interessantes de merge e de um index tempor rio dessa forma veja a documenta o do git read tree para mais informa es Criando Commits Agora que temos um SHA de uma tree podemos criar um objeto commit que aponta para ele Podemos fazer isso usando o comando git commit tree Muitos dos dados que vai dentro do commit tem que ser configurado como vari veis de ambiente ent o voc gostaria de configurar as seguintes GIT AUTHOR NAME GIT AUTHOR EMAIL GIT AUTHOR DATE GIT COMMITTER NAME Cap tulo 8 Internals and Plumbing GIT COMMITTER EMAIL GIT COMMITTER DATE Ent o voc precisar escrever sua mensagem de commit para um arquivo ou de alguma forma envi lo para o comando atrav s do STDIN Ent o voc pode criar seu objeto commit baseado na SHA da tree que temos git commit tree bb2fa tmp message a5f85ba5875917319471dfd98dfc636c1dc65650 Se voc quer especificar um ou mais commits pais simplesmente adicione os SHAs na linha de comando com a op o p antes de cada um O SHA do novo objeto commit ser retornado vi STDOUT Atualizando o Branch Ref Agora que temos um novo SHA do objeto commit podemos atualizar um branch para apontar para ele se quisermos Digamos que queremos atualizar nosso branch master para apontar para um novo commit que j criamos usar amos o comando git update ref git update ref refs heads master a
105. que o commit que ser realizado depois que resolvermos esses conflitos ter o 2 pais ao inv s de um um pai ser o HEAD a ponta do branch atual o outro ser a ponta do outro branch que armazenado temporariamente no MERGE HEAD Durante o merge o index ret m tr s vers es de cada arquivo Cada um desses tr s est gios do arquivo representam uma vers o diferente do arquivo git show 1 file txt o arquivo o ancestral comum de ambos os branches git show 2 file txt a vers o do HEAD git show 3 file txt a vers o do MERGE HEAD Quando voc pergunta ao git diff para mostrar os conflitos ele executa um diff de tr s passos entre os resultados do merge conflitantes na rvore de trabalho com o est gio 2 e 3 para mostrar somente de qual o conte do vem de ambos os lados misturados em outras palavras quando o resultado do merge vem somente do est gio 2 que parte nao est conflitando e nao mostrada O mesmo para o est gio 3 O diff acima mostra a diferenca entre a vers o da rvore de trabalho do file txt e as vers es do est gio 2 e est gio 3 Ent o ao inv s de preceder cada linha com um simples ou ele agora usa duas colunas a primeira coluna usada para diferenciar entre o primeiro pai e a c pia do diret rio de trabalho atual e o Cap tulo 6 Git Avan ado segundo para diferenciar entre o segungo pai e a c pia do diret rio de trabalho Veja a se o COMBINED DIFF FORMAT do git diff fi
106. que ser levado para o commit se voc executar git commit sem a opc o a Finalmente voc pode executar 43 O Livro da Comunidade Git 44 git diff HEAD que mostra as altera es no diret rio de trabalho atual desde seu ltimo commit o que ser levado para o commit se voc executar git commit a Mais op es Diff Se voc quer ver como seu diret rio atual difere do estado em outro branch do projeto voc pode executar algo como git diff test Isso mostrar a voc a diferen a entre seu diret rio de trabalho atual e o snapshot sobre o branch test Voc tamb m pode limitar a compara o para um arquivo espec fico ou sub diret rio pela adi o do path limiter git diff HEAD lib Esse comando mostrar as altera es entre seu diret rio de trabalho atual e o ltimo commit ou mais exatamente dar uma dica sobre o branch atual limitando a compara o para os arquivos no diret rio lib Se voc n o quer ver o patch inteiro voc pode adicionar a op o stat que limitar a sa da para os arquivos que possui altera o junto com um pequeno gr fico em texto representando a quantidade de linhas alteradas em cada arquivo S gt git diff stat layout book index template html 8 text 05 Installing Git 0 Source markdown 14 tbe text 05 Installing Git 1 Linux markdown 17 text 05 Installing Git 2 Mac 104 markdown 11 Cap tulo 4 Uso B sico text 05 Instal
107. que usou o patch para criar o commit um comment descrevendo esse commit Note que um commit n o cont m qualquer informa o sobre o que foi alterado todas as altera es s o calculadas pela compara o dos conte dos da tree referenciada por esse commit com as trees associdadas com o seu parent De forma particular o git n o d aten o para arquivos renomeados explicitamente embora possa identificar casos onde a exist ncia do mesmo conte do do arquivo na altera o sugira a renomea o Veja por exemplo a op o M para git diff Um commit normalmente criado por git commit que cria um commit no qual o parent normalmente o HEAD atual e do qual a tree levada do conte do atualmente armazenado no index O Modelo de Objeto Ent o agora o que vimos os 3 principais tipos de objetos blob tree e commit vamos dar uma r pida olhada em como eles todos se relacionam juntos 15 O Livro da Comunidade Git Se tiv ssemos um simples projeto com a seguinte estrutura de diret rio gt tree README Fee Lib LHE ee tricks ro ee qwlib rb 2 diret rios 3 arquivos E comitamos ele para um reposit rio Git seria representado assim 16 Cap tulo 2 O b sico sobre os objetos no git 98ca9 e8455 0de24 blob e8455 tree 10af9 10af9 bc52a Oadla e een O Livro da Comunidade Git Voc pode ver que temos criado um objeto tree para cada diret rio incluindo
108. rio All of the ancestors of a given commit are said to be reachable from that commit More generally one object is reachable from another if we can reach the one from the other by a chain that follows tags to whatever they tag commits to their parents or trees and trees to the trees or blobs that they contain rebase Para reaplicar uma s rie de mudangas de um branch para uma diferente base e resetar o neaa desse branch para o resultado ref Uma representa o hexadecimal de 40 bytes de um SHA1 ou um nome que denota um objeto particular Esses podem ser armazenados em scrr pIR refs reflog Um re 1og mostra um hist rico local de rez Em outras palavras ele pode dizer a voc que a terceira ltima revis o nesse reposit rio foi e qual foi o estado atual nesse reposit rio ontem s 09 14pm Veja git reflog para mais detalhes refspec A refspec is used by fetch and push to describe the mapping between remote ref and local ref They are combined with a colon in the format preceded by an optional plus sign For example git fetch SURL refs heads master refs heads origin means grab the master branch head from the URL and store it as my origin branch head And git push URL refs heads master refs heads to upstream means publish my master branch head as to upstream branch at URL See also git push 161 O Livro da Comunidade Git 162 repository Uma cole o de refs juntas em um banco de dados de objetos
109. rmazenado na refer ncia lt new value gt o nome do novo objeto para ser armazenado na refer ncia e lt ref name gt O nome completo da refer ncia Quando criar uma nova refer ncia lt old value gt 40 o Se o hook sai com status diferente de zero nenhum resultado ser atualizado Se o hook sai com zero atualiza es de refer ncias individuais podem ainda ser previnidos pelo hook update Ambas as sa das e erros padr es sao encaminhadas para git send pack na outra extremidade ent o voc pode simplesmente fazer um echo nas mensagens para o usuario Se voc escreveu ele em Ruby voc pode conseguir os argumentos dessa forma Cap tulo 6 Git Avan ado rev old rev new ref STDIN read split Ou em um script bash alguma coisa assim funcionaria bin sh lt oldrev gt lt newrev gt lt refname gt update a blame tree while read oldrev newrev ref do echo STARTING Soldrev newrev Sref for path in git diff tree r Soldrev Snewrev awk print 6 do echo git update ref refs blametree Sref Spath newrev git update ref refs blametree Sref Spath newrev done done update GIT_DIR hooks update Esse hook invocado pelo git receive pack sobre o reposit rio remoto que acontece quando um git push feito sobre um reposit rio local S que antes de atualizar a refer ncia sobre o reposit rio remoto o hook update invocado Seu status de sa da determina o sucesso ou falha da atua
110. rquivo bin rio geralmente mantido em git index cont m uma lista ordenada de caminhos cada um com permiss es e o SHA1 de um objeto blob git Is files pode mostrar a voc o conte do do index git ls files stage 00644 00644 00644 00644 00644 00644 00644 00644 63c918c667fa005ff12ad89437f2fdc80926e21c 5529b198e8dl4decbe4ad99db3f7fb632de0439d 6 87c4664981e43976257791c8ea3bbb5 2279a3 a37b2152bd26be2c2289e1 57a292534a51a93c7 fbhefe9a45b00a54b58d94d06eca48b03d40a50e0 2511aef8d89ab52be5ec6a5e46236b4b6bcd07ea 2ade97502574a9 77e7ae4002a4e07a6a38e464807 d5de8292e05e7c36c4b68857c1c 9855e3d2 70a Cap tulo 8 Internals and Plumbing gitignore mailmap COPYING Documentation gitignore Documentation Makefile xdiff xtypes h xdiff sxutils o xdiff x tris h Veja que em uma documenta o mais antiga voc pode ver o index ser chamado de cache do diret rio atual ou s cache Ele possui tr s propriedades importantes O index cont m todas as informa es necess rias para gerar um simples unicamente determinado objeto tree Por exemplo executando git commit gera esse objeto tree do index armazena ele no banco de dados de objetos e usa ele como o objeto tree associado com o novo commit O index habilita r pidas compara es entre o objeto tree e a rvore de trabalho Ele faz isso atrav s do armazenamento de algum dado adicional para cada entrada por exemplo a ltima hora modificada Esse da
111. s nicos de um dado branch Suponha que voc gostaria de ver todos os commits alcan veis do branch head chamado master mas n o de qualquer outro head no seu reposit rio Podemos listar todos os heads nesse reposit rio com git show ref S git show ref heads bf62196b5e363d73353a9dcf094c59595f3153b7 refs heads core tutorial db768d5504clbb46f63ee9d6e1772bd047e05bf9 refs heads maint a07157ac624b2524a059a3414e99f6f44bebcle7 refs heads master 129 O Livro da Comunidade Git 130 24dbc180eal4dclaebe09f14c8ecf32010690627 refs heads tutorial 2 1e87486ae06626c2 31eaa63d26fc0fd646c8af2 refs heads tutorial fixes Podemos conseguir s os nomes do branch e remover master com a ajuda dos utilit rios padr es cut e grep git show ref heads cut d f2 grep v refs heads master refs heads core tutorial refs heads maint refs heads tutorial 2 refs heads tutorial fixes E ent o podemos ver todos os commits alcagaveis do master mas nao desse outros heads gitk master not git show ref heads cut d f2 grep v refs heads master Obviamente intermin veis varia es s o poss veis por exemplo para ver todos os commits alcan veis de algum head mas n o de qualquer tag no reposit rio gitk git show ref heads not git show ref tags Veja git rev parse para explica es da sintaxe de commit selecting como por exemplo not Mupdate ref O INDEX DO GIT O index um a
112. s valores para um projeto espec fico para usar um endere o de email do trabalho por exemplo voc pode executar o comando git config sem a op o global naquele projeto Isso ir adicionar uma se o user como mostrado acima para o arquivo git config na raiz de seu projeto Cap tulo 4 Cap tulo 4 Uso B sico Uso B sico CONSEGUINDO UM REPOSIT RIO GIT Ent o agora que n s j configuramos precisamos de um reposit rio Git Podemos fazer isso de duas maneiras n s podemos clonar um j existente ou podemos inicializar um dentro de algum projeto que ainda n o tenha controle de vers o ou a partir de um diret rio vazio Clonando um Reposit rio Para que consigamos uma c pia de um projeto voc ir precisar saber qual a URL a localiza o do reposit rio do projeto Git Git pode operar sobre muitos diferentes protocolos ent o ele pode iniciar com ssh http s git ou s o nome de usuario no qual o git assumir ssh Alguns reposit rios podem ser acessados sobre mais do que um protocolo Por exemplo o c digo fonte do pr prio Git pode ser clonado sobre o protocolo git 27 O Livro da Comunidade Git 28 git clone git git kernel org pub scm git git git ou sobre http git clone http www kernel org pub scm git git git O protocolo git mais r pido e mais eficiente mas algumas vezes necess rio usar http quando est o por tr z de firewalls corporativo ou que voc tenha N
113. sem ter que realizar algum checkout Por exemplo se eu quisesse ver cada lugar que usou a chamada xmmap no meu reposit rio git git eu poderia executar isso git grep xmmap config d contents xmmap NULL contents sz PROT READ Gf s gt data xmmap NULL s size PROT READ MAP PRIVATE fo D git compat util h extern void xmmap void start size t length int prot int fla read cache c mmap xmmap NULL mmap size PROT READ PROT WRITE MAP PRIVATE refs c log mapped xmmap NULL mapsz PROT READ MAP PRIVATE logfd 0 shal file c map xmmap NULL mapsz PROT READ MAP PRIVATE fd 0 shal file c idx map xmmap NULL idx size PROT READ MAP PRIVATE fd 0 shal file c win gt base xmmap NULL win gt len shal file c map xmmap NULL size PROT READ MAP PRIVATE f 75 O Livro da Comunidade Git shal file c buf xmmap NULL size PROT READ MAP PRIVATE fd 0 wrapper c void xmmap void start size t length Se eu quisesse ver o numero de linhas de cada arquivo encontrado eu posso adicionar a op o n gt git grep n xmmap contig sds 1016 contents xmmap NULL contents sz PROT READ daff cs18323 s gt data xmmap NULL s size PROT READ MAP PRIVATE fd git compat util h 291 extern void xmmap void start size t length int prot int read cache c 1178 mmap xmmap NULL mmap size PROT READ PROT WRITE MAP refs c 1345 log mapped xmmap NULL mapsz PROT READ MAP PRIV
114. t commit a praticamente in teis e eles permanecem sendo visualizados pelo git status Voc pode dizer ao git para ignorar certos arquivos atrav s da cria o do arquivo chamado gitignore na raiz do seu diret rio de trabalho como por exemplo Linhas que iniciam com s o considerados coment rios Ignora qualquer arquivo chamado foo txt too EXE Cap tulo 5 Uso intermedi rio Ignora arquivos html gerados tmi com excec o de foo html que mantido manualmente foo html Ignora objetos e arquivos hist ricos poa Veja gitignore para uma detalhada explicac o da sintaxe Voc tamb m pode colocar arquivos gitignore em outros diret rios na sua rvore de trabalho e eles se aplicar o a esses diret rios e subdiret rios Os arquivos gitignore podem ser adicionados em seu reposit rio como todos outros arquivos s execute git ada gitignore 6 git commit Como sempre que conveniente quando os padr es de exclus o por exemplo os padr es que casam com arquivos construidos tamb m far o sentido para outros usu rios que clonam seu reposit rio Se voc escolhe padr es de exclus o para afetar somente certos reposit rios ao inv s de cada reposit rio para um dado projeto voc pode por exemplo coloc los em um arquivo em seu reposit rio chamado git info exclude ou em qualquer arquivo especificado pela vari vel core excludesfile Alguns comandos git tamb m fornecem padr es de exclus
115. t size PROT READ MAP PRIVATE fd vl 5 0 shal file c idx map xmmap NULL idx size PROT READ MAP PRIVATE fd vl 5 0 sshal file e win gt base xmmap NULL win gt len vl 5 0 shal file c map xmmap NULL st st size PROT READ MAP PRIVATE fd v 5 0sshal filee buf xmmap NULL size PROT READ MAP PRIVATE d N s podemos ver que existem algumas diferen as entre as linhas atuais e as linhas na vers o 1 5 0 um dos quais onde o xmmap agora usado no wrapper c onde n o estava no v1 5 0 Podemos tamb m combinar os termos de busca no grep Digamos que queremos procurar onde SORT_DIRENT est definido em nosso reposit rio git grep e define and e SORT_DIRENT builtin fsck c define SORT DIRENT 0 builtin fsck c define SORT DIRENT 1 T O Livro da Comunidade Git Tamb m podemos procurar por arquivos que possuem ambos os termos mas mostra cada linha que possuem algum dos termos nesses arquivos git grep all match e define e SORT DIRENT builtin fsck c define REACHABLE 0x0001 builtin fsc define SEEN 0x0002 builtin fsc define ERROR OBJECT 01 builtin fsc define ERROR REACHABLE 02 builtin fsc define SORT DIRENT 0 builtin fsc define DIRENT SORT HINT de 0 bu iltin fsc define SORT DIRENT 1 b rltzn fsc define DIRENT SORT HINT de de d ino builtin fsc define MAX SHA1 ENTRIES 1024 builtin fse if SORT DIRENT AA A PV A PV A A A Qo G OO G Podemos tamb m procurar por
116. tar git branch neste momento voc ver que o git moveu voc temporariamente para um novo branch chamado bisect Esse branch aponta para um commit o commit 65934 que est pr ximo do master mas nao do v2 6 18 Compile e teste o e veja se possui erro Assumindo que ele possui erro Ent o git bisect bad Bisecting 1769 revisions left to test after this 7e 82c8b1511017ae605 0c99ac275a7e2150867 i2c core Drop useless bitmaskings Cap tulo 6 Git Avan ado vai para uma vers o mais antiga Continua assim chamando o git em cada est gio se a vers o que ele d a voc boa ou ruim e avisa que o numero de revis es restante para testar cortado aproximadamente no meio em cada vez Depois de 13 testes nesse caso ele mostrar o id do commit culpado Voc pode ent o examinar o commit com git show encontrar quem escreveu ele e enviar um email a ele sobre esse bug com o id do commit Finalmente execute git bisect reset para retorna ao branch onde estava antes e apagar o branch tempor rio bisect Veja que a vers o que git bisect verifica para voc em cada ponto s uma sugest o voc est livre para tentar uma vers o diferente se achar que isso uma boa id ia Por exemplo ocasionalmente voc pode cair em um commit que possue um erro nao registrado execute git bisect visualize que executar um gitk e marcar o commit escolhido com bisect Escolha um commit seguro mais pr ximo veja seu i
117. tem conflitos marcas ser o deixadas nos arquivos problem ticos mostrando os conflitos git diff ir mostr los Um vez que voc editou os arquivos para resolver os conflitos S git commit a ir realizar o commit do resultado do merge Finalmente S gitk mostrar uma tima representa o gr fica resultante do hist rico Nesse ponto voc poder apagar o branch experimental com git branch d experimental Esse comando assegura que as altera es no branch experimental j est o no no branch atual Cap tulo 4 Uso B sico Se voc desenvolve sobre o um branch crazy idea ent o se arrependeu voc sempre pode apagar o branch com git branch D crazy idea Branches s o baratos e f ceis ent o uma boa maneira para testar alguma coisa Como realizar um merge Voc pode reunir dois diferentes branches de desenvolvimento usando git merge git merge branchname realiza um merge com as altera es feitas no branch branchname no branch atual Se existirem conflitos por exemplo se o mesmo arquivo modificado em duas diferentes formas no branch remoto e o branch local entao voc ser avisado a saida pode parecer alguma coisa com isso git merge next 100 4 4 done Auto merged file txt CONFLICT content Merge conflict in file txt Automatic merge failed fix conflicts and then commit the result Marcadores dos conflitos sao deixados nos arquivos problematicos e depois que voc resolve os confl
118. uenos m dulos auto contidos Por exemplo uma rvore de c digo fonte de uma distribui o Linux embarcada incluir cada software na distribui o com algumas modifica es locais pode ser que um player de filme precise ser construido em cima de uma espec fica e bem trabalhada vers o de uma biblioteca de descompress o diversos programas independentes podem compartilhar os mesmos scripts de construc o Isso geralmente caracter stico em sistemas centralizados de controle de vers o por incluir cada m dulo em um simples reposit rio Desenvolvedores podem baixar todos os m dulos ou somente os m dulos que eles precisam trabalhar Eles podem at modificar arquivos pelos diversos m dulos em um simples commit enquanto move coisas ou atualiza APIs e tradu es Git n o permite checkouts parciais ent o duplicando essa abordagem no Git for ar aos desenvolvedores manter uma c pia local dos m dulos que eles n o est o interessados Commits em grandes checkouts ser mais lento do que voc poderia esperar com o Git ele ter que buscar cada diret rio por altera es Se os m dulos possuem muito hist rico local clones levar o uma eternidade Por outro lado sistemas de controle de revis o distribuida podem ser muito melhor integrados com fontes externas Em um modelo centralizado uma simples c pia arbitr ria de um projeto externo exportado de seu pr prio controle de revis o e ent o importado para o branch do controle de
119. um i ou interactive para o comando git rebase git rebase i origin master Isso invocar o modo de rebase interativo sobre todos os commits que voc tem feito desde a ultima vez que Cap tulo 5 Uso intermedi rio voc realizou um pull ou merge de um reposit rio origin Para ver de antem o quais s o os commits voc pode executar dessa forma git log origin master Uma vez que voc rodar o comando rebase i origin master voc ser levado para o seu editor com algo parecido com isso pick fe6z2e55 pick 9824bf4 pick 21d80a5 pick 76b9da6 pick 264051 Commands p pick e edit S Squash added file size fixed little thing added number to log added the apply command Revert added file size not implemented correctly Rebase 408319 b04dc3d onto 408319 use commit use commit but stop for amending use commit but meld into previous commit If you remove a line here THAT COMMIT WILL BE LOST However if you remove everything the rebase will be aborted Isso significa que existem 5 commits desde o ltimo push realizado e Ihe dar uma linha por commit com o seguinte formato action partial sha short commit message 63 O Livro da Comunidade Git 64 Agora voc pode alterar a a o que por padr o pick para qualquer um entre edit ou squash ou deix lo como pick Voc tamb m pode re ordenar os commits movendo as linhas como voc quiser Ent
120. ved debug print Fixed to close opened file description Voc tamb m pode usar date order que ordena os commits inicialmente pelas datas dos commits Essa op o similar ao topo order no sentido de que nenhum pai vem antes de todos os filhos mas por outro lado elas s o ordenadas por ordem do timestamp do commit Voc pode ver que as linhas de desenvolvimento aqui n o s o agrupadas juntas que eles pulam por cima quando o desenvolvimento paralelo ocorreu git log pretty format h s date order graph x Y 4a904d7 Merge branch IN idx2 81a3e0d updated packfile code to recognize index v2 41 O Livro da Comunidade Git dfeffce merged in bryces changes and fixed some testing issues IN c615d80 fixed a log issue if 23f4ecf Clarify how to get a full count out of Repo commits id 9d6d250 Appropriate time zone test fix from halorgium IN i decfe7b fixed manifest and grit rb to make correct gemspec 7 cd27d57 added lib grit commit_stats rb to the big list o file d 823a9d9 cleared out errors by adding in Grit Git run method 4eb3bf0 resolved merge conflicts hopefully amicably INN di ba23640 Fix CommitDb errors in test was this the right fix 4d8873e test_commit no longer fails if you re not in PDT m b3285ad Use the appropriate method to find a first occurrenc x 44dda6c more cleanly accept separate options for initializin a 839ba9f needed to be able to ask Repo new to work with a bar
121. za es do reposit rio principal mas ele tamb m funciona em outras dire es Se o respons vel pelo projeto e voc possuem contas na mesma m quina ent o voc pode somente realizar um pull das altera es diretamente do outro reposit rio comandos que aceitam URLs de reposit rios como argumentos tamb m aceitam nomes de diret rios locais S git clone caminho para repositorio git pull caminho para outro repositorio ou uma URL ssh git clone ssh suamaquina voce repositorio Cap tulo 4 Uso B sico Para projetos com alguns desenvolvedores ou para a sincroniza o de alguns reposit rios privados isso pode ser tudo que voc precisa Contudo a forma mais comum de fazer isso manter um reposit rio p blico separado na verdade em uma m quina diferente para os outros realizarem pull das altera es Isso na verdade mais conveniente e permite claramente a voc separar trabalho pessoal em progresso do trabalho vis vel publicamente Voc continuar a fazer seu trabalho di rio em seu reposit rio pessoal mas periodicamente realizar um push das altera es de seu reposit rio pessoal para o seu reposit rio p blico permitindo os outros desenvolvedores realizar pulls daquele reposit rio Ent o o fluxo de altera es na situa o onde existe um outro desenvolvedor com reposit rio p blico parece com isso voc realiza push seu repo pessoal gt seu repo p blico 5
Download Pdf Manuals
Related Search
Related Contents
Makita ML12 User's Manual Mode d`emploi Z84C90 KIO Serial/Parallel Counter/Timer Product Specification 平成9年門審第88号 漁船第十五光洋丸機関損傷事件 言渡年月日 平成 EDOC 237 Clover Card User Guide v1 Copyright © All rights reserved.
Failed to retrieve file