Skip to content

Instantly share code, notes, and snippets.

@vmattos
Last active September 23, 2017 08:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vmattos/d2ce15db30be16297d0eab9220468af2 to your computer and use it in GitHub Desktop.
Save vmattos/d2ce15db30be16297d0eab9220468af2 to your computer and use it in GitHub Desktop.

Git

Vamos falar de um problema comum agora. Você provavelmente já viu isso acontecendo em algum projeto:

script.js
script_final.js
script_FINAL_2.js
script_FINAL_AGORA_VAI.js

Usamos esses nomes arbitrários para versionar esses arquivos. Mas fazer isso manualmente não é uma tarefa simples. Para resolver esse problema, podemos usar um Sistema de controle de versões, como o Git.

Um Sistema de controle de versões é capaz de guardar os estados de todos os arquivos de um projeto, permitindo que façamos alterações sem medo de perder nada, já que podemos rever e recuperar o conteúdo dos arquivos de versões antigas

Iniciando com git

Vamos ver agora como podemos usar o Git para melhorarmos nossa eficiência

Instalando git

https://www.atlassian.com/git/tutorials/install-git

(Windows, Linux e Mac)

Iniciando o git em um projeto

A primeira coisa que precisamos fazer para começar a usar o git é inicia-lo em um projeto Para isso, basta invocar o seguinte comando no diretório raiz do projeto

git init

Pronto, com esse comando incializamos o diretório do nosso projeto como um repositório Git.

Ao criar um repositório, o git ainda não está fazendo tracking dos nossos arquivos. Para adiciona-los ao sistemoa de versionamento, precisamos usar o seguinte comando:

git add .

Agora precisamos validar nossa operação:

git commit -m "Iniciando projeto"

Não se preocupe. Falaremos mais sobre esse comando a seguir

O fluxo de trabalho com git

Quando queremos guardar uma nova versão do nosso projeto (por exemplo, ao alterarmos um arquivo), precisamos fazer um commit. Para realizarmos um commit, devemos seguir o seguinte fluxo:

Depois de fazermos algumas alterações no código, precisamos dizer que fizemos mudanças

Primeiro vamos verificar os arquivos que alteramos:

git status

Aqui podemos verificar uma lista de arquivos que foram modificados, mas estão como unstaged. Precisamos deixar esses arquivos como staged. Isto é, dizer ao git que queremos incluílos no commit

Para isso, usaremos o comando

git add script.js

Podemos usar também git add ., para adicionar todos os arquivos listados como unstaged. Utilize o comando git status novamente para verificar os arquivos que estão staged. Isto é, pronto para entrarem no commit

Agora precisamos encerrar o fluxo criando o commit:

git commit -m "Adiciona nossa primeira funcionalidade"

Pereceba que podemos usar a opção -m para adicionar uma mensagem ao commit

Podemos ver um log de commits com o comando

git log

Usando git para trabalhar em equipe

Nós já aprendemos a usar o git para organizar o versionamento do nosso projeto. Mas e agora, para trabalharmos em equipe? Como faremos para compartilhar código com nossos colegas?

Até agora, utilizamos o git em um repositório local, ou seja, em nosso computador. Uma funcionalidade muito legal do git é a capacidade de sincronizar com um repositório remoto.

Assim, cada colega de equipe pode sincronizar com o mesmo repositório remoto, e todos podem trabalhar na versão mais atualizada do projeto

Github

Usaremos o Github como repositório remoto.

Para isso, primeiro faça uma conta (É totalmente gratuito)

Agora crie um novo repositório (no sinal de + na barra de cima). Use ws-trama como nome do repositório, e clique em Create repository

Pronto! Seu repositório remoto foi criado. Agora basta sincronizarmos o repositório local (da sua máquina) com o remoto (do github)

Para isso, utilize o comando

git remote add origin git@github.com:seuusuario/ws-trama.git

Preste atenção no nome do usuário na url

Isso diz que estamos adicionando um novo repositório remoto, e apelidando-o de origin

Lembra dos commits que fizemos anteriormente? Você pode ve-los com git log

Precisamos jogar esses commits no repositório remoto agora! Para isso, usaremos o seguinte comando

git push -u origin master

Isso diz que queremos jogar todos os commits da nossa branch principal do git (a que estamos trabalhando) no repositório origin (o repositório criado no Github)

Atualize a página do repositório no Github, e você poderá ver seu código lá!

Ok, mas como faço para adicionar outras pessoas para trabalhar comigo no meu projeto?

Clique na aba Settings, e depois em Collaborators. Nessa tela, você pode adicionar novos colaboradores ao projeto. Eles terão acesso para fazer

Buscando alterações feitas no Github

Podemos fazer commits também pela interface do Github:

Na tela do Github, abra um arquivo, e depois clique em Edit file (O símbolo de um lápis). Altere uma linha desse arquivo, e clique em Commit changes

Mas, como alteramos o arquivo diretamente na interface do Github, não temos o novo conteúdo em nosso repositório local!

Para isso, precisaremos utilizar o comando

git pull

Pronto! Acabmos de buscar as alterações que estavam no Github para nosso repositório local!

Resolvendo conflitos

Abra novamente um arquivo pela interface do Github, e edite uma linha.

Agora vá no seu repositório local, e antes de realizar o pull, altere a mesma linha, com um conteúdo diferente

Exemplo:

Github:

<h1 id="main_title">

Local:

<h1 id="header_tital">

Não esqueca de fazer o commit no repositório local:

git add .
git commit -m "Atualiza id do h1"

Agora tente fazer o push do seu código com git push

Você deverá ver a seguinte mensagem:

! [rejected]  master -> master (fetch first)

Opa! Algo errado aconteceu?

Isso significa que o git rejeitou seu push, devido a um conflito. Esse conflito ocorreu quando editamos a mesma linha no repositório remoto e no local, com conteúdos diferentes

Para resolver esse problema, primeiro precisamos buscar as atualizações que estão no Github com git pull

A seguinte mensagem deverá aparecer:

CONFLICT (content): Merge conflict in index.html

Isso era esperado. Nós causamos um conflito quando editamos o h1

Abra o arquivo com conflito, e você deverá ver o seguinte conteúdo:

<<<<<<< HEAD
<h1 id="header_title" class="centralized">
||||||| merged common ancestors
<h1 id="title" class="centralized">
=======
<h1 id="main_title" class="centralized">
>>>>>>> 56c08d340958985e4b3ea182280b96804b30244e

Não se assuste! O que temos aí são 3 versões diferentes da mesma linha

<<<<<<< HEAD
<h1 id="header_title" class="centralized">

Indica a versão que criamos em nosso repositório local

||||||| merged common ancestors
<h1 id="title" class="centralized">
=======

Essa é uma representação de como era o arquivo antes do conflito ocorrer

<h1 id="main_title" class="centralized">
>>>>>>> 56c08d340958985e4b3ea182280b96804b30244e

Esse bloco representa o arquivo que está no repositório remoto

Pronto, agora só precisamos resolver o conflito, e commitar o arquivo novamente

Para isso, deixaremos apenas a seguinte linha:

<h1 id="header_title" class="centralized">

Agora precisamos deixar essa alteração como staged, e criar um commit

git add .
git commit

Perceba que não utilizamos a opção -m dessa vez, porque o git já cria uma mensagem automatica em casos de conflito, para indicar o que aconteceu naquele ponto

Agora podemos subir a resolução desse conflito para o github com git push

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment