Damos-te as boas vindas ao teu primeiro HackerWorkshop do teu estágio: Workshop de Git! O objetivo é jogar The Resistence enquanto aprendes git. Se nunca jogaste The Resistence, podes encontrar as regras aqui, mas a ideia geral do jogo é aprovar 3 missões com sucesso enquanto que os x-biters vão tentar sabotar 3 missões sem serem descobertos.
-
presencas.md (Ficheiro vazio, será preenchido por todos no final do jogo).
-
missao_01/ ➝ contém equipa_atual.md
-
missao_02/ ➝ contém equipa_atual.md
-
missao_03/ ... (até à missão 5)
Antes do jogo começar, o admin deve:
-
Adicionar Participantes:
- Adicionar um a um todos os participantes do workshop ao repositório
- Dar-lhes permissão de escrita (Write access)
-
Configurar Regras de Votação:
- Ir a Settings > Rules > Rulesets > voting
- Em Require a pull request before merging, clicar em Show additional settings
- Alterar Required approvals para
(número de pessoas / 2) + 1(maioria de aprovações é suficiente)
-
Durante o Jogo:
- O admin pode passar a fase das votações e fazer merge manualmente da branch na main quando necessário
Por padrão, todos os estagiários são HACKERS (Resistência).
Apenas os x-biters (impostores) recebem uma mensagem privada no Discord antes do jogo começar.
Antes de começares a jogar, confirma se não recebeste mensagem privada no Discord:
-
Toda a gente se reúne em círculo.
-
Um objeto físico (o "Token de Líder") passa de mão em mão para definir a pessoa Líder da ronda atual.
-
A pessoa escolhida como Líder cria uma nova branch localmente (ex: equipa-ronda-1).
-
Edita o ficheiro missao_X/equipa_atual.md e escreve os nomes d@s estagiári@s que quer levar para a missão.
-
Faz Commit e Push:
- Na primeira vez que fazes push de uma branch nova, usa:
git push -u origin nome-da-branch - Isto conecta a branch local à remota. Nas próximas vezes podes só fazer
git push.
- Na primeira vez que fazes push de uma branch nova, usa:
-
Abre um Pull Request (PR) para a main:
- Ir a
https://github.com/HackerSchool/HackerWorkshop-Git/tree/branch_correspondente - Clicar no botão "Compare & pull request" que aparece
- Ir a
-
Tod@s vão ao GitHub ver o PR.
-
Como votar:
- Ir a Pull Requests na página de GitHub do repo
- Clicar no título do pull request correspondente
- Ir a Commits
- Clicar no último commit feito
- Clicar em Review
- Selecionar Approve (para aprovar a equipa) ou Request Changes (para recusar a equipa)
- Clicar em Submit review
-
Contagem: O Game Master verifica o PR.
-
Maioria Rejeita: A pessoa Líder fecha o PR. O Token passa para a próxima pessoa.
-
Maioria Aprova: O Game Master faz Merge do PR para a main (se tiver maioria isto é feito automaticamente). A missão avança!
-
-
Apenas os membros listados no equipa_atual.md jogam nesta fase.
-
Os membros da equipa fazem git pull.
-
Configuração de Anonimato (OBRIGATÓRIO):
Devem correr estes comandos na consola para não serem identificados no histórico:
IMPORTANTE: Não pode haver "xb" ou "hacker" no nome, para não ser identificável. Usa sempre:
git config --local user.name "anonymous" git config --local user.email "[email protected]"
-
A Ação:
Criam um ficheiro novo dentro da pasta da missão com um nome aleatório (ex: voto_a8j2k.md ou voto_19283.md) para evitar conflitos.
-
O Voto:
Dentro desse ficheiro escrevem apenas uma palavra:
-
SUCESSO (Resistência deve votar sempre isto; x-biters podem votar isto para disfarçar).
-
FALHA (Apenas x-biters podem votar isto).
-
-
Envio:
Fazem git add, git commit e git push.
-
O Game Master faz git pull na main.
-
Todos abrem a pasta da missão e verificam os ficheiros de voto.
-
Verificam se a missão teve Sucesso (0 falhas*) ou se Falhou (1 ou mais falhas).
- (Nota: Na missão 4, são precisas 2 falhas, dependendo se nº de jogadores > 7).
Assim que uma equipa chegar às 3 vitórias:
-
O jogo termina.
-
Exercício Final (Conflitos): Todos os estagiários devem, ao mesmo tempo, editar o ficheiro presencas.md na raiz, colocar o seu nome real e fazer push.
-
Garante que ninguém faz git pull durante as missões até todos terem votado, para não verem os votos a chegar um a um.
-
Se alguém se esquecer de mudar o git config, o commit vai aparecer com o nome e foto verdadeiros no GitHub. É "Game Over" para essas pessoas, então é melhor reforçar este ponto.
Cheat sheet aqui.
"Instalei o Git mas o comando não funciona!"
- 👉 Reinicia o terminal (fecha e volta a abrir).
"Tento fazer push e dá erro!"
- 👉 Provavelmente alguém fez alterações no GitHub que tu não tens. Faz primeiro
git pull(traz as novidades) e depois tenta de novo.
"Quando tento fazer push para a minha branch, dá erro tipo 'no upstream branch' ou 'branch diverged'!"
-
👉 Problema: A tua branch local não está "conectada" (tracking) à branch remota. Isto acontece quando crias uma branch local mas não especificas para onde fazer push.
-
👉 Solução: Na primeira vez que fazes push de uma branch nova, usa o flag
-u(ou--set-upstream):git push -u origin nome-da-tua-branch
Isto conecta a branch local à remota e nas próximas vezes podes só fazer
git push. -
👉 Se a branch remota já existe mas criaste uma nova local sem tracking:
- Verifica se a branch remota existe:
git branch -r(lista branches remotas) - Se existir, conecta a tua branch local:
git branch --set-upstream-to=origin/nome-da-branch nome-da-tua-branch-local - Ou simplesmente:
git push -u origin nome-da-tua-branch-local
- Verifica se a branch remota existe:
-
👉 Dica: Quando criares uma branch nova, em vez de
git checkout -b nova-branch, podes usar:git checkout -b nova-branch origin/main # Cria baseada na main remotaOu se já existe a branch remota:
git checkout -b nova-branch origin/nova-branch # Cria local baseada na remota
"No Linux, quando tento fazer push pede-me para iniciar sessão constantemente!"
-
👉 Solução Recomendada (Gráfica e Duradoura): Instala o Git Credential Manager (GCM) que permite autenticação através do browser e guarda as credenciais automaticamente:
Ubuntu/Debian:
sudo apt-get update sudo apt-get install git-credential-manager git config --global credential.credentialStore cache
Fedora/RHEL:
sudo dnf install git-credential-manager git config --global credential.credentialStore cache
Arch Linux:
sudo pacman -S git-credential-manager git config --global credential.credentialStore cache
Depois de instalar, na primeira vez que fizeres
git push, vai abrir o browser para autenticares. As credenciais ficam guardadas e não precisas de fazer isto novamente! -
👉 Alternativa (SSH - Mais Permanente): Se preferires usar SSH keys (não precisas de autenticar sempre):
- Gera uma chave SSH:
ssh-keygen -t ed25519 -C "[email protected]"(pressiona Enter para aceitar o caminho padrão) - Adiciona a chave ao ssh-agent:
eval "$(ssh-agent -s)"e depoisssh-add ~/.ssh/id_ed25519 - Copia a chave pública:
cat ~/.ssh/id_ed25519.pub(copia todo o output) - No GitHub: Settings > SSH and GPG keys > New SSH key > Cola a chave e guarda
- Muda o remote do repo para usar SSH:
git remote set-url origin [email protected]:HackerSchool/HackerWorkshop-Git.git
- Gera uma chave SSH:

