Tutorial git

tutorial git

Introdução

No post anterior foi abordado de maneira superficial o funcionamento básico do git. Vamos dar continuidade e detalhar um pouco mais como se cria e se usa um repositório git local e em seguida cobriremos o uso em um repositório remoto hospedando o código no Github.

 

Comandos Git

Primeiro vamos listar e explicar alguns comandos Git básicos que serão usados adiante:

git init

Inicializar um repositório git. Ao executar esse comando, git cria um subdiretório .git que contém os arquivos necessários do novo repositório.

git add

Este comando possui diversas funções, como adicionar um arquivo em uma lista de arquivos a ser monitorado. Também funciona para salvar o estado de um arquivo que está sendo monitorado.

git rm

Remove um arquivo da lista de arquivos monitorados.

git commit 

Cria um ponto de referência com o estado atual de todos os arquivos.

git status

Exibe o status dos arquivos no repositório (não monitorados, modificados e não salvos, salvos e prontos para commit, etc).

git branch

Cria ou muda de ramo de desenvolvimento. Também serve para listar todos os ramos existentes.

git checkout

Muda de ramo ou ainda serve para ignorar modificações locais, entre outras funcionalidades.

git push

Envia as modificações para o repositório remoto.

git pull

Busca modificações do repositório remoto.

git clone

Copia um repositório remoto na máquina local.

Repositório local

Para iniciar um repositório local, como explicado anteriormente basta executar o comando git init

$ git init
Initialized empty Git repository in /home/user/artigo/.git/

Note que o repositório .git foi criado como esperado. Crie um arquivo vazio com o nome teste.txt e execute o comando git status

$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        teste.txt

nothing added to commit but untracked files present (use "git add" to track)

O git nos informa que existe um arquivo não monitorado (untracked) chamado teste.txt. Para que o git comece a monitorá-lo, execute git add

$ git add ./teste.txt
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   teste.txt

Neste ponto, o arquivo teste.txt está sendo controlado pelo git. Modifique agora o arquivo e execute o comando git status novamente: 

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   teste.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   teste.txt

Notem que temos agora new file: teste.txt e também modified: teste.txt. Isso significa que o git detectou que houve uma modificação no arquivo teste.txt. Para adicionar essas modificações, basta executar novamente git add. Caso queira ignorar e retornar ao arquivo original (vazio), execute git checkout.

Crie e adicione um segundo arquivo teste2.txt.

$ git add ./teste2.txt
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   teste.txt
        new file:   teste2.txt

Agora o git monitora tanto teste.txt como teste2.txt. Caso queiram que o git pare de monitorar o arquivo, execute o comando git rm. Notem que o git dá dicas durante os comandos executados.

$ git rm --cached ./teste2.txt 
rm 'teste2.txt'
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   teste.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        teste2.txt

Com o parâmetro --cached, o git somente para de monitorar o arquivo. Porém caso queira deletá-lo, execute o comando git rm sem o parâmetro --cached.

$ git add ./teste2.txt
$ git rm -f ./teste2.txt 
rm 'teste2.txt'
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   teste.txt

Digamos que os arquivos do projeto estão num momento onde seria importante salvá-los como estão. Para isso, executamos o commando git commit para criar um ponto de referência a fim de sermos capazes de consultar mais tarde todos os arquivos desejados.

$ git commit -m "Commit de teste"
[master (root-commit) eb55407] Commit de teste
 1 file changed, 1 insertion(+)
 create mode 100644 teste.txt
$ git log
commit eb554073c0af31063589ae4243b9d9ed3e42db02
Author: Marcelo Jo <[email protected]>
Date:   Tue Feb 17 22:42:25 2015 -0500

    Commit de teste
[email protected]:~/Marme/projetos/artigo > 

No comando de commit, executamos com o parâmetro -m para deixarmos uma mensagem para podermos identificar facilmente em que ponto estávamos. Com o comando git log, listamos todos os commits feitos.

Nos exemplos até agora, fizemos todas as alterações no ramo principal, chamado master.  Às vezes temos a necessidade de criar ramificações para organizar melhor o projeto. Um exemplo seria criar um ramo para desenvolver algum código que você não tem certeza se vai funcionar ou não. Para isto, usamos o comando git branch.

$ git branch novo_branch
$ git branch
* master
  novo_branch
$ git checkout novo_branch
Switched to branch 'novo_branch'

No exemplo acima criamos o ramo novo_branch e para mudarmos para o novo ramo usamos git checkout. Também é possível fazer isso num comando só: git checkout -b novo_ramo.

No novo ramo, pode-se executar todos os comandos já conhecidos, adicionar arquivos, alterá-los, criar commits, etc. Digamos que as alterações nesse ramo não são importantes e não há a necessidade de salvá-los. Neste caso, basta excluir o ramo com o mesmo comando git branch com o parâmetro -d.

$ git branch -d novo_branch
Deleted branch novo_branch (was eb55407).

No caso de querer salvar essas alterações e ainda adicionar no ramo principal master, usamos o comando git merge. Para simplificar o post, foi criado um arquivo teste2.txt e foi feito um commit no ramo novo_branch,  mas os comandos serão omitidos.

$ git checkout master
$ git merge novo_branch
Updating eb55407..4a5ca52
Fast-forward
 teste2.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 teste2.txt

$ git log
commit 4a5ca520806dd461d820e691504492ab9a7a44db
Author: Marcelo Jo <[email protected]>
Date:   Tue Feb 17 22:57:34 2015 -0500

    Commit feito no novo_branch

commit eb554073c0af31063589ae4243b9d9ed3e42db02
Author: Marcelo Jo <[email protected]>
Date:   Tue Feb 17 22:42:25 2015 -0500

    Commit de teste

Primeiro, é necessário voltar ao ramo master e depois executar o comando merge. O Git explica que unificou os dois ramos adicionando no ramo master o arquivo teste2.txt. Executando git log a partir do ramo master, podemos notar que agora existem dois commits, um feito diretamente no ramo master e um segundo que foi feito no ramo novo_branch. Depois do merge, podemos deletar sem problemas o ramo novo_branch que todas as alterações já estão contidas no ramo master.

Repositório remoto

Podemos usar um repositório remoto para salvar nossos arquivos de modo a consultá-los ou mesmo editá-los de um outro computador diferente do computador local. Existem alguns provedores de repositórios Git e dentre os mais conhecidos estão Github e Bitbucket.

Como exemplo usaremos o Github. Após o login, no canto superior direito, no ícone +, selecione New repository.

github_new_repository

Crie um nome para o seu repositório.

github_new_repository2

Pronto, seu repositório remoto está criado. Basta agora enviarmos nosso código local para lá. 

git remote add origin https://github.com/marcelojo/artigo_git.git
git push -u origin master

Username for 'https://github.com': [email protected]
Password for 'https://[email protected]@github.com': 
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 489 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/marcelojo/artigo_git.git
 * [new branch] master -> master
Branch master set up to track remote branch master from origin.

Primeiro precisamos dizer ao Git onde está o nosso repositório remoto. Isso é feito pelo comando git remote add origin. Depois usamos o comando git push para enviarmos o nosso ramo master para origin que está hospedado no Github. Vale lembrar que o comando git push pode ser usado a qualquer momento durante o desenvolvimento local a fim de sincronizar os arquivos locais e remotos.

Digamos que estamos em outro computador e gostaríamos de buscar os mesmos arquivos no Github. Isso é feito simplesmente pelo comando git clone

$ cd ../
$ mkdir teste_artigo
$ cd teste_artigo
$ git clone https://github.com/marcelojo/artigo_git.git
Cloning into 'artigo_git'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
Checking connectivity... done.

Conclusões

O Git é uma ferramenta muito flexível e poderosa porém o custo disso é a sua complexidade. Muitos dos comandos citados aqui recebem diversos parâmetros e podem ser usados de diversas formas. Este tutorial mostrou apenas o básico para que o leitor seja capaz, a partir do zero, de criar um repositório local e remoto. O Git disponibiliza um livro gratuito traduzido em Português do Brasil o qual explica de forma fácil e didática como usar essa fantástica ferramenta.

Referências 

[1] https://www.embarcados.com.br/controle-de-versoes-parte-iii-dcvs/

[2] http://www.github.com

[3] https://bitbucket.org/

[4] http://git-scm.com/book/pt-br/v1

[5] https://www.embarcados.com.br/onde-hospedar-o-codigo-fonte-do-seu-projeto/

[6] http://ericsink.com/vcbe/html/bk01-toc.html

Outros artigos da série

<< Controle de versões Parte III – DVCS
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Marcelo Jo
Engenheiro eletrônico com 10 anos de experiência em sistemas embarcados, pós graduado em redes de computadores e atualmente cursando mestrado em sistemas de visão por computador na universidade Laval no Canadá. Compartilha seu conhecimento neste portal quando tem tempo livre e quando não está curtindo a vida com sua mulher e os 3 filhos.

3
Deixe um comentário

avatar
 
3 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
alexRafael DiasE quando não havia o Arduino? - Embarcados - Sua fonte de informações sobre Sistemas Embarcados Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
alex
Visitante
alex

Gostaria de dar os parabéns para o post e aproveitando queria deixar o link para baixar o e-book gratuito para o pessoal que está aprendendo Spring Boot e possui uma parte de GitHub.
Segue o link para baixar → https://goo.gl/ZR9jX5

trackback

[…] um repositório no github já que isso é bem documentado na internet [2]. Veja também o artigo [3] do Marcelo Jo, sobre […]

Rafael Dias
Visitante
Rafael Dias

Artigo muito bom.