twitterfacebookgoogle pluslinkedinrss feedemail

sexta-feira, 23 de outubro de 2015

Git - GitHub - Controle de Versão - Branchs

Este é o quarto artigo sobre o Git.
Para ler o primeiro artigo, com comandos essenciais. Clique aqui.
Para ler o segundo artigo, com comandos para servidores remotos. Clique aqui.
Para ler o terceiro artigo, com comandos para fazer Tags/Releases. Clique aqui.

Branch ou Ramificações é um conceito muito interessante no Git.
Nos sistemas CVS comuns no mercado, fazer um Branch é um processo trabalhoso e demorado, mas no Git este processo é bem rápido e fácil.
Somente é feito um apontamento para um snapshot do master, com isso, não é necessário copiar todos os arquivos como nos outros sistemas de controle de versão.

Criando um Branch.
Para criar um novo Branch, utilizamos o comando abaixo.
 $ git branch Teste  
 $ git branch  
  Teste  
 * master  
Depois digitamos o comando git branch, onde exibe todos branchs. Repare que o *, na frente do master, exibe qual branch estamos. Atualmente estamos trabalhando no Master. No branch que estamos trabalhando é chamado de Head.
Agora vamos mudar para o Branch que criamos, através do comando checkout.
$ git checkout Teste  
 Switched to branch 'Teste'  
$ git branch  
 * Teste  
  master  
Agora identificamos que alteramos para o branch Teste. Repare no * na frente do Branch Teste.
Alterei um arquivo no branch Teste e o mesmo arquivo no Master, para simular um conflito.
Sempre que for alterar de branch, verifique se fez commit das suas alterações.
 $ git commit -a -m "Testando Branch #1"  
Depois fazer o checkout para o master.
 $ git checkout master  
 Switched to branch 'master'  
 Your branch is ahead of 'origin/master' by 1 commit.  
  (use "git push" to publish your local commits)  
Agora usamos o comando git merge, para fazer o merge dos arquivos. No caso, irá ocorrer um conflito, conforme abaixo.
 $ git merge Teste  
 Auto-merging TesteStoryBoard/Base.lproj/Main.storyboard  
 CONFLICT (content): Merge conflict in TesteStoryBoard/Base.lproj/Main.storyboard  
 Automatic merge failed; fix conflicts and then commit the result.  
 MacMiniRomero:TesteStoryBoard douglasromero$ git status  
 On branch master  
 Your branch is ahead of 'origin/master' by 1 commit.  
  (use "git push" to publish your local commits)  
 You have unmerged paths.  
  (fix conflicts and run "git commit")  
 Unmerged paths:  
  (use "git add <file>..." to mark resolution)  
      both modified:  TesteStoryBoard/Base.lproj/Main.storyboard  
 no changes added to commit (use "git add" and/or "git commit -a")  
Resolvendo Conflitos.
Utilizamos a ferramenta mergetool. Na versão que estou utilizando, no MAC OSX, defini para utilizar a ferramenta externa opendiff, que veem com o mac.
 $ git mergetool --tool=opendiff   
Abrirá uma tela com os arquivos para você realizar o merge manual.
Depois de resolver os conflitos, conseguirá realizar o commit.

Deletando um Branch.
Para deletar um branch, utilizamos o comando branch com o parâmetro -D.
$ git branch -D teste  
 Deleted branch teste (was 4c9d7fd).  

Listagem de Branch.
Para ver o último commit em cada branch, interessante para saber os status de cada um.
 $ git branch -v  
  NorthWind 4c9d7fd Revert "Segunda Parte do Tutorial"  
  SouthWind 4c9d7fd Revert "Segunda Parte do Tutorial"  
 * master  4c9d7fd [ahead 1] Revert "Segunda Parte do Tutorial"  
Listar somente os branchs que sofreram merge.
 $ git branch --merged  
  NorthWind  
 * master  
Somente os branchs que não sofreram merge.
 $ git branch --no-merged  
  SouthWind  

Branch Remotos.
Quando fazemos o clone de um branch, cria automaticamente o server remoto como sendo origin.
Para referenciar branchs remotos, utilizamos: remote/branch
Veja o exemplo abaixo de um checkout em um server remoto.
$ git status origin/master  
 On branch master  
 Your branch is ahead of 'origin/master' by 2 commits.  
  (use "git push" to publish your local commits)  
 nothing to commit, working directory clean  
$ git checkout origin/master  
 Note: checking out 'origin/master'.  
 You are in 'detached HEAD' state. You can look around, make experimental  
 changes and commit them, and you can discard any commits you make in this  
 state without impacting any branches by performing another checkout.  
 If you want to create a new branch to retain commits you create, you may  
 do so (now or later) by using -b with the checkout command again. Example:  
  git checkout -b <new-branch-name>  
 HEAD is now at 02215fd... Inserindo arquivo de ignore.#  
$ git log --oneline  
 02215fd Inserindo arquivo de ignore.#  
 d28226b Update TesteStoryBoardTests.m  
 81c3aa1 Merge branch 'master' of https://github.com/dsromerobr/TesteStoryBoard  
 55f8e2a Deletando arquivos de configuração de usuário. Ok.  
 aa3945a Commit com alterações do exemplo de GIT. Inclusão de uma property na primeira tela.  
 afb0c3e Create README.md  
 2128d14 Segunda Parte do Tutorial  
 7eda703 Initial Commit  
$ git branch  
 * (HEAD detached at origin/master)  
  NorthWind  
  SouthWind  
  master  

Para sincronizar o seu branch com o remoto, utilizamos o seguinte comando:
 $ git fetch origin  

Criando Servidor Remoto.
Também é possível adicionar outro servidor remoto e fazer a referencia para acessar ele, para adicionar outro servidor remoto:
 $ git remote add testeremote https://github.com/dsromerobr/TesteStoryBoard.git  

Verificar os servidores remotos.
 $ git remote -v  
 origin     https://github.com/dsromerobr/TesteStoryBoard.git (fetch)  
 origin     https://github.com/dsromerobr/TesteStoryBoard.git (push)  
 testeremote     https://github.com/dsromerobr/TesteStoryBoard.git (fetch)  
 testeremote     https://github.com/dsromerobr/TesteStoryBoard.git (push)  

Enviando dados (Pushing).
Para enviar dados para o servidor remoto, utilizamos o comando Push.
Vamos criar um branch remoto SouthWind, também podemos criar o Branch com outro nome, alterando para SouthWind:NOVONOME.
 $ git push origin SouthWind:SouthWind  
 Counting objects: 23, done.  
 Delta compression using up to 8 threads.  
 Compressing objects: 100% (18/18), done.  
 Writing objects: 100% (23/23), 3.98 KiB | 0 bytes/s, done.  
 Total 23 (delta 6), reused 0 (delta 0)  
 To https://github.com/dsromerobr/TesteStoryBoard.git  
  * [new branch]   SouthWind -> SouthWind  

Para fazer push para o branch.
 $ git push origin SouthWind  
 Everything up-to-date  

Pegando um novo Branch remoto.
Caso você tenha que trabalhar em um branch, para fazer checkout e criar este branch remoto, utilizamos o comando checkout.
 $ git checkout -b SouthWind origin/SouthWind  
 Branch SouthWind set up to track remote branch SouthWind from origin.  
 Switched to a new branch 'SouthWind'  
 $ git branch  
  NorthWind  
 * SouthWind  
  master  

Leia o quinto artigo, desfazendo e refazendo.

Nenhum comentário:

Postar um comentário

 

Sobre o Blog

Neste blog irei compartilhar as minhas experiências e observações. Os temas serão variados, mas com ênfase em tecnologia. Inscreva-se nos nossos canais para receber atualizações.