-
Notifications
You must be signed in to change notification settings - Fork 46
Git
Antes de utilizarmos o Git, é fundamental instalá-lo. Para isso, você deve verificar seu sistema operacional, que é aonde você irá realizar a instalação de forma apropriada e mãos à obra!
Abaixo, se encontra tópicos relacionados a maneira de instalá-lo em diferentes sistemas operacionais.
Acesse a seguinte URL, faça o download e instale a última versão disponível: http://msysgit.github.io/
A instalação é bastante simples. Escolha as opções padrão. Serão instalados alguns programas, sendo o mais importante o Git Bash, que permite que o Git seja executado pela linha de comando no Windows.
Dê duplo clique no ícone do Git Bash e será aberto um terminal, com o seguinte prompt na linha de comando:
$
Esse prompt será seu amigo a partir de agora. Não tenha medo! Sempre que falarmos de terminal, estaremos falando do Git Bash.
Baixe a última versão do instalador gráfico do Git para Mac OS X a partir do link: https://code.google.com/p/git-osx-installer/downloads
Abra um terminal e prepare-se para utilizar o Git!
Para instalar o Git no Ubuntu, ou em uma outra distribuição baseada em Debian, execute em um terminal:
$ sudo apt-get install git
No Fedora, utilize:
$ sudo yum install git
Para as demais distribuições do Linux, veja o comando em: http://git-scm.com/download/linux
É importante nos identificarmos para o Git, informando nosso nome e e-mail. Em um terminal, execute os comandos a seguir:
$ git config --global user.name "Fulano da Silva"
$ git config --global user.email [email protected]
Claro, utilize seu nome e e-mail!
O primeiro passo para trabalhar com Git é criar um repositório. Um repositório é um diretório de arquivos versionados. Para criar um repositório, basta rodar o comando:
$ git init NOME_DO_REPOSITORIO
Exemplo:
$ git init games
cria a pasta chamada games, que é um repositório Git.
Do ponto do vista do Git, existem quatro estados no qual um determinado arquivo pode estar.
-
Commited: O arquivo está sob controle de versão e não apresenta nenhuma modificação.
-
Commit candidate: Caso você crie um conjunto de modificações (commit), esses serão os arquivos incluídos.
-
Modified: Arquivos que foram modificados.
-
Untracked: Arquivos novos, que ainda não estão no controle de versão.
Para mudar um arquivo de untracked ou modified para Commit candidate, você usa o comando git add CAMINHO. O git add é inteligente, então se você passar um caminho parcial para ele, ele muda o estado de todos os arquivos que contém esse caminho parcial.
Exemplo:
-
$ git add .
mudaria o estado de todos os arquivos a partir do diretório atual. -
$ git add arquivo.txt
mudaria o estado do arquivo arquivo.txt -
$ git add pasta
mudaria o estado do arquivo pasta/arq1.txt e do pasta/arq2.txt, mas não mudaria do outra_pasta/arq1.txt
Agora que você já sabe como selecionar as modificações que quer incluir em um pacote de modificações (um commit), chegou a hora de aprender como gerar esse pacote.
O comando utilizado para criar um commit em git é git commit. Com esse comando, todos os arquivos que estiverem marcados como Commit candidate serão incluídos no commit. Se você também quiser incluir os arquivos que estão marcados como modified, você pode incluir a flag -a.
Uma coisa muito importante de qualquer commit é uma mensagem que explique o que significa aquele commit. Para isso, você pode passar a opção -m "mensagem de commit". Caso você não passe, o git vai abrir um editor de texto para que você digite a mensagem.
Exemplo:
$ git commit -m "commit"
cria um commit com todos os Commit candidate e a mensagem commit
$ git commit -a -m "segundo commit"
cria um commit com os arquivos marcados como Commit candidate e os modified e junta com a mensagem segundo commit
Uma outra possibilidade para commit utiliza da flag -s. Essa flag permite que o mesmo commit tenho vários autores, ou seja, você e outro desenvolvedor podem coolaborar para um mesmo fim e commitarem "juntos".
É importante lembrar que esse tipo de commit leva em consideração o usuário configurado no git como principal e dá status de coolaborador para os demais.
Para usar essa flag basta digitar, git commit -s.
Com Enter pressionado você será redirecioado para seu editor de texto padrão, visualizando algo semelhante:
Na primeira linha insira um Título para o commit.
Na segunda linha descreva um pouco melhor as alterações.
Para adicionar os coautores, basta copiar a linha, Signed-off-by e colar na linha abiaxo mudando os dados necessários.
Feito isso basta salvar o arquivo e seu commit será efetuado com sucesso.
Um problema que se pode identificar ainda ao se parear utilizando apenas um computador é o de que os commits só vão para o usuário configurado, e logo nos gráficos referentes aos commits, só esse usuário configurado - geralmente o dono do computado - recebe commits. Esse problema pode ser solucionado reconfigurando os usuário registrado na máquina como dito em Configurações básicas, o que pode ser um overhead bem grande, ou apenas utilizando a tag --author
conforme demonstrado abaixo:
git commit --author="Author Name [email protected]"
- Author Name: Nome do autor registrado no git
- [email protected]: Email do autor registrado no git
Ao se utilizar essa tag, o commit irá contar agora para o author colocado, conseguindo driblar então o sistema de ter que reconfigurar o usuário.
Para enviar os commits feitos para o repositório desejado, utiliza-se o comando push. Este comando tem a seguinte assinatura: git push local_remote_name remote_branch_name, onde local_remote_name indica o nome do repositório local em que o repositório git se encontra e remote_branch_name indica o nome da branch em que deve ser enviado o conjunto de commits.
É importante saber utilizar da melhor maneira possível as branches do git. Branches servem para você trabalhar em uma determinada funcionalidade, dependendo da política de configuração implementada no seu projeto. O ideal de trabalhar com branches é que você possa trabalhar sem interferir em funcionalidades que já estão implementadas.
É sugerido que no seu projeto seja definida uma branch que contenha todo o conteúdo devidamente testado e aprovado conforme os critérios de aceitação. Essa branch é criada a partir do merge de outras e compõe o produto mais atualizado nesse repositório.
Após vários merges e rebases de outras branchs a branch dev é a mais atual do projeto. Ainda faltam o caso de uso X para que o produto possa ser devidamente entregue, os desenvolvedores precisam trabalhar em paralelo para implementar todas as funcionalidades desse caso de uso. Sabendo que a dev está atualizada os desenvolvedores tomam a seguinte decisão:
- Todos, de seus computadores, mudam para
dev
:git checkout dev
- A partir da
dev
criam novas branches com nomes significativos das funcionalidades que implementarão:git checkout -b funcionalidade_x
A partir de agora os desenvolvedores podem trabalhar separadamente na implementação das funcionalidades de casos de uso sem problemas, de forma que minimizem os riscos de conflitos durante o projeto, pois as novas branches tem uma origem em comum.
Caso você esteja trabalhando em uma parte do seu projeto que não está fluindo muito bem e não deseja fazer um commit disso para trabalhar em outra branch por um tempo, o que fazer? Dá para resolver isso com um comando bem útil: git stash>. Com esse comando os arquivos monitorados que foram modificados serão salvos em uma pilha de modificação não finalizadas que você pode recuperar e finalizar depois. Você pode criar uma lista de stashes e visualizá-los depois com o comando git stash list.
Você pode aplicar novamente o stash feito com o comando git stash apply
. Porém com esse comando o Git identifica apenas o útimo stash feito, para selecionar um stash específico utilize o comando : git stash apply stash@{número do stash}
Terminado o trabalho de implementação das funcionalidades do Caso de Uso X os desenvolvedores desejam juntar suas alterações para, finalmente, terminarem o caso de uso. Como foi dito acima as branches das funcionalidades tem uma origem em comum, dev, o que torna a mescla mais fácil.
O merge é a mescla do conteúdo de duas branches. Para realizar tal operação tenha em mente que:
- Você vai fazer o merge da branch passada como parâmetro na sua branch ATUAL
Os desenvolvedores resolveram fazer o merge a branch funcionalidade_a
na funcionalidade_b
, para tal eles:
- Mudaram para a branch
funcionalidade_b
.git checkout funcionalidade_b
; On branch funcionalidade_b
- Realizaram o merge de a --> b.
git merge funcionalidade_a
Isso gerou um commit de merge. Isso pode gerar um pouco de poluição no log de commits.
O rebase é uma alternativa ao merge. Também mesclando o conteúdo de duas branches, mas o rebase insere os commits de modo cronológico no histórico de commits. O rebase também não deixa uma mensagem de commit, uma das vantagens de usar-se o rebase.
No uso do rebase você adicionará os commits da branch funcionalidade_a
na funcionalidade_b
da seguinte maneira:
- Vá para a branch
funcionalidade_a
- execute:
git rebase funcionalidade_b
isso adicionara os commits que estão em a
mas não estão em b
em funcionalidade_b
de forma que você poderá realizar um fast-forward merge
em b
git checkout funcionalidade_b
git merge funcionalidade_a
Para aprender mais sobre git e exercitar, acesse o [Codecademy](https://www.codecademy.com/pt-BR/learn/learn-git).
Para exercitar e fixar os conhecimentos de Git, utilize a plataforma [Learn Git Branching](http://learngitbranching.js.org/)
Para treinar Git de maneira interativa, um otimo estilo de jogo [Aprenda Git](http://aprenda.vidageek.net/aprenda/git) ou [Git Real Code School](http://gitreal.codeschool.com/)
EPS/MDS - FGA/UnB
Métodos de Desenvolvimento de Software
Gestão de Portfólio e Projetos de Software
RUP (Rational Unified Process)
Fase Elaboração (RUP) Planejamento(PMBOK)
Fase de Construção (RUP), Execução/Monitoramente e Controle (PMBOK)
Fase Transição (RUP), Finalização (PMBOK)
Acceptance Test Driven Development (ATDD)
Integração Contínua Deploy Contínuo
Automação de Ambiente com Docker
Orquestração de Containers com Docker Compose
Automação de Ambiente com Vagrant
Deploy Contínuo na Plataforma Heroku
Integração Contínua com Travis CI
Disponibilizando a Aplicação com o Proxy Reverso Nginx
Tutorial de Instalação do Ionic
Android Integração contínua com Circle CI
Configuração de Ambiente para React Native
Tutorial Instalação Ruby on Rails
Teste Automatizado Cucumber JS
Teste Automatizado Cucumber Rails
Testando AngularJS com Jasmine
Teste Automatizado com Selenium IDE
Configurar o SonarCloud para um projeto usando Jest
Configurar o SonarCloud para um projeto usando Pytest
Configurar o SonarCloud para um projeto usando Mocha e Istambul