Introdução ao Git e GitHub — Parte II
Published: 2023-12-06 09:54:05

No [primeiro post](https://dev.to/amandashichinoe/introducao-ao-git-e-github-parte-i-37nh) desta série, você aprendeu a enviar os arquivos do seu repositório local para um repositório remoto. Mas e se você quiser modificar um arquivo que está em um repositório remoto que você ainda não possui em sua máquina?

## Git Clone

O git permite que façamos um clone de um repositório remoto. Ao fazer um clone, estamos criando uma cópia local que nos permite trabalhar no código sem afetar diretamente o repositório original, até que as alterações sejam enviadas ao repositório por meio do comando git push.

Quando queremos criar uma cópia local de um repositório que é nosso, podemos utilizar simplesmente o comando git clone <link-do-repositorio-remoto>. Mas às vezes queremos utilizar um repositório disponibilizado publicamente no GitHub, e não podemos deixar que as nossas alterações afetem o código original. Nesse caso, podemos também fazer um “fork”.

## Usando Fork
Um “fork” é uma cópia independente de um repositório remoto. Quando você faz um fork de um repositório, você está criando uma cópia separada desse repositório em sua própria conta no GitHub.

Ele é muito utilizado quando queremos experimentar modificações sem interferir diretamente no repositório original.

Acesse a página do Github onde está o repositório que você deseja clonar e clique em “Fork”. Neste exemplo, estamos utilizando este repositório da [Alura](https://github.com/alura-cursos/introducao-a-data-science):

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

Irá aparecer uma página onde você tem a opção de personalizar o seu fork, alterando o título e descrição, assim como a opção de clonar apenas a branch master ou as outras branches do projeto também. Clique em “Create fork” para confirmar a criação do fork:

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

Observe que abaixo do nome do repositório aparece a mensagem “forked from …” . A partir de agora é como se o repositório fosse seu. Todas as alterações que você fizer serão refletidas somente no seu fork.

## Clonando o repositório remoto
Para clonar o repositório em sua máquina local e poder alterar o projeto, você precisa do link para o repositório. Para isso, na página do seu repositório remoto, clique em “Code” e copie a url:

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

Na sua máquina, vá até o local onde você deseja que o repositório seja salvo, e abra o Git Bash:

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

Você também pode abrir o Git Bash e navegar até o diretório desejado usando o comando cd <caminho-ate-o-diretorio> .

Insira o comando a seguir utilizando a url que você copiou:

```
# git clone <url do repositorio>
git clone https://github.com/<seu-usuario-github>/introducao-a-data-science.git
```

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

Ainda usando o Git Bash, acesse o repositório clonado.

```
cd introducao-a-data-science/
```
Observe que existe uma pasta “.git”.

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

A pasta .git é uma pasta oculta que fica no diretório raiz de um repositório Git, contém todo o controle de versão para aquele repositório e armazena as informações sobre o histórico de commits, branches, tags e outras configurações relacionadas ao repositório.

Ela possui em seu conteúdo:

**objects:** Esta pasta armazena os objetos do Git compactados, que representam as versões dos arquivos e diretórios ao longo do tempo.

**refs:** Aqui estão as referências para commits, branches, tags e outras entidades. As branches e tags são mantidas aqui como ponteiros para commits específicos.

**logs:** Essa pasta contém logs de referências, mantendo um registro de quando as referências (como branches) foram atualizadas.

**HEAD:** Este é um arquivo que aponta para o commit atual em que você está trabalhando. Geralmente, ele aponta para a branch que está ativa.

**config:** Este arquivo armazena as configurações específicas do repositório, como informações de usuário e opções de formatação.

**index:** Este arquivo é conhecido como “index” ou “staging area”. Ele contém informações sobre as mudanças que estão prontas para serem commitadas.

**hooks:** Nesta pasta, você pode adicionar scripts personalizados que serão executados automaticamente em certos eventos do Git, como antes de um commit ou após um merge.

É importante não mexer manualmente nos arquivos dentro desta pasta, a menos que você tenha um conhecimento profundo do funcionamento interno do Git.

## Enviando as alterações para o repositório remoto

Após realizar as alterações desejadas, você pode atualizar o seu repositório. Por ainda se tratar de um tutorial básico, e o repositório ser apenas para fins didáticos e sem impacto no repositório original, ainda vamos fazer as alterações diretamente na branch master.

```
git status # verifique os arquivos que foram alterados
```

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


```
git add readme.md # adiciona ao commit apenas as alterações feitas no arquivo readme.md
# você pode adicionar ao commit todas as alterações usando git add .

git commit -m "add readme" # adiciona a mensagem de commit
```

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

```
git push origin master # envia o commit com as alterações para a branch master
```

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

Acesse/Atualize a página com o repositório remoto e observe que o arquivo adicionado já aparece, bem como a mensagem do último commit.

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


Espero que este tutorial tenha te ajudado!

Se ficou alguma dúvida, sinta-se à vontade para me contatar.