Repositórios remotos são versões do seu projeto hospedadas na internet ou em uma rede local. Eles permitem que você e sua equipe colaborem, sincronizem mudanças e mantenham um histórico centralizado. Nesta aula, abordaremos os principais comandos e fluxos de trabalho envolvendo repositórios remotos no Git.

Dominar repositórios remotos é essencial para qualquer profissional de DevOps, pois eles são a base de integração contínua, entrega contínua e colaboração em equipe.

push e pull

Os comandos git push e git pull são usados para sincronizar seu repositório local com um remoto. O push envia commits locais para o remoto, enquanto o pull baixa e integra mudanças do remoto.

Antes de enviar suas alterações, é importante garantir que seu repositório local esteja atualizado. Use git pull para trazer as últimas mudanças e resolver conflitos, se houver. O comando git push requer permissões de escrita no repositório remoto.

# Enviar commits da branch atual para o remoto
$ git push origin main

# Puxar mudanças do remoto e fazer merge
$ git pull origin main

# Puxar mudanças mas sem fazer merge (fetch + merge manual)
$ git fetch origin
$ git merge origin/main

Boas práticas: sempre faça pull antes de push para evitar conflitos. Use git status para verificar o estado do repositório.

Forks

Um fork é uma cópia de um repositório sob sua conta no GitHub, GitLab ou Bitbucket. Ele permite que você contribua para projetos sem permissão de escrita direta. Após fazer um fork, você pode clonar o repositório para sua máquina, fazer alterações e enviar um pull request para o repositório original.

Forks são amplamente usados em projetos open source. Para manter seu fork atualizado, você pode adicionar o repositório original como um remote adicional (chamado upstream) e sincronizar as mudanças.

# Adicionar o repositório original como upstream
$ git remote add upstream https://github.com/original/projeto.git

# Sincronizar o fork com o upstream
$ git fetch upstream
$ git checkout main
$ git merge upstream/main

# Enviar para o seu fork
$ git push origin main

Boas práticas: mantenha seu fork atualizado para evitar conflitos. Crie branches separadas para cada funcionalidade.

Pull/merge requests

Pull requests (PR) no GitHub ou merge requests (MR) no GitLab são solicitações para que suas alterações sejam integradas a um repositório. Eles permitem revisão de código, discussão e testes antes da integração.

Para criar um PR, você precisa ter um fork ou uma branch com suas alterações e enviar um push para o repositório remoto. Em seguida, no site do serviço, você cria o PR especificando a branch de origem e a branch de destino. Após a aprovação, o PR pode ser mergeado.

# Criar uma branch para uma nova feature
$ git checkout -b feature/nova-funcionalidade

# Fazer commits e push
$ git add .
$ git commit -m "Adiciona nova funcionalidade"
$ git push origin feature/nova-funcionalidade

# Agora crie o pull request via interface web

Boas práticas: escreva mensagens de commit claras, mantenha PRs pequenos e focados, e responda a comentários de revisão.

Colaboração

A colaboração em equipe com Git envolve fluxos de trabalho como Git Flow, GitHub Flow ou GitLab Flow. Esses fluxos definem como branches são usados e como as mudanças são integradas.

Em um fluxo comum, cada desenvolvedor trabalha em uma branch separada (feature branch) e cria um PR para a branch principal (main ou develop). Após revisão e testes, o PR é mergeado. É importante que a equipe defina regras claras de nomenclatura de branches e políticas de merge.

# Exemplo de fluxo: criar branch de feature
$ git checkout -b feature/login

# Trabalhar, commitar e push
$ git push origin feature/login

# Criar PR para main
# Após aprovação, fazer merge

# Atualizar a branch main local
$ git checkout main
$ git pull origin main

Boas práticas: use ferramentas de integração contínua para testar PRs automaticamente, mantenha a branch main sempre estável e evite commits diretos para main.

Boas Práticas Finais

Algumas dicas adicionais: sempre configure seu nome e email no Git (git config --global user.name e git config --global user.email). Use mensagens de commit descritivas e no imperativo. Prefira rebase interativo para organizar commits antes de um PR. E, acima de tudo, comunique-se com a equipe sobre mudanças e conflitos.

Exercícios

  1. Qual comando você usaria para enviar commits locais para um repositório remoto chamado origin, na branch main?

    ✓ Resposta: git push origin main
  2. Como você adiciona o repositório original como um remote chamado upstream em um fork?

    ✓ Resposta: git remote add upstream https://github.com/original/projeto.git
  3. Qual a diferença entre git fetch e git pull?

    ✓ Resposta: git fetch apenas baixa as mudanças do remoto, sem integrá-las. git pull baixa e faz merge automaticamente (equivalente a git fetch + git merge).
  4. O que é um pull request e qual sua principal finalidade?

    ✓ Resposta: Um pull request é uma solicitação para que suas alterações sejam integradas a um repositório. Sua principal finalidade é permitir revisão de código, discussão e testes antes da integração.
  5. Qual comando você usaria para criar uma nova branch chamada 'feature/nova' e já mudar para ela?

    ✓ Resposta: git checkout -b feature/nova

Referências