Questão nº 47
Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 47)
Para realizar o clone de um único branch de um repositório git, a
analista Ana utilizou o comando ‘git clone --depth 1 --branch q07
https://trf1.br/ana/repo07.git’.
Após concluir o trabalho necessário no branch q07, Ana precisou
recuperar o histórico completo de commits e realizar o checkout
para o branch master, sem efetuar um novo clone.
Para realizar as operações necessárias, a analista:
- Aexecutou imediatamente o comando git checkout master, sem alterações;
- Balterou o escopo do fetch na configuração do git e logo após efetuou o checkout;
- Cexecutou imediatamente o comando git checkout master, com o argumento unshallow;
- Dexecutou o comando fetch com o argumento all e só então executou o comando git checkout master;
- Eefetuou o unshallow do clone e alterou o escopo do fetch na configuração do git, para só então efetuar novo fetch e checkout. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Um clone raso (git clone --depth N) é uma cópia parcial de um repositório Git que contém apenas os últimos N commits de um branch, economizando espaço e tempo. Para acessar o histórico completo e outros branches, é preciso "aprofundar" o clone (fazer um unshallow) e garantir que o Git busque todos os branches.
- (A) Incorreta:
git checkout masterfalharia porque o clone raso inicial (--branch q07) não trouxe o histórico completo do branchmaster(ou de qualquer outro branch que não sejaq07). O Git não teria os commits necessários para construir o branchmasterlocalmente. - (B) Incorreta: Alterar o escopo do
fetch(git config remote.origin.fetch) é necessário para que futurosfetchestragam todos os branches, mas isso não remove a limitação de profundidade do clone raso existente. O histórico ainda estaria truncado até que ounshallowfosse feito. Esta é a armadilha: parece uma parte da solução, mas é incompleta e ignora a natureza "rasa" do clone. - (C) Incorreta: O comando
git checkoutnão possui o argumento--unshallow. O argumento--unshallowé usado comgit fetchpara converter um clone raso em um clone completo. - (D) Incorreta:
git fetch --allbuscaria todos os branches remotos, mas, como o clone é raso, ele ainda estaria limitado à profundidade inicial. Ele não traria o histórico completo de todos os branches, apenas os commits dentro da profundidade já estabelecida ou os mais recentes. Ounshallowé a operação que remove a restrição de profundidade. - (E) Correta: Primeiro,
git fetch --unshallow(ougit unshallow, que é um alias parafetch --unshallowem algumas versões) converte o clone raso em um clone completo, baixando todo o histórico que faltava. Em seguida, alterar o escopo dofetch(git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*") garante que o Git buscará todos os branches remotos (não apenasq07) em operações futuras. Um novogit fetché então necessário para baixar os dados dos outros branches (comomaster) que agora podem ser buscados em sua totalidade. Finalmente,git checkout masterpode ser executado com sucesso, pois o histórico completo demasterestará disponível localmente.
Fonte: FGV TRF1 2024 Técnico Judiciário - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.