Introdução ao Git e Github — Parte I
Published: 2023-12-06 09:42:58

Seja no desenvolvimento de software ou no mundo dos dados, a colaboração entre os integrantes do time está sempre presente, sendo assim, o controle eficiente das alterações de código é essencial.

Neste post vamos explorar o que é o Git e o GitHub, configuração e principais comandos. Este é um tutorial introdutório para que você se familiarize com a ferramenta.

## O que é Git e GitHub?
O Git é um sistema de controle de versão distribuído, projetado para rastrear as alterações realizadas em arquivos ao longo do tempo, permitindo controlar as alterações realizadas em scripts, conjuntos de dados e qualquer outro tipo de arquivo. Ele mantém um histórico completo de todas as modificações, o que ajuda a evitar conflitos e facilita a colaboração entre diferentes pessoas.

O GitHub, por sua vez é uma plataforma baseada na web que hospeda um repositório Git, também oferecendo diversos outros recursos adicionais, e se tornou uma das principais comunidades de desenvolvimento open source.

Ao utilizar o Git você pode se deparar com vários termos, como commit, stage e branches.

Um commit é como se fosse uma foto instatânea das mudanças feitas nos arquivos de um repositório. Cada commit tem uma descrição que ajuda a entender o que foi alterado e é utilizado para rastrear as alterações realizadas no projeto.

O stage é um espaço intermediário entre os arquivos modificados em seu repositório local e o repositório remoto. Quando você faz alterações em seus arquivos, precisa selecionar quais alterações deseja incluir em um commit, é como dizer ao Git quais mudanças você deseja incluir na próxima “foto”. A ação de selecionar essas alterações e prepará-las para adicionar ao commit é chamada de “staging”.

Branches(ou ramos) são cópias separadas do projeto e permitem que você trabalhe em diferentes partes do projeto sem afetar o código principal. É como uma linha de desenvolvimento independente. O ramo principal do projeto, normalmente chamado de “master” ou “main”, contém a versão estável e funcional do seu projeto, que seria a versão de “produção”. Você pode criar novos ramos para trabalhar em novos recursos (features) ou correções de bugs específicos, isolando as mudanças até que estejam prontas para serem incorporadas ao ramo principal, o que facilita o trabalho em equipe e a organização das alterações.

A forma como as branches são criadas varia de equipe a equipe. Uma prática muito comum é que a branch principal (master/main) contenha a versão de produção mais recente e por isso seja intocável até o lançamento da próxima versão. Então a partir da branch main, cria-se uma branch “dev”, que se torna a branch principal de desenvolvimento. Sendo assim, cada membro responsável por uma correção de bug ou adição de uma nova feature deve criar a sua branch individual a partir da branch “dev” e realizar as suas alterações no código apenas dentro de sua branch. Quando a alteração da branch individual é finalizada, é criado um pull request, que é a solicitação de que o código da sua branch individual seja incorporado(mergeado) à branch “dev”. Ao final do ciclo de desenvolvimento, a branch “dev” é incorporada à branch “main” para que seja disponibilizada a nova versão do produto.

Não se preocupe se você não conseguir entender todos esses conceitos em um primeiro momento, isso é algo que normalmente absorvemos com a prática. No tutorial desta publicação não vamos trabalhar com várias branches, porque o objetivo aqui é que você tenha um primeiro contato e se familiarize com a ferramenta. Branches e outros conceitos serão aplicados com maior profundidade em publicações futuras.

## Configuração
Primeiramente, crie uma conta no GitHub, caso ainda não tenha.

O próximo passo é configurar o [Git](https://git-scm.com/), para isso, é necessário fazer o [download](https://git-scm.com/downloads) e instalação em sua máquina, acessando o site oficial do Git e seguindo as instruções específicas para o seu sistema operacional.

Após a instalação, é necessário realizar uma configuração inicial, definindo o nome de usuário e endereço de e-mail. Crie uma nova pasta na sua máquina e adicione um arquivo de texto qualquer para enviar para o repositório do GitHub (você pode também utilizar uma pasta já criada com os códigos que deseja enviar para o GitHub ao invés de criar uma nova), abra o terminal a partir da nova pasta criada (ou o Git Bash se você utiliza o Windows). Um jeito fácil de fazer isso se você utiliza o Windows é clicar com o botão direito do mouse (clicar em “Mostrar mais opções”, se utilizar Windows 11) e selecionar a opção “Git Bash Here”.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xxfyu2d9m3yz36nxdk4v.png)

Execute os comandos a seguir substituindo o conteúdo dentro das aspas pelas suas informações utilizadas para criar a conta no GitHub:

```
git config --global user.name "Seu username"
git config --global user.email "seu-email@example.com"
```

## Enviando o conteúdo local para o repositório remoto do GitHub
Crie um novo repositório no GitHub e copie a url do repositório:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/055rrpf58r8gqcotc6mr.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tsv5dxt3h51htkjv0rqd.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b9d2onhkb5yjvnc1l671.png)



Para conectar o repositório local (a pasta na sua máquina) com o repositório remoto (criado no GitHub) utilize os comandos a seguir:

```
git init # inicializa o repositório
# criando uma ligação entre o repositório local e repositório remoto
git remote add origin "a url que você copiou ao criar o repositório"
```
Agora que já foi criada essa conexão, você já pode enviar o conteúdo do seu repositório local (da pasta no seu computador) para o repositório remoto.

```
git status # compara os arquivos do repositorio local com o repositorio remoto
# observe que aparecem todos os arquivos/pastas que existem no repositório local
# porque eles ainda não estão disponiveis no GitHub
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9g3zm1u5ykjnl1nol39p.png)


Para adicionar todos os arquivos ao commit utilize o comando a seguir:


```
git add .
# se você quiser enviar apenas um arquivo específico,
# especifique o nome do arquivo. Por exemplo:
# git add teste.txt
```
Você pode verificar o que foi enviado para o stage. Os arquivos presentes no stage aparecem após Changes to be commited: (use “git rm — cached <file>…” to unstage) .

```
git status
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cep51tyvnbbxwhstt7pl.png)


Para criar o commit e adicionar uma mensagem para identificá-lo, utilize o comando a seguir:

```
git commit -m "mensagem descritiva"
# exemplo:
# git commit -m "first-commit"
```
Para simplificar, e como esse repositório não é utilizado por outra pessoa, vamos enviar as alterações para a branch master, que é a branch principal. Em projetos reais não devemos enviar diretamente à branch master.

Para enviar as alterações utilize o comando a seguir:

```
git push origin master
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c9guehm3ocfpftk3mkh7.png)

Após enviar os arquivos, você pode usar o comando “git status” para verificar se ainda há arquivos no repositório local que podem ser enviados ao repositório remoto. Nesse caso não há, pois aparece a mensagem “nothing to commit, working tree clean”.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/txdwxjp1ns7yxymvuaxg.png)



Atualize a página no seu repositório e você poderá ver que o conteúdo foi enviado com sucesso para o repositório remoto.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1iqkxujwpx7rzdo2vesf.png)