Partilhar: Classroom Teams WhatsApp
aulify
UC UC00617 · T. Desenv. Software, T. Inform. Gestão

Ficha 01 · Git fundamentos

Comandos, branches, merge, .gitignore
Versão · Aluno
Tempo · 120 minutos
Cotação · 100 pontos
Aluno(a)
Turma
Nº
Data
Objectivos da ficha

Parte I · Comandos básicos

Exercício 1 · Setup (10 pts)

Listar comandos para: a) Configurar nome e email. b) Iniciar repo num projeto novo. c) Ver estado dos ficheiros. d) Adicionar ficheiro ao staging. e) Criar commit.

Exercício 2 · Workflow básico (10 pts)

A Marta vai começar o projeto agenda-escolar, um pequeno script em Python que lê a lista de turmas. Na pasta já existem agenda.py, turmas.csv, uma pasta __pycache__/ criada pelo Python e um ficheiro erros.log. Descreve os comandos para:

Parte II · Branches

Exercício 3 · Branches (10 pts)

Comandos para: a) Criar branch feature/login. b) Mudar para essa branch. c) Criar branch + mudar de uma vez. d) Fundir feature/login em main. e) Apagar branch após merge.

Exercício 4 · .gitignore (10 pts)

Escreve .gitignore apropriado para projeto Node.js + React.

Parte III · GitHub

Exercício 5 · Ligar a GitHub (10 pts)

O Pedro tem no computador o repositório horario-turmas, com três commits. Entretanto, ao criar o repositório no GitHub, deixou marcada a opção de criar um README, por isso o remoto já tem um commit. Ele fez:

git remote add origin https://github.com/pedro-exemplo/horario-turmas.git
git push -u origin main

e recebeu uma recusa:

! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://github.com/pedro-exemplo/horario-turmas.git'

a) Explica porque é que o push foi recusado. b) Indica os comandos para integrar os dois historiais e enviar o trabalho, sem usar --force. c) Depois de o repositório ficar sincronizado, o Pedro quer deixar de usar HTTPS e passar a usar SSH. Indica o comando para mudar o endereço do remoto e como confirmar. d) Dá uma razão para não resolver (b) com git push --force.

Exercício 6 · README profissional (10 pts)

Escreve um modelo de README.md para um projeto de calculadora em Python.

Parte IV · Pull Requests

Exercício 7 · Criar PR (10 pts)

Descreve workflow completo para criar Pull Request.

Exercício 8 · Resolução de conflito (10 pts)

Num site de uma associação, a branch limpeza apagou o ficheiro contactos.html (a página passou a estar dentro de sobre.html) e alterou a cor de estilo.css. Entretanto, na main, outra pessoa corrigiu o telefone em contactos.html e mudou a mesma linha de cor em estilo.css. Ao fundir:

git switch main
git merge limpeza

o Git devolve:

CONFLICT (content): Merge conflict in estilo.css
CONFLICT (modify/delete): contactos.html deleted in limpeza and modified in HEAD.  Version HEAD of contactos.html left in tree.
Automatic merge failed; fix conflicts and then commit the result.

a) Explica o que significa cada uma das duas linhas CONFLICT. b) Indica como resolver estilo.css, sabendo que a equipa decidiu ficar com a cor da main. c) Indica como resolver contactos.html, sabendo que a página deixa de existir mas o telefone novo tem de passar para sobre.html. d) Conclui o merge e diz como confirmar que ficou tudo resolvido. e) Se esta integração fosse feita com git rebase main a partir da limpeza, o que se inverte em --ours e --theirs?

Parte V · Historial, tags e cliente gráfico

Exercício 9 · Corrigir e desfazer (10 pts)

No repositório diario-de-bordo, a Inês tem cinco problemas. Para cada um, indica os comandos e justifica:

a) Gravou o commit "Acrescentar capa" mas esqueceu-se do ficheiro capa.png. O commit ainda só existe no seu computador e a mensagem está certa. b) Num único commit local juntou duas tarefas diferentes (notas.txt e indice.md) e quer que fiquem em dois commits separados. c) Na branch feature/agenda fez o commit f4e5d6c, que corrige uma data errada. A correção tem de ir já para a main, sem levar o resto da branch. d) Apagou com git branch -D experiencia uma branch que ainda não tinha sido fundida. Tinha trabalhado nela ontem. e) Quer saber quem alterou a linha 12 de notas.txt e o que mais mudou nesse commit.

Exercício 10 · Tags e versões (10 pts)

O projeto inventario-sala já está no GitHub. Indica os comandos e responde:

a) A versão entregue há duas semanas corresponde ao commit 9c41e07, mas ninguém a marcou. Cria nesse commit a tag anotada v1.2.0 e envia-a. b) Uma colega criou a v1.3.0 com git tag v1.3.0, sem -a. Como confirmas o tipo de tag e porque é que isso importa numa versão publicada? c) Afinal a v1.3.0 ficou no commit errado: deve estar no commit atual (HEAD). Corrige localmente e no GitHub, como tag anotada. d) Para reproduzir um erro, precisas de ver o projeto exatamente como estava na v1.2.0 e, no fim, voltar à main. e) Que número leva a versão seguinte à 1.3.0 em cada caso: só a correção de um erro; um relatório novo compatível com o que existe; um formato de ficheiro novo que deixa de abrir os dados antigos?