Questão de Engenharia de Software — Git — INSTITUTO AOCP 2024
- Código
- qa631582
- Banca
- INSTITUTO AOCP
- Órgão
- DPE MS
- Ano
- 2024
- Cargo
- Ana Def ( )
- ABreak.
- BHash.
- CCommit.
- DLSM.
- EAbstração.
GabaritoC — Commit.
Gabarito: letra C. No Git, o commit é exatamente o ponto no histórico do projeto que registra um conjunto de modificações realizadas em um ou mais arquivos naquele momento — uma "foto" (snapshot) do estado do projeto. As demais alternativas (Break, Hash, LSM, Abstração) não correspondem a esse conceito: hash é o identificador único do commit, e os outros termos não pertencem ao vocabulário do Git.
O Git é um sistema de controle de versão distribuído, o que significa que cada desenvolvedor possui uma cópia completa do repositório em sua máquina local. Diferentemente de sistemas centralizados (como o SVN), que armazenam apenas as diferenças entre versões, o Git trata os dados como um conjunto de snapshots do sistema de arquivos. Cada vez que você faz um commit, o Git tira uma foto do estado atual de todos os arquivos rastreados e guarda uma referência a essa foto. Isso permite que o histórico seja reconstruído de forma íntegra e rápida, sem depender de um servidor central.
O fluxo de trabalho básico no Git envolve três áreas principais:
Diretório de Trabalho (Working Directory): onde você cria, edita e modifica os arquivos.
Área de Preparo (Staging Area): um espaço temporário que registra as alterações que serão incluídas no próximo commit (com o comando git add).
Repositório (Repository): onde ficam armazenados permanentemente todos os commits, formando o histórico do projeto.
Quando você executa git commit, o Git consolida as alterações que estavam na área de preparo, cria um novo snapshot e atribui a ele um hash único (um código SHA-1 de 40 caracteres). Esse hash é o identificador do commit, mas não é o commit em si — o commit é o conjunto de modificações registradas. É por isso que a alternativa B (Hash) é um distrator: ela confunde o identificador com o objeto que ele identifica.
A pegadinha desta questão é justamente essa: o candidato que conhece o Git sabe que o hash é um elemento importante, mas pode esquecer que o commit é o conceito central que representa o ponto no histórico. As outras alternativas (Break, LSM, Abstração) são termos de outras áreas da computação, sem relação direta com o controle de versão.
Guarde a distinção: commit é o registro das modificações; hash é o código que identifica esse registro. É nessa fronteira que as alternativas se separam.
Break não é um termo do Git. Em programação, "break" é uma instrução de controle de fluxo (usada para interromper loops), mas não tem relação com controle de versão. A banca incluiu esse termo apenas como distrator, aproveitando que é uma palavra comum em inglês.
Hash é o identificador único (checksum SHA-1) atribuído a cada commit, mas não é o ponto no histórico que representa as modificações. O hash é uma consequência do commit — ele serve para garantir a integridade e identificar o commit, mas o conceito pedido no enunciado é o próprio commit. A banca tenta confundir o candidato que sabe que o hash é importante, mas não distingue o objeto do seu identificador.
Commit é exatamente o ponto no histórico do projeto que indica um conjunto de modificações realizadas em um ou mais arquivos naquele momento. É a operação que consolida as alterações da área de preparo no repositório, criando um novo snapshot do projeto. O enunciado descreve com precisão o conceito de commit, e é essa a definição cobrada pela banca.
LSM (Log-Structured Merge-tree) é uma estrutura de dados usada em bancos de dados (como o Cassandra e o LevelDB) para otimizar operações de escrita. Não tem relação com o Git nem com controle de versão. É um termo técnico de outra área, usado como distrator para confundir candidatos que conhecem o termo em outro contexto.
Abstração é um princípio fundamental da engenharia de software e da programação orientada a objetos, mas não é um conceito do Git. A abstração consiste em ocultar detalhes de implementação e focar no essencial, mas não se aplica ao registro de modificações no histórico. A banca incluiu esse termo para testar se o candidato sabe diferenciar conceitos gerais de engenharia de software dos conceitos específicos do Git.
A banca explora a confusão entre commit e hash. O candidato que sabe que o hash é importante pode marcar a letra B, mas o hash é apenas o identificador do commit — o commit é o registro das modificações em si. Lembre-se: o hash é uma consequência do commit, não o conceito pedido.
Para fixar, associe o commit a uma "foto" do projeto: cada commit é um snapshot completo do estado dos arquivos. O hash é o "número da foto". Quando a questão falar em "ponto no histórico" ou "conjunto de modificações", a resposta é sempre commit.
Gabarito: letra C
Link permanente: /questoes/qa631582