Controle de Versão com
the Global Information Tracker
GIT
Controle de Versão
O controle de versão é um sistema que
registra as alterações realizadas em um
arquivo ou conjunto de arquivos ao longo
do tempo.
Sistemas de Controle de Versão local
● Copiar os arquivos para outro diretório local.
● É fácil esquecer que você está no diretório e,
acidentalmente, sobreescreve para o arquivo errado
ou copiar arquivos quando você não quis. Para lidar
com este problema, há muito tempo os programadores
desenvolveram VCSs (Version Control System's) locais que
tiveram um simples banco de dados que guarda todas
as alterações em arquivos sob controle de revisão.
Sistemas de Controle de Versão local
Sistemas de Controle de Versão centralizados
Um único servidor que contém todos os arquivos versionados.
Pode oferecer algumas vantagens:
● Todo mundo sabe até certo ponto o que todos fazem no projeto.
● Os administradores têm um controle maior sobre quem pode fazer o que no
projeto.
No entanto, esta configuração também tem algumas desvantagens:
● Se este servidor cair por uma hora, ninguém pode colaborar ou salvar as
alterações versionadas durante esse período.
● Se o servidor corromper seu HD e não houverem backups, absolutamente
tudo será perdido inclusive todo o histórico do projeto exceto nas máquinas
locais.
Sistemas de Controle de Versão centralizados
Sistemas de controle de versão distribuído
● Os clientes são idênticos no repositório.
● Assim, se qualquer servidor morrer, qualquer um dos
repositórios de clientes podem ser copiados de volta para o
servidor para restaurá-lo.
● Cada check-out é um backup completo de todos os dados.
● Além disso, é possível trabalhar com vários repositórios
remotos, de modo que você pode colaborar com diferentes
grupos de pessoas de maneiras diferentes ao mesmo tempo
dentro do mesmo projeto.
● Isto permite-lhe configurar vários tipos de fluxos de trabalho
que não são possíveis em sistemas centralizados, como
modelos hierárquicos.
Sistemas de controle de versão distribuído
● Sistema de controle de versão ditribuído.
○ Consulta toda a história do projeto desde o primeiro commit
○ Obter versões mais antigas do projeto
● Open Source
● Multiplataforma
● Rápido e eficiente
● Comessou a ser desenvolvido em 2005 por Linux Torvalds para controle de versão do Kernel do linux.
○ O sistema de versionamento inicial que antes era gratuíto passou a ser cobrado, daí surgiu a
necessidade de se desenvolver um sistema de versionamento.
● Pela linha de comando a produtividade pode ser maior, mas há opções de ferramentas gráficas:
○ RabbitVCS Git
○ Meld
○ Em IDE's como o netbeans
Git
http://git-scm.com/
Linux
○ Git (MSysGit)
○ TortoiseGit
○ ??????
Windows
Mac
Fluxo de trabalho
Seus repositórios locais consitem em três "árvores" mantidas pelo git. a primeira
delas é sua Working Directory que contém os arquivos vigentes. A segunda Index
que funciona como uma área temporária e finalmente a Head que apontam para a
última confirmação que você fez.
Branches (Ramos)
Branches são utilizados para desenvolver funcionalidades isoladas umas das
outras. O ramo master é o ramo padrão quando se criar um novo repositório.
Pode-se usar outros ramos para desenvolver e mesclá-los ao master após a
conclusão.
Branches (Ramos)
Há a possibilidade de se desenvolver branches locais e trabalhar neles de acordo
com as suas necessidades.
Criando um novo branch:
retornando para o branch master:
removendo um branch:
Um branch não está disponível a outros a menos que o envie para o repositório
remoto:
$ git checkout -b nome-do-branch
$ git checkout master
$ git branch -d nome-do-branch
$ git push origin <branch>
Sobrescrever alterações locais
Tags (Rótulos)
É recomendado criar rótulos para releases de software, pelo git é possível através
do comando: $ git tag 1.0.0
Com o comando: $ git checkout --<nome arquivo> é possivel sobrescrever as
alterações locais. Dessa forma, será substituído as alterações na árvore de trabalho
com o conteúdo mais recente no Head. Alterações adicionadas no index, bem como
novos arquivos serão mantidos.
Remover todas as alterações locais e recuperar o histórico mais recente do servidor
é possível atráves dos comandos:
$ git fetch origin
$ git reset --hard origin/master
Comandos Básicos
1. init
○ Cria um novo repositório do git
2. clone
○ Cria uma cópia de trabalho em um repositório local
○ Se você não clonou um repositório existente e deseja conectá-lo a um servidor remoto o
comando será git remote add origin <servidor>. Agora você será capaz de enviar suas
alterações para o servidor remoto.
3. add
○ Adiciona o que fará parte do próximo commit
4. commit [-m "Mensagem obrigatório"]
○ Envia os arquivos adicionados para o Head, mas ainda não para o repositório remoto
5. push
○ Suas alterações agora estão no Head da sua cópia de trabalho local, após realizado o commit. O
comando push serve para enviá-las para o repositório remoto, o comando completo é $ git push
origin master. "master" pode ser substituída para qualquer ramificação desejada.
6. pull
○ Atualizar o repositório local.
7. merge <branch>
○ Mesclar alterações remotas, um outro ramo ao seu ramo ativo. O git tenta auto-mesclar as
alterações. Infelizmente, isso nem sempre é possível e resulta em conflitos. Os Conflitos devem
ser editados manualmente, depois de alterados é necessário marcá-los como mesclados $ git
add <arquivo>. Há a possibilidade de pré-visualizar os arquivos usando $ git diff <ramo
origem> <ramo destino>
Git Hub / Bitbucket
https://www.github.com/ | https://www.bitbucket.org
● Git Hub != Git
○ Git hub é um serviço público ou privado, gratuíto ou pago, que permite armazenar repositórios via
internet e utiliza o git como sistema de versionamento.
● Bitbucket
○ Serviço gratuíto que permite armazenar repositórios privados via internet.
O que é?
É um sistema de controle de versão distribuído.
Quando aplicar?
Em projetos, de grande ou pequeno porte, open source ou não, em que os arquivos
necessitam de controle de versão.
Como utilizar?
Basicamente conforme demonstrado na apresentação.
Recapitulando...
Bibliografia
1. Pro Git : Everything you need to know about the git distributed source control toll - Scott Chacon -
Appress
2. Version Control With Git - Jon Loelinger - O'Reilly
3. Controlo de Versões Distribuído com Git - http://www.slideshare.net/NetPonto/controlo-de-versao-
distribuido-com-git - Caio Proiete
4. git guia prático - http://rogerdudler.github.com/git-guide/index.pt_BR.html - Roger Dudler

Controle de Versão Distribuído com Git básico

  • 1.
    Controle de Versãocom the Global Information Tracker GIT
  • 2.
    Controle de Versão Ocontrole de versão é um sistema que registra as alterações realizadas em um arquivo ou conjunto de arquivos ao longo do tempo.
  • 3.
    Sistemas de Controlede Versão local ● Copiar os arquivos para outro diretório local. ● É fácil esquecer que você está no diretório e, acidentalmente, sobreescreve para o arquivo errado ou copiar arquivos quando você não quis. Para lidar com este problema, há muito tempo os programadores desenvolveram VCSs (Version Control System's) locais que tiveram um simples banco de dados que guarda todas as alterações em arquivos sob controle de revisão.
  • 4.
    Sistemas de Controlede Versão local
  • 5.
    Sistemas de Controlede Versão centralizados Um único servidor que contém todos os arquivos versionados. Pode oferecer algumas vantagens: ● Todo mundo sabe até certo ponto o que todos fazem no projeto. ● Os administradores têm um controle maior sobre quem pode fazer o que no projeto. No entanto, esta configuração também tem algumas desvantagens: ● Se este servidor cair por uma hora, ninguém pode colaborar ou salvar as alterações versionadas durante esse período. ● Se o servidor corromper seu HD e não houverem backups, absolutamente tudo será perdido inclusive todo o histórico do projeto exceto nas máquinas locais.
  • 6.
    Sistemas de Controlede Versão centralizados
  • 7.
    Sistemas de controlede versão distribuído ● Os clientes são idênticos no repositório. ● Assim, se qualquer servidor morrer, qualquer um dos repositórios de clientes podem ser copiados de volta para o servidor para restaurá-lo. ● Cada check-out é um backup completo de todos os dados. ● Além disso, é possível trabalhar com vários repositórios remotos, de modo que você pode colaborar com diferentes grupos de pessoas de maneiras diferentes ao mesmo tempo dentro do mesmo projeto. ● Isto permite-lhe configurar vários tipos de fluxos de trabalho que não são possíveis em sistemas centralizados, como modelos hierárquicos.
  • 8.
    Sistemas de controlede versão distribuído
  • 9.
    ● Sistema decontrole de versão ditribuído. ○ Consulta toda a história do projeto desde o primeiro commit ○ Obter versões mais antigas do projeto ● Open Source ● Multiplataforma ● Rápido e eficiente ● Comessou a ser desenvolvido em 2005 por Linux Torvalds para controle de versão do Kernel do linux. ○ O sistema de versionamento inicial que antes era gratuíto passou a ser cobrado, daí surgiu a necessidade de se desenvolver um sistema de versionamento. ● Pela linha de comando a produtividade pode ser maior, mas há opções de ferramentas gráficas: ○ RabbitVCS Git ○ Meld ○ Em IDE's como o netbeans Git http://git-scm.com/ Linux ○ Git (MSysGit) ○ TortoiseGit ○ ?????? Windows Mac
  • 10.
    Fluxo de trabalho Seusrepositórios locais consitem em três "árvores" mantidas pelo git. a primeira delas é sua Working Directory que contém os arquivos vigentes. A segunda Index que funciona como uma área temporária e finalmente a Head que apontam para a última confirmação que você fez.
  • 11.
    Branches (Ramos) Branches sãoutilizados para desenvolver funcionalidades isoladas umas das outras. O ramo master é o ramo padrão quando se criar um novo repositório. Pode-se usar outros ramos para desenvolver e mesclá-los ao master após a conclusão.
  • 12.
    Branches (Ramos) Há apossibilidade de se desenvolver branches locais e trabalhar neles de acordo com as suas necessidades. Criando um novo branch: retornando para o branch master: removendo um branch: Um branch não está disponível a outros a menos que o envie para o repositório remoto: $ git checkout -b nome-do-branch $ git checkout master $ git branch -d nome-do-branch $ git push origin <branch>
  • 13.
    Sobrescrever alterações locais Tags(Rótulos) É recomendado criar rótulos para releases de software, pelo git é possível através do comando: $ git tag 1.0.0 Com o comando: $ git checkout --<nome arquivo> é possivel sobrescrever as alterações locais. Dessa forma, será substituído as alterações na árvore de trabalho com o conteúdo mais recente no Head. Alterações adicionadas no index, bem como novos arquivos serão mantidos. Remover todas as alterações locais e recuperar o histórico mais recente do servidor é possível atráves dos comandos: $ git fetch origin $ git reset --hard origin/master
  • 14.
    Comandos Básicos 1. init ○Cria um novo repositório do git 2. clone ○ Cria uma cópia de trabalho em um repositório local ○ Se você não clonou um repositório existente e deseja conectá-lo a um servidor remoto o comando será git remote add origin <servidor>. Agora você será capaz de enviar suas alterações para o servidor remoto. 3. add ○ Adiciona o que fará parte do próximo commit 4. commit [-m "Mensagem obrigatório"] ○ Envia os arquivos adicionados para o Head, mas ainda não para o repositório remoto 5. push ○ Suas alterações agora estão no Head da sua cópia de trabalho local, após realizado o commit. O comando push serve para enviá-las para o repositório remoto, o comando completo é $ git push origin master. "master" pode ser substituída para qualquer ramificação desejada. 6. pull ○ Atualizar o repositório local. 7. merge <branch> ○ Mesclar alterações remotas, um outro ramo ao seu ramo ativo. O git tenta auto-mesclar as alterações. Infelizmente, isso nem sempre é possível e resulta em conflitos. Os Conflitos devem ser editados manualmente, depois de alterados é necessário marcá-los como mesclados $ git add <arquivo>. Há a possibilidade de pré-visualizar os arquivos usando $ git diff <ramo origem> <ramo destino>
  • 15.
    Git Hub /Bitbucket https://www.github.com/ | https://www.bitbucket.org ● Git Hub != Git ○ Git hub é um serviço público ou privado, gratuíto ou pago, que permite armazenar repositórios via internet e utiliza o git como sistema de versionamento. ● Bitbucket ○ Serviço gratuíto que permite armazenar repositórios privados via internet.
  • 16.
    O que é? Éum sistema de controle de versão distribuído. Quando aplicar? Em projetos, de grande ou pequeno porte, open source ou não, em que os arquivos necessitam de controle de versão. Como utilizar? Basicamente conforme demonstrado na apresentação. Recapitulando...
  • 17.
    Bibliografia 1. Pro Git: Everything you need to know about the git distributed source control toll - Scott Chacon - Appress 2. Version Control With Git - Jon Loelinger - O'Reilly 3. Controlo de Versões Distribuído com Git - http://www.slideshare.net/NetPonto/controlo-de-versao- distribuido-com-git - Caio Proiete 4. git guia prático - http://rogerdudler.github.com/git-guide/index.pt_BR.html - Roger Dudler