| 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) |
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.
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 --graphExercí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 popExercí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.
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.
Ainda não instalou as ferramentas? Siga antes o Guia de preparação do ambiente.
- Acesse
https://github.com/tiagolpadua/php-moderno-agenda-eventose clique em Use this template → Create a new repository. - Crie o repositório na sua conta, como público, com o nome
php-moderno-agenda-eventos. - 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"- No GitHub, abra a issue "Adicionar seção Autor no README".
- 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- Abra o PR com
Closes #1na descrição, revise o diff e faça o merge. - Confirme que a issue foi fechada automaticamente e atualize sua
mainlocal comgit switch main && git pull.
- Crie a branch
ajuste-subtitulo. Emtemplates/layout.php, altere o subtítulo paraMentoria CREMESP · PHP Moderno · Turma 2026. Faça o commit, o push e abra o PR, sem fazer o merge. - Simulando um colega: pela interface web do GitHub, edite a mesma linha na
mainparaMentoria CREMESP · Trilha DevOpse faça o commit direto namain. - 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- Faça o merge do PR.
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 testNa 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.
- Crie o arquivo
.github/dependabot.yml(via PR) configurando atualizações semanais para os ecossistemascomposeregithub-actions. Consulte a referência oficial. - Em Settings → Advanced Security (ou Code security, conforme a interface), ative: Dependabot alerts, Dependabot security updates e Push protection do secret scanning.
- 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.
- Observe que o seu CI da Parte D rodou no PR do Dependabot. Se ficou verde, faça o merge.
- 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
CIrodando e verde namain -
dependabot.ymlconfigurado e pelo menos 1 PR do Dependabot aberto - Push protection ativado
Traga para a monitoria (ou envie antes) o link do seu repositório. Vamos abrir alguns PRs ao vivo para comentar.
- 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.mdo badge de status do workflow. - Padronize suas mensagens de commit com Conventional Commits.
| 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) |
- 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-worldfuncionando (preparação para a semana 2)
| 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) |
Git
- Pro Git (livro oficial, em português): capítulos 2 (Fundamentos) e 3 (Branches)
GitHub Docs
- GitHub flow
- Criar um repositório a partir de um modelo
- Vinculando uma pull request a um problema
- Resolver um conflito de merge usando a linha de comando
- Guia rápido do GitHub Actions
- Sintaxe de fluxo de trabalho do GitHub Actions
- Configurar atualizações de versão do Dependabot
- Referência de opções do Dependabot
- Alertas do Dependabot
- Proteção de push
- Sobre o Projects
- Configurar modelos de issue
Leituras complementares