Skip to content

Instantly share code, notes, and snippets.

@tiagolpadua
Created October 5, 2026 12:56
Show Gist options
  • Select an option

  • Save tiagolpadua/920dd0c9cec883bb9c816c879f4adfd9 to your computer and use it in GitHub Desktop.

Select an option

Save tiagolpadua/920dd0c9cec883bb9c816c879f4adfd9 to your computer and use it in GitHub Desktop.
Mentoria CREMESP · PHP Moderno — Atividades da Semana 1 (GitHub)

Atividades · Semana 1 — DevOps: trabalhando com repositórios no GitHub

Monitoria 13/10/2026 · 16h–17h · remoto
Curso Alura DevOps: trabalhando com repositórios no GitHub
Projeto php-moderno-agenda-eventos: criar o seu repositório e praticar o fluxo completo do GitHub
Repositório-modelo tiagolpadua/php-moderno-agenda-eventos
Preparação do ambiente Guia de preparação do ambiente
Prazo da tarefa Antes da próxima mentoria (20/10)

1. Objetivos de aprendizagem

Ao final da semana você deve conseguir:

  • Usar os comandos essenciais do Git no dia a dia (clone, switch, add, commit, push, pull, merge).
  • Trabalhar no fluxo issue → branch → commit → pull request → revisão → merge.
  • Identificar e resolver um conflito de merge.
  • Comparar estratégias de ramificação (GitFlow, GitHub flow, trunk-based) e escolher a adequada ao contexto.
  • Criar um primeiro workflow no GitHub Actions.
  • Ativar os recursos de segurança do repositório: Dependabot e proteção de push de segredos.

2. Exercícios de fixação

Faça em um repositório de rascunho (git init treino-git), separado do projeto.

Exercício 1 — Linha do tempo. Crie um arquivo notas.txt e faça 3 commits alterando-o. Mostre o histórico em uma linha por commit, com o grafo.

Gabarito
git log --oneline --graph

Exercício 2 — Desfazendo coisas. (a) Altere notas.txt e descarte a alteração sem commitar. (b) Altere, dê git add e tire do staging. (c) Corrija a mensagem do último commit. (d) Desfaça um commit antigo sem reescrever o histórico.

Gabarito
git restore notas.txt            # (a)
git restore --staged notas.txt   # (b)
git commit --amend -m "nova msg" # (c) só em commits ainda não publicados!
git revert <hash>                # (d)

git reset reescreve o histórico. Evite em commits que já foram para o GitHub.

Exercício 3 — Fast-forward × merge commit. Crie a branch feature-a, faça 1 commit e faça o merge na main sem nenhum commit novo na main. Depois repita com feature-b, mas faça também um commit na main antes do merge. Compare os dois grafos.

Gabarito

No primeiro caso o Git só "avança o ponteiro" (fast-forward). No segundo, ele cria um commit de merge com dois pais. Use git log --oneline --graph --all para ver a diferença.

Exercício 4 — Interrupção urgente. Você está no meio de uma alteração e precisa corrigir algo na main. Guarde o trabalho, troque de branch, volte e recupere o que guardou.

Gabarito
git stash
git switch main   # ...corrige, commita...
git switch minha-branch
git stash pop

Exercício 5 — Conflito local. Provoque um conflito alterando a mesma linha em duas branches e resolva-o.

Gabarito

Depois do git merge, abra o arquivo, remova os marcadores <<<<<<<, ======= e >>>>>>> deixando o conteúdo final, e rode git add notas.txt && git commit.

Exercício 6 — Qual estratégia? Para cada cenário, GitFlow ou GitHub flow? (a) Portal web publicado várias vezes por semana. (b) Sistema instalado em servidores de clientes, com versões 2.x e 3.x mantidas em paralelo.

Gabarito

(a) GitHub flow: entrega contínua, só a main é permanente. (b) GitFlow: as branches de release e hotfix ajudam a manter várias versões em paralelo.


3. Tarefa do projeto

Contexto

Você recebeu o projeto Agenda de Eventos e vai usá-lo durante toda a trilha. Nesta semana você monta o seu repositório e pratica o fluxo de trabalho que vamos usar nas próximas 5 semanas: toda mudança entra por pull request.

Parte A — Seu repositório

Ainda não instalou as ferramentas? Siga antes o Guia de preparação do ambiente.

  1. Acesse https://github.com/tiagolpadua/php-moderno-agenda-eventos e clique em Use this template → Create a new repository.
  2. Crie o repositório na sua conta, como público, com o nome php-moderno-agenda-eventos.
  3. Clone e rode a aplicação. Se não tiver PHP instalado, use o Codespaces: veja o README.md.
git clone https://github.com/<seu-usuario>/php-moderno-agenda-eventos.git
cd php-moderno-agenda-eventos
git config user.name "Seu Nome"
git config user.email "seu-email@exemplo.com"

Parte B — Fluxo issue → branch → PR

  1. No GitHub, abra a issue "Adicionar seção Autor no README".
  2. Crie uma branch, faça a alteração e publique:
git switch -c docs/readme-autor
# edite o README.md: adicione a seção "## Autor" com seu nome
git add README.md
git commit -m "docs: adiciona seção de autor no README"
git push -u origin docs/readme-autor
  1. Abra o PR com Closes #1 na descrição, revise o diff e faça o merge.
  2. Confirme que a issue foi fechada automaticamente e atualize sua main local com git switch main && git pull.

Parte C — Conflito proposital

  1. Crie a branch ajuste-subtitulo. Em templates/layout.php, altere o subtítulo para Mentoria CREMESP · PHP Moderno · Turma 2026. Faça o commit, o push e abra o PR, sem fazer o merge.
  2. Simulando um colega: pela interface web do GitHub, edite a mesma linha na main para Mentoria CREMESP · Trilha DevOps e faça o commit direto na main.
  3. Volte ao PR: o GitHub vai indicar conflito. Resolva pela linha de comando:
git switch ajuste-subtitulo
git fetch origin
git merge origin/main        # conflito!
# edite templates/layout.php e escolha o texto final
git add templates/layout.php
git commit                   # conclui o merge
git push
  1. Faça o merge do PR.

Parte D — Primeira Action

Na sua main (via branch + PR, como na Parte B), crie o arquivo .github/workflows/ci.yml:

name: CI

on:
  push:
    branches: [main]
  pull_request:

jobs:
  testes:
    name: Testes (PHPUnit)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: shivammathur/setup-php@v2
        with:
          php-version: "8.4"
          tools: composer
      - run: composer install --no-interaction --no-progress
      - run: composer test

Na descrição do PR, explique com suas palavras o que cada step faz. Confira na aba Actions que o workflow rodou e ficou verde ✅ no próprio PR.

Parte E — Dependabot e segurança

  1. Crie o arquivo .github/dependabot.yml (via PR) configurando atualizações semanais para os ecossistemas composer e github-actions. Consulte a referência oficial.
  2. Em Settings → Advanced Security (ou Code security, conforme a interface), ative: Dependabot alerts, Dependabot security updates e Push protection do secret scanning.
  3. Aguarde o Dependabot abrir um PR. O projeto usa propositalmente uma versão mais antiga do PHPUnit. Se demorar, vá em Insights → Dependency graph → Dependabot → Check for updates.
  4. Observe que o seu CI da Parte D rodou no PR do Dependabot. Se ficou verde, faça o merge.

Critérios de aceite

  • Repositório próprio criado a partir do template
  • Issue #1 fechada automaticamente por um PR mergeado
  • PR do conflito com o commit de merge da resolução no histórico
  • Workflow CI rodando e verde na main
  • dependabot.yml configurado e pelo menos 1 PR do Dependabot aberto
  • Push protection ativado

Como entregar

Traga para a monitoria (ou envie antes) o link do seu repositório. Vamos abrir alguns PRs ao vivo para comentar.


4. Desafio extra (opcional)

  • Crie um modelo de issue (.github/ISSUE_TEMPLATE/tarefa.yml) com os campos "Objetivo" e "Critérios de aceite", e um modelo de PR (.github/pull_request_template.md).
  • Crie um GitHub Project (quadro Kanban) vinculado ao repositório e mova as issues da semana pelas colunas.
  • Adicione ao README.md o badge de status do workflow.
  • Padronize suas mensagens de commit com Conventional Commits.

5. Erros comuns

Sintoma Causa provável Solução
Authentication failed no push O GitHub não aceita senha da conta via HTTPS Use o Git Credential Manager, um Personal Access Token ou SSH
! [rejected] ... (fetch first) O remoto tem commits que você ainda não tem git pull (resolva conflitos, se houver) e depois git push
Commitei na main por engano (sem push) Esqueceu de criar a branch git switch -c minha-branch (leva o commit) → git switch main → git reset --hard origin/main
Workflow não aparece na aba Actions Caminho ou YAML incorretos O arquivo precisa estar em .github/workflows/ e o YAML não aceita tabs. Confira a indentação
Dependabot não abriu PR Agenda semanal ainda não rodou Insights → Dependency graph → Dependabot → Check for updates
Arquivos inteiros aparecem como alterados (Windows) Quebra de linha CRLF × LF git config --global core.autocrlf true (o projeto tem .editorconfig com LF)

6. Checklist da semana

  • Curso da semana concluído na plataforma Alura
  • Exercícios de fixação 1 a 6
  • Tarefa do projeto: partes A a E
  • Docker instalado e docker run hello-world funcionando (preparação para a semana 2)

7. Apoio: no curso × hoje

No curso você pode ver Hoje (out/2026)
Branch padrão master Repositórios novos no GitHub usam main
git checkout -b / git checkout -- arquivo git switch -c / git restore arquivo (ambos funcionam)
GitFlow como fluxo "padrão" GitHub flow / trunk-based para aplicações web com entrega contínua
Versões antigas de actions (ex.: actions/checkout@v2) Use a versão atual. O próprio Dependabot avisa quando há versão nova
Projects "clássico" Novo GitHub Projects (tabelas, quadros, roadmap)

8. Apoio: referências oficiais

Git

GitHub Docs

Leituras complementares

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment