Escolar Documentos
Profissional Documentos
Cultura Documentos
"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/user-manual.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.
git init
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:
Perceba que foi criado uma pasta '.git', aonde todas as informaes e histricos dos arquivos ficam armazenados e onde acontece a 'mgica'. Criamos dois arquivos (vazios) para o projeto.
Agora informamos ao Git que todos os arquivos devem ser incluidos ao prximo commit:
git add . Mas se desejar tambm pode adicionar somente arquivos especficos, basta informar o seu caminho:
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:
* 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. 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:
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).
git log
git status
git show
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 working versao-1.0 versao-1.1 teste => projeto principal e a ltima verso em produo. => branch no qual voc est trabalhando atualmente; => uma das vrias verses disponveis de seu projeto. => outra verso... => alguma verso para testes
git branch
Perceba que o branch que possui um '*' na frente representa o branch corrente. Criamos um novo branch 'working' baseado no branch corrente, mantendo-se no branch atual(master):
Criando um novo branch 'teste' baseado em um outro branch 'working' que no o corrente, ainda mantendo-se no branch atual:
Outra forma de criar um branch e ao mesmo tempo tornar o novo como corrente usando:
At este ponto devemos ter as seguintes branchs: * master teste working Mudando para o branch working:
Lembrete: voc no pode apagar o branch corrente, alterne para um outro ento execute novamente o comando.
git checkout working echo "opa" > arq2.txt git add . git commit -a -m "alterando arq2.txt"
# mudando para o branch working # alterao propriamente dita # marca os arquivos para o prximo commit # 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:
Realizamos agora o merge das alteraes do branch working para o corrente (master):
cat arq2.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:
git log
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 ultimo 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:
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):
ou
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:
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.
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:
git fetch
Ou at mesmo:
git pull
Neste ltimo caso considerando que voc tem um branch master ele far o merge automaticamente.
git push
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.