Skip to content
Markenson edited this page Aug 21, 2014 · 2 revisions

Resumo da ferramenta GIT usada neste projeto

Visão Geral do Repositório do SIGA

https://drive.google.com/uc?id=0B3wJnNJHxdaiMjY4ODM3ZDUtZDY4Ni00M2QzLWJiMjUtNDIwYmM3NGQxNTkx&export=download&ext=img.png

Resumo sobre o Git

O texto a seguir é um resumo grosseiro do Git. Para uma compreensão mais apurada, vide as referências citadas no fim da seção.

O Git é um sistema de controle de versão, assim como é o CVS ou SVN. A diferença do Git é o fato de ser um sistema de controle de versão distribuído. Enquanto no CVS ou SVN temos apenas um servidor que centraliza o trabalho de diversos desenvolvedores, no Git, cada desenvolvedor tem um servidor, ou melhor, um repositório completo disponível em sua máquina local.

Qual é a vantagem de ter um repositório em minha máquina local?

Com um repositório local, o desenvolvedor pode controlar a versão do software que está sendo desenvolvido sem depender de uma conexão de rede com um servidor central. Só é necessário fazer uma conexão com o servidor remoto no fim do trabalho ou para atualizar o repositório, caso necessário.

Cenários Fictícios de uso do repositório distribuído

  1. Imagine um funcionário que estará ausente do trabalho mas poderá dar continuidade ao desenvolvimento de qualquer local usando o repositório contido em seu notebook (sem conexão de rede). Quando este retornar ao local de trabalho, o funcionário poderá sincronizar o seu trabalho com o repositório principal, localizado na rede interna da empresa.
  2. Imagine que você está trabalhando a bordo de um avião (sem conexão de rede). Com um repositório distribuído você poderia fazer um COMMIT da versão atual de um trabalho e tentar trabalhar em um projeto diferente. No outro projeto você poderia alterar, criar BRANCH, TAG, fazer COMMIT, etc. Além disso, você poderia trabalhar em diversos projetos de empresas diferentes e, ao fim da viagem, você sincronizaria o seu repositório local com os respectivos repositórios remotos.

Quais outras vantagens de um repositório distribuído além de evitar o acesso à rede?

  • Permite que o trabalho seja isolado por equipe podendo fazer uma hierarquia de responsabilidade no projeto. Nesse caso, cada equipe teria um repositório e os desenvolvedores despejariam seus trabalhos (repositório locais) no repositório da equipe. O gerente do projeto mesclaria o trabalho de cada equipe em um repositório principal.

  • Facilita a gestão de softwares com múltiplas versões (open-source, community, paga, por cliente, etc.)

  • Em caso de desastre com o repositório principal, qualquer repositório local (ou de equipes) pode ser usado para restaurar o backup.

Conceitos Básicos

  • INIT - Inicializar um repositório em um diretório na máquina local;

  • CLONE - Copiar um repositório existente para a máquina local;

  • STAGE - Área intermediária que é usada para agrupar o que deve ser enviado no próximo COMMIT a ser realizado;

  • COMMIT - Salvar o estado do seu projeto;

  • TAG - Dar um nome para o estado atual em que está o seu projeto. Dar um número de versão por exemplo.

  • FETCH - Fazer download dos dados de um repositório remoto

  • PUSH - Fazer upload dos dados de um repositório remoto

  • BRANCH - Iniciar um trabalho sem interferir no trabalho atual. Por exemplo, iniciar o desenvolvimento de alguma funcionalidade sem interferir no código principal que está em produção. É um ponteiro para o último commit.

  • MASTER - nome default do primeiro BRANCH que existe em todos os projetos.

  • HEAD - onde você está posicionado atualmente no repositório. Ou seja, aponta para um determinado COMMIT dentro de um BRANCH.

  • MERGE - Unir o código de dois BRANCHES

Usando o Git

O Git pode ser utilizado pelo prompt de comando ou diretamente da IDE Eclipse.

===Via prompt de comando===

  • Você deve fazer o download e instalar o git

  • Digite git no prompt de comando para ver a lista de comandos

  • Digite git help <NOME_DO_COMANDO> para ver o help de um comando.

    ===Via Eclipse===

  • Clique no menu Window>Show View>Other...

  • Localize e selecione Git Repositories

  • Clique no botão "OK"

  • Na janela VIEW que se abrir há os seguintes ícones no canto superior direito

  • Add an existing local Git Repository to this view - Exibe um repositório na View

  • Clone a Git Repository and add the clone to this view - Clona o repositório. (git clone)

  • Create a new Git Repository and add the clone to this view - Inicializa um repositório (git init).

    ====Sincronizar com o repositório LOCAL====

  • Clique com o botão direito em cima de uma projeto

  • Clique em "Team>Synchronize Workspace"

  • As diferenças são exibidas para todos os projetos (mesmo os não-selecionados)

    ====Commit====

  • Clique com o botão direito do mouse nos arquivos que serão enviados ao repositório

  • Clique em "Commit"

  • Aparecerá a janela "Commit Changes"

  • Digite o comentário do commit. Seja claro sobre o que está sendo enviado para o repositório, pois isso ajudará os outros desenvolvedores a entender o que foi alterado.

  • Confira e selecione os arquivos que serão enviados para o repositório.

  • Clique em "Commit"

OBS: Se o commit não estiver sendo realizado (aparentando falha) tente clicar na opção "Add to Git index" antes de clicar em "Commit" para colocar o arquivo na área STAGE. Normalmente, o eclipse faz isso automaticamente.

====Ignorando alterações no commit====
  • Se a alteração que está sendo enviada para o repositório deve ser desfeita, clique com o botão direito do mouse no arquivo desejado.

  • Clique em "Overwrite" para trazer do repositório para seu workspace.

    ====Update (aceitar alterações do repositório)====

    A maneira mais simples de fazer é fora na tela de sincronismo (Syncronize Workspace)

  • Clique com o botão direito do mouse em qualquer projeto (na view "Java", por exemplo.)

  • Clique em "Pull" (Isso fará um "Fetch" e, em seguida, um "Merge")

    ====Branch====

  • Para criar um branch clique com o botão direito do mouse em cima do projeto

  • Clique em "Team>Switch to>New Branch..."

  • Em "Source ref" selecione "refs/heads/master" para que o branch inicie com uma cópia de dados do branch MASTER

  • Em "Branch name:" digite o nome do branch Ex: seu nome, bug0001, etc.

  • Em "Pull strategy" selecione "None"

  • Marque "Checkout new branch" para que você comece a trabalhar imediatamente no branch criado.

  • Clique em Finish.

O que acontece nesse momento? Você começa a trabalhar em uma linha de desenvolvimento diferente de outras pessoas. Você pode fazer quaisquer modificações e utilizar todas as operações (commit, etc.) sem interferir no trabalho dos outros desenvolvedores. Quando você concluir o trabalho no branch que você criou, o seu trabalho pode ser transferido para a linha de desenvolvimento principal. Ou seja, disponibilizar o seu trabalho para os outros desenvolvedores através de um MERGE.

====Checkout====
  • Para alternar entre os branches, você realiza a operação CHECKOUT clicando com o botão direito do mouse em cima do projeto
  • Clique em "Team>Switch to>"
  • Clique no nome do branch desejado.

OBS: Isso equivale a executar o comando _git checkout <nome_do_branch>*

====Fetch (buscar código de um repositório remoto)====

Para buscar dados de um repositório remoto:

  • Clique com o botão direito do mouse sobre um projeto
  • Clique em "Team>Remote>Fetch From..."
  • Selecione um repositório configurado
  • Em "Source ref:" selecione o branch que você deseja buscar. *master [- Em "Destination ref:" selecione onde serão depositados os dados buscados. _refs/remotes/nome_do_repositorio/master`
  • Clique em "Add spec"
  • Clique em 'Finish"

OBS: Quando a operação é concluída, os dados são copiados do repositório remoto para sua máquina. Isso não sobrescreve os dados que você tem, apenas atualiza os dados da referência para o repositório remoto. Se você quiser atualizar o seu repositório, você terá que

  1. sincronizar seus dados com os da referência remota do repositório

  2. fazer um commit para seu repositório

    ====Push (enviar código para um repositório remoto)====

Para enviar o código do seu repositório para um repositório remoto:

  • Clique com o botão direito do mouse sobre um projeto
  • Clique em "Team>Remote>Push..."
  • Selecione um repositório configurado
  • Em "Source ref:" selecione o branch que você deseja enviar. master [branch](branch])`*
  • Em "Destination ref:" selecione onde serão depositados os dados no repositório remoto. *refs/remotes/_nome_do_repositorio/master_
  • Clique em "Add spec"
  • Clique em 'Finish"

OBS: Os dados sobrescreverão o repositório e você não terá uma janela de comparação amistosa (se você der dois cliques no arquivo, ao fundo você verá a diferença entre os arquivos no formato do programa DIFF). Se quiser saber o que está diferente entre os repositório, use a comparação do eclipse ou "Team>Advanced>Synchronize, mas ATENÇÃO, se você der um COMMIT nessa tela de sincronização, você não enviará para o repositório remoto, e sim para o repositório LOCAL. Apenas o PUSH envia para o repositório remoto.

Referências

Clone this wiki locally