Pular para o conteúdo principal

Questão de Engenharia de Software — Git — INSTITUTO AOCP 2024

Engenharia de SoftwareGit
Código
qa631579
Banca
INSTITUTO AOCP
Órgão
DPE MS
Ano
2024
Cargo
Ana Def ( )
Maisa é analista de Desenvolvimento de Sistemas da Defensoria Pública do Estado de Mato Grosso do Sul e precisa obter todos os objetos do repositório remoto que atualmente não residem no diretório de trabalho local. Dentro do GIT, qual comando ela deve utilizar para atender à sua necessidade?
  1. Agit init
  2. Bgit fetch
  3. Cgit status
  4. Dgit checkout
  5. Egit fsck
Revelar gabarito e comentário

GabaritoB — git fetch

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Git: Comandos de Sincronização com o Repositório Remoto

Gabarito: letra B. O comando git fetch é o que Maisa deve utilizar para obter todos os objetos do repositório remoto que ainda não existem no diretório de trabalho local. Ele baixa as referências e os objetos (commits, árvores, blobs) do repositório remoto para o repositório local, sem alterar o diretório de trabalho nem o branch atual — é a operação de "baixar" o que há de novo no remoto sem integrar ao trabalho em andamento.

O Git é um sistema de controle de versão distribuído, o que significa que cada clone contém uma cópia completa do repositório, incluindo todo o histórico. Quando você trabalha com um repositório remoto (como GitHub, GitLab ou Bitbucket), precisa sincronizar seu repositório local com o remoto. Essa sincronização envolve dois movimentos: baixar (fetch/pull) e enviar (push). O comando git fetch realiza o primeiro movimento de forma segura: ele atualiza as referências remotas (como origin/main) e baixa os objetos que faltam, mas não modifica o diretório de trabalho nem o branch atual. Isso permite que você examine as mudanças antes de integrá-las com git merge ou git rebase.

A distinção crucial é entre git fetch e git pull. Enquanto git fetch apenas baixa os objetos e atualiza as referências remotas, git pull é um atalho que executa git fetch seguido de git merge (ou git rebase, dependendo da configuração), integrando imediatamente as mudanças ao branch atual. Se Maisa quer apenas "obter todos os objetos do repositório remoto que atualmente não residem no diretório de trabalho local", sem necessariamente integrá-los ao seu trabalho atual, git fetch é o comando correto. Se ela quisesse baixar e integrar imediatamente, usaria git pull.

Vamos analisar cada alternativa para entender por que as outras não atendem à necessidade descrita:

Git: sincronização com remoto
  • 1Baixar (fetch/pull)
    • git fetch
      • baixa objetos e referências
      • não altera diretório de trabalho
    • git pull
      • fetch + merge/rebase
      • integra ao branch atual
  • 2Enviar
    • git push
  • 3Outros comandos
    • git init: cria repositório
    • git status: estado do diretório
    • git checkout: troca de branch
    • git fsck: integridade dos objetos
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

git init cria um novo repositório Git no diretório atual. Ele não interage com repositórios remotos e não baixa nenhum objeto. É o comando usado para iniciar o versionamento de um projeto local, não para sincronizar com um repositório remoto.

Alternativa B — ✅ Correta ⟵ GABARITO

git fetch baixa os objetos e referências do repositório remoto que não existem no repositório local, atualizando as referências remotas (como origin/main) sem alterar o diretório de trabalho. É exatamente o que Maisa precisa: obter todos os objetos do remoto que ainda não estão no diretório de trabalho local. O comando não integra as mudanças ao branch atual, permitindo que ela revise antes de mesclar.

Alternativa C — ❌ Incorreta

git status exibe o estado do diretório de trabalho e da área de preparo (staging area), mostrando arquivos modificados, não rastreados e prontos para commit. Ele não baixa nada do repositório remoto; é um comando de consulta local que informa o estado atual do projeto.

Alternativa D — ❌ Incorreta

git checkout é usado para alternar entre branches, restaurar arquivos do histórico ou criar novos branches. Embora possa ser usado para atualizar o diretório de trabalho com arquivos de um commit específico, ele não baixa objetos do repositório remoto. Para obter objetos do remoto, seria necessário primeiro executar git fetch e depois, opcionalmente, git checkout para atualizar o diretório de trabalho com base nas referências baixadas.

Alternativa E — ❌ Incorreta

git fsck verifica a integridade do banco de dados de objetos do Git, procurando objetos corrompidos ou desconectados. É uma ferramenta de manutenção e diagnóstico, não um comando de sincronização com o repositório remoto. Não baixa nenhum objeto do remoto.

NÃO CAIA NESSA!

A banca explora a confusão entre git fetch e git pull. O enunciado diz "obter todos os objetos do repositório remoto que atualmente não residem no diretório de trabalho local" — isso descreve exatamente o que git fetch faz. O candidato que pensa em "atualizar o diretório de trabalho" pode ser tentado a escolher git pull, mas o comando git pull não está entre as alternativas. A pegadinha aqui é reconhecer que git fetch é o comando que baixa os objetos sem integrar, enquanto git pull (que não aparece) faria o fetch + merge. Fique atento: quando a questão fala em "obter objetos" ou "baixar referências", a resposta é git fetch; quando fala em "atualizar o diretório de trabalho" ou "integrar mudanças", a resposta seria git pull.

PEGA ESSA DICA!

Para memorizar a diferença, pense: fetch = "buscar" (apenas baixa), pull = "puxar" (baixa e integra). Na prova, leia o enunciado com atenção: se ele menciona "obter objetos", "baixar referências" ou "sincronizar sem alterar o trabalho", a resposta é git fetch. Se menciona "atualizar o diretório de trabalho" ou "integrar as mudanças", a resposta seria git pull. Essa distinção é clássica em questões de Git.

Gabarito: letra B

Link permanente: /questoes/qa631579