Você está na página 1de 12

Data:04/06/2008TutorialPrticosobreGit

TUTORIAL PRTICO SOBRE Git


por Djalma Oliveira <djalmaoliveira@gmail.com>

Verso 1.1

"Git um sistema de controle de reviso distribuida, rpido e escalvel" (traduo rpida do manual). Basicamente um sistema de controle de versionamento de arquivos, muito usado por desenvolvedores para gerenciar verses do software produzidos seja por um desenvolvedor como tambm por outros participantes do projeto. Com ele podemos integrar novas funcionalidades efetuadas por outros desenvolvedores, completa, parcial ou no, e tudo isso sendo registrado em um histrico que permite "voltar no tempo" para descobrir por exemplo como funcionava uma determinada verso daquele projeto. Os participantes do projeto podem enviar suas verses, correes, patchs para o projeto principal sem que o projeto principal seja comprometido, permitindo ao dono do projeto a escolha, teste e incluso dessas alteraes no projeto principal se desejar. O Git foi desenvolvido inicialmente por Linus Torvalds mediante uma necessidade de ter um software robusto para controle de verso do kernel linux. Outras informaes sobre o assunto pode ser acessado atravs desses links: Projeto : http://git.or.cz/ Vdeo do Linus falando sobre o Git: http://www.youtube.com/watch? v=4XpnKHJAok8 Manual do usurio: http://www.kernel.org/pub/software/scm/git/docs/usermanual.html Aqui iniciaremos um rpido e prtico tutorial sobre o Git, nada muito profundo, mas bastante til para aqueles que queiram entender um pouco sobre Git.

Data:04/06/2008TutorialPrticosobreGit

TERMOS ANTES DE COMEAR Repositrio: Local onde fica armazenado os arquivos do projeto, verses e histricos, local onde os desenvolvedores podem submeter as alteraes para o projeto. Commit: Conjunto de alteraes realizadas durante o desenvolvimento, normalmente essas alteraes so implementaes especficas, seja uma correo, nova verso entre outros. Veja um commit como um ponto histrico no desenvolvimento do projeto, esses pontos podem ser recuperados quando necessrio.

Data:04/06/2008TutorialPrticosobreGit

INICIANDO UM REPOSITRIO LOCAL Criaremos uma pasta para nosso repositrio: mkdirmeuprojeto cdmeuprojeto Dentro da pasta iniciaremos um repositrio Git: gitinit Perceba que todos os arquivos dentro da pasta(meuprojeto) fazem parte do repositrio, ou seja o seu projeto. Configuramos agora as informaes sobre o desenvolvedor(voc), usado para identificar o desenvolvedor em cada commit realizado: gitconfiguser.name"DjalmaOliveira" gitconfiguser.email"djalmaoliveira@gmail.com" Perceba que foi criado uma pasta '.git', aonde todas as informaes histricos dos arquivos ficam armazenados e onde acontece a 'mgica'. Criamos dois arquivos(vazios) para o projeto. toucharq1.txt toucharq2.txt Agora informamos ao Git que todos os arquivos devem ser incluidos ao prximo commit: gitadd. Mas se desejar tambm pode adicionar somente arquivos especficos, basta informar o seu caminho: gitaddarq2.txt O Git inteligente o suficiente para detectar se houve alguma alterao nos arquivos que foram indicados para o commit(git add), assim ele no realiza commits sem que pelo menos um arquivo tenha sido alterado, exceto o primeiro commit. Agora realizamos o commit: gitcommitam"Meuprimeirocommit" * o parmetro -a informa que deve adicionar todos os arquivos alterados ao commit; * o parmetro -m "texto" adiciona uma mensagem informativa para o commit; Resumindo, para realizar commits seguimos 3 passos: 1 - Efetuar modificaes em algum arquivo; 2 - Informar ao Git quais arquivos devem ser adicionados ao prximo commit(git add); 3 - Efetuar o commit(git commit) propriamente dito baseado nos arquivo do passo 2; e

Data:04/06/2008TutorialPrticosobreGit

No Git todo commit, exceto o primeiro, descendente(filho) de um outro commit, ento voc pode verificar diferenas entre commits caso queira. Aps eleger(git add) quais arquivos iro para o prximo commit, voc pode ver quais alteraes foram realizadas desde o ltimo commit, usando: gitdiffcached Essas informaes sobre alteraes desde o ltimo commit ficam armazenadas em uma estrutura do Git chamada de 'index', ou seja, todas as vezes que voc adicionar(git add) arquivos para o prximo commit essas diferenas ficam armazenadas nessa estrutura at o momento em que de fato seja realizado o commit(git commit). Listando commits realizados: gitlog Mostrando os arquivos alterados desde o ltimo commit: gitstatus Mostra as alteraes realizadas no ltimo commit: gitshow

Data:04/06/2008TutorialPrticosobreGit

BRANCHS Uma branch uma linha de desenvolvimento do projeto. Voc pode ter vrios branchs em seu repositrio, cada branch representando uma verso especfica de seu projeto, por exemplo. Veja um branch como um fork('cpia') do projeto que pode seguir sua prpria linha de desenvolvimento. Todo novo repositrio Git (aps o primeiro commit) possue um branch chamado por padro 'master'. Por exemplo podemos reprensentar nossos branchs da seguinte forma: master => projeto principal e a ltima verso em produo. working => branch no qual voc est trabalhando atualmente; versao-1.0 => uma das vrias verses disponveis de seu projeto. versao-1.1 => outra verso... teste => alguma verso para testes

Data:04/06/2008TutorialPrticosobreGit

MANIPULAO DE BRANCHS LOCAIS Listando os branchs locais: gitbranch *master teste working Perceba corrente. que o branch que possui um '*' na frente representa o branch

Criamos um novo branch 'working' baseado no branch corrente, mantendo-se no branch atual(master): gitbranchworking Criando um novo branch 'teste' baseado em um outro branch 'working' que no o corrente,ainda mantendo-se no branch atual: gitbranchtesteworking Outra forma de criar um branch e ao mesmo tempo tornar o novo como corrente usando: gitcheckoutbtesteworking At este ponto devemos ter as seguintes branchs: *master teste working Mudando para o branch working: gitcheckoutworking Agora ficar assim: master teste *working Apagando um branch: gitbranchDteste Lembrete: voc no pode apagar o branch corrente, alterne para um outro ento execute novamente o comando.

Data:04/06/2008TutorialPrticosobreGit

MAIS SOBRE OS BRANCHS At aqui voc j deve ter percebido que no foi necessrio sair da pasta do projeto, na realidade a cada mudana de branch (git checkout) os arquivos contidos na pasta do projeto so modificados para refletir exatamente as verses de cada branch, sendo assim o seu projeto sempre vai estar localizado naquela pasta, pois o Git se encarrega de gerenciar as informaes relativos a cada branch corrente.

Data:04/06/2008TutorialPrticosobreGit

INCORPORANDO(merge) NOVAS MODIFICAES AO PROJETO Uma das funcionalidades mais interessantes do Git a capacidade de incorporar as alteraes realizada por programadores ao projeto. Essa 'juno' se d somente entre branchs e chamada de merge. Por exemplo, digamos que o arquivo arq2.txt no branch working foi alterado: gitcheckoutworking #mudandoparaobranchworking echo"opa">arq2.txt #alteraopropriamentedita gitadd. #marcaosarquivosparaoprximocommit gitcommitam"alterandoarq2.txt"#commit Agora a idia adicionar as alteraes realizadas no branch working para o branch master(lembre-se que o branch working um fork do master!?). Mudamos para o branch que receber as alteraes: gitcheckoutmaster Realizamos agora o merge corrente(master): gitmergeworking das alteraes do branch working para o

Aps o comando acima ser mostrado um resumo do que foi realizado: Updating751bee8..625fa43 Fastforward arq2.txt|1+ 1fileschanged,1insertions(+),0deletions() Confirmando a alterao no arquivo: catarq2.txt Peceba que neste momento toda e qualquer alterao realizada no ltimo commit do branch working agora est refletida do branch master, inclusive o commit realizado na branch working, que agora est na branch master. Verifique o ltimo commit: gitlog

Data:04/06/2008TutorialPrticosobreGit

COMPLICANDO MAIS Perceba que antes de efetuarmos o merge, somente a branch working possuia alteraes, a master no, mas e se a branch master fosse alterada antes de dar-mos um merge a branch working? Essa situao bastante comum em projetos grandes que alteraes so adicinadas frequentemente ao projeto principal, no refletindo mais a verso atual do working. Lembrando que todo branch possui um branch pai que a sua base a partir de ento. Nessa situao a melhor forma de realizar o merge seria realizar um 'rebase', ou seja, pegar o ltimo commit do master, que a base do working (por isso o nome rebase), trazer para o working e aplicar todos os seus commits(na mesma ordem de criao) nele, agora sim a sua verso do working estar sincronizada com a ltima verso do master mais os seus commits. Realizar um merge nessa situao pode at funcionar(o Git inteligente em algumas situaes), mas no recomendado pois isso poderia causar conflitos que seriam mais trabalhosos de resolver do que se efetuasse um 'rebase'. Ento antes de aplicar-mos um merge ao master, faremos um rebase a branch working antes para refletir a ltima verso do master: gitcheckoutworking gitrebasemaster Agora podemos aplicar um merge ao master: gitcheckoutmaster gitmergeworking

Data:04/06/2008TutorialPrticosobreGit

REPOSITRIOS REMOTOS A idia a mesma de um repositrio local, mas os remotos so hospedados em servidores na internet ou outra mquina que no a sua (mas pode ser a sua tambm). Para trabalharmos com repositrios remotos usamos alguns comandos extras alm dos j estudados. Para criar um clone (cpia de todo o projeto, incluindo todos commits) do projeto podemos usar um dos seguintes comandos (dependendo a configurao do servidor): gitclonegit://sitehospedado.com.br/projeto ou gitclonehttp://sitehospedado.com.br/projeto Logo aps, voc ver que ser criado um diretrio com o nome do projeto, e dentro a cpia(clone) de todo o projeto. Veja o repositrio remotos disponvel agora: cdprojeto gitbranchr origin/HEAD origin/master origin/working

Perceba que a palavra origin o nome padro (mas voc pode criar um com nome diferente desse se quiser) para repositrios remotos, representando os branchs que existem no projeto, mas que so de origem remotas para voc agora. Veja que voc deve criar um branch local baseado em algum branch remoto antes de comear a efetuar suas alteraes. gitcheckoutbworkingorigin/working Agora digamos que voc efetuou vrias alteraes neste repositrio e durante esse tempo o projeto principal tambm foi alterado no correspondendo mais a base que voc possui agora e ento deseja sincronizar com a ltima verso disponvel do projeto. Primeiramente recuperamos a verso recente do projeto: gitfetch Agora efetua o merge com o branch atual: gitmergeorigin/master Uma outra forma de realizar poderia ser assim: gitpulloriginmaster Ou at mesmo: gitpull Neste ltimo caso considerando que voc tem um branch master ele far o merge automaticamente.

10

Data:04/06/2008TutorialPrticosobreGit

SINCRONIZANDO SUAS ALTERAES COM O REPOSITRIO REMOTO Aps efetuar suas modificaes no branch, voc pode envi-lo para o servidor remoto atravs deste simples comando: gitpush

11

Data:04/06/2008TutorialPrticosobreGit

INFORMAES FINAIS Bom, finalizo por aqui mas existem ainda muitos comandos sobre o Git que podem ser abordados em verses futuras deste manual, ento aguardem atualizaes. Espero ter abordado de forma clara, algumas caractersticas do Git e comentem se encontrarem algum erro, pois algumas partes foram traduzidos(minha verso) do manual do usurio.

12