Questão de Engenharia de Software — Git — VUNESP 2023
- Código
- vu196289
- Banca
- VUNESP
- Órgão
- UNICAMP
- Ano
- 2023
- Cargo
- PTIC ( )
- AWORKPLACE
- BMASTER
- CSOURCE
- DTREE
- EHEAD
GabaritoE — HEAD
Gabarito: letra E. No Git, o ponteiro especial que indica o branch atual em que se está trabalhando é o HEAD. Ele é um ponteiro simbólico que, na prática, aponta para o commit mais recente do branch atual, e é por isso que o Git sabe onde aplicar o próximo commit. As demais alternativas (WORKPLACE, MASTER, SOURCE, TREE) não correspondem a esse conceito — MASTER é apenas o nome padrão do branch principal (hoje frequentemente chamado de main), e TREE é o objeto que representa um diretório no repositório.
O Git é um sistema de controle de versão distribuído que organiza o projeto em três áreas principais: o diretório de trabalho (working directory), a área de preparo (staging area) e o repositório (repository). Quando você faz um commit, o Git cria um snapshot do estado dos arquivos e o armazena como um objeto commit. Cada commit aponta para o commit anterior (seu pai), formando uma cadeia de histórico. O HEAD é o mecanismo que o Git usa para saber em qual ponto dessa cadeia você está: ele é um ponteiro que se move automaticamente a cada novo commit, sempre apontando para o último commit do branch atual.
Para entender melhor, imagine que você está trabalhando no branch main. O HEAD aponta para o commit mais recente de main. Quando você cria um novo branch com git branch feature, o Git cria um novo ponteiro chamado feature que também aponta para o mesmo commit — mas o HEAD continua apontando para main. Ao trocar para o branch feature com git checkout feature (ou git switch feature), o HEAD passa a apontar para feature. A partir daí, qualquer commit que você fizer moverá o ponteiro feature (e o HEAD junto) para o novo commit, enquanto main permanece onde estava. É assim que o Git rastreia em qual linha de desenvolvimento você está.
A distinção que importa aqui é entre HEAD e branch. O branch é um ponteiro móvel que representa uma linha de desenvolvimento; o HEAD é o ponteiro que indica qual branch está "ativo" no momento. Em situações de detached HEAD (quando você faz checkout de um commit específico, não de um branch), o HEAD aponta diretamente para um commit, e não para um branch — mas isso é uma exceção que reforça a regra: o HEAD é sempre o indicador do estado atual do repositório.
A pegadinha que a banca explora é justamente a confusão entre o nome do branch padrão (MASTER) e o ponteiro de posição (HEAD). Muitos candidatos, ao verem "ponteiro especial", lembram do branch principal e marcam MASTER. Mas o enunciado pede o ponteiro que indica o branch atual — e esse é o HEAD, não o nome do branch. Guarde essa fronteira: branch é o nome da linha de desenvolvimento; HEAD é o ponteiro que diz em qual linha você está agora.
WORKPLACE não é um termo do Git. O conceito mais próximo seria o working directory (diretório de trabalho), que é uma das três áreas do Git, mas não é um ponteiro e não indica o branch atual. A banca usa esse termo apenas como distrator, pois soa como algo relacionado ao ambiente de trabalho.
MASTER é o nome tradicional do branch principal (hoje em dia, muitos repositórios usam main). Ele é um branch, não um ponteiro especial que indica o branch atual. O erro aqui é confundir o nome do branch padrão com o ponteiro de posição. O HEAD aponta para o branch atual, que pode ser o master ou qualquer outro.
SOURCE não é um termo do Git. Pode lembrar "código-fonte" (source code), mas não existe um ponteiro chamado SOURCE no Git. É um distrator puro, sem relação com o funcionamento do controle de versão.
TREE é um objeto do Git que representa um diretório (uma árvore de arquivos e subdiretórios). Ele é usado internamente para armazenar a estrutura de arquivos de um commit, mas não é um ponteiro que indica o branch atual. A confusão aqui é entre o objeto que representa a estrutura de arquivos e o ponteiro de posição.
HEAD é o ponteiro especial do Git que indica o branch atual. Ele é um ponteiro simbólico que aponta para o commit mais recente do branch em que você está trabalhando. Quando você faz um commit, o HEAD (e o branch) avançam para o novo commit. É por isso que o Git sabe onde aplicar as próximas alterações.
Para fixar, lembre-se: HEAD = "onde estou agora". O branch é o nome da linha de desenvolvimento (master, main, feature), e o HEAD é o ponteiro que diz em qual linha você está. Se a questão perguntar "qual ponteiro indica o branch atual?", a resposta é sempre HEAD. Se perguntar "qual é o nome do branch principal?", aí sim pode ser master/main.
Gabarito: letra E
Link permanente: /questoes/vu196289