diff --git a/GITEA-COMMANDS.md b/GITEA-COMMANDS.md new file mode 100644 index 0000000..33f7330 --- /dev/null +++ b/GITEA-COMMANDS.md @@ -0,0 +1,177 @@ +# Gitea — Comandos de Fluxo (commit · push · Branch+PR · ponteiro · nested · gitlink) + +Referência prática do fluxo git deste stack. **Servidor Gitea:** `git.clube67.com` (SSH `10.99.0.3`). + +## Topologia dos repositórios + +``` +/home/deploy/stack ← repo PAI (clube67_newwhats.local) +└── scoreodonto.com ← repo ANINHADO (gitlink, SEM .gitmodules) +``` + +| Repo | Caminho | Remote | +|------|---------|--------| +| **Pai** | `/home/deploy/stack` | `ssh://git@10.99.0.3/ruicesar/clube67_newwhats.local.git` | +| **Nested** | `/home/deploy/stack/scoreodonto.com` | `ssh://git@10.99.0.3/ruicesar/scoreodonto.com.git` | + +> O `scoreodonto.com` é um **gitlink** (entrada `160000` na árvore do pai), não um submódulo registrado em `.gitmodules`. O pai guarda só o **SHA** do commit do nested (o "ponteiro"). + +> ⚠️ **Regra de ouro:** ao publicar, **nested PRIMEIRO**, depois o pai — o ponteiro do pai precisa apontar para um commit que **já exista** no remoto do nested. + +> ⚠️ **NUNCA** `git push --force` na `main` (destrói histórico compartilhado do Gitea). + +--- + +## 1. Commit + +### Nested (mudanças de código em `scoreodonto.com/`) +```bash +cd /home/deploy/stack/scoreodonto.com +git add # ou: git add -A +git commit -m "feat(x): descrição + +Co-Authored-By: Claude Opus 4.8 " +``` + +### Pai (configs/docs fora do nested) +```bash +cd /home/deploy/stack +git add +git commit -m "chore(infra): descrição" +``` + +--- + +## 2. Push direto na main (fast-forward) + +Use quando a `main` local está à frente e **0 atrás** do remoto. + +```bash +cd /home/deploy/stack/scoreodonto.com # ou o pai +git fetch origin +git rev-list --left-right --count main...origin/main # confira "N 0" (0 atrás) +git push origin main +``` + +--- + +## 3. Branch + PR (quando quiser revisão antes da main) + +```bash +cd /home/deploy/stack/scoreodonto.com +# empurra a branch (cria no remoto) +git push -u origin minha-branch +# …ou empurrando a main local p/ uma branch remota sem checkout: +git push origin main:refs/heads/minha-branch +``` + +O Gitea responde com a URL do PR: +``` +remote: Create a new pull request for 'minha-branch': +remote: https://git.clube67.com/ruicesar/scoreodonto.com/pulls/new/minha-branch +``` + +**Abrir o PR:** acessar essa URL no navegador (não há `gh`/CLI p/ Gitea aqui). + +### Concluir o merge via git (alternativa à UI — só se for fast-forward) +```bash +git push origin minha-branch:main # FF da branch p/ main remota +``` + +### Após o merge: alinhar a main local +```bash +git fetch origin +git merge --ff-only origin/main # main local = remota (sem mudar arquivos se a árvore for igual) +``` + +### Limpar a branch mergeada +```bash +git branch -d minha-branch # local +git push origin --delete minha-branch # remoto +``` + +--- + +## 4. Ponteiro / gitlink (atualizar o que o PAI aponta no nested) + +Sempre **depois** que o commit do nested já está no remoto. + +### Forma simples (working tree do nested já no commit desejado) +```bash +cd /home/deploy/stack/scoreodonto.com +git rev-parse --short HEAD # ex.: ca7eba4 (commit alvo, já pushado) + +cd /home/deploy/stack +git add scoreodonto.com # captura o novo SHA do gitlink +git diff --cached scoreodonto.com # confere: - + +git commit -m "chore(infra): bump scoreodonto.com -> ca7eba4" +git push origin main +``` + +### Forma não-destrutiva (sem mexer no checkout/HEAD do pai, preservando WIP) +Cria a branch via plumbing, útil quando o working tree do pai tem outras mudanças: +```bash +cd /home/deploy/stack +FULL=$(cd scoreodonto.com && git rev-parse HEAD) # SHA completo do nested +export GIT_INDEX_FILE=/tmp/p.idx +git read-tree origin/main # base = main remota +git update-index --cacheinfo 160000,$FULL,scoreodonto.com +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -p origin/main -m "chore(infra): bump scoreodonto.com -> ${FULL:0:7}") +git branch -f minha-branch $COMMIT +unset GIT_INDEX_FILE; rm -f /tmp/p.idx +git push origin minha-branch # depois: PR ou ff p/ main +``` + +--- + +## 5. Verificações úteis + +```bash +# Sincronia com o remoto (quer "0 0") +git fetch origin && git rev-list --left-right --count main...origin/main + +# main local é fast-forwardável p/ o remoto? +git merge-base --is-ancestor main origin/main && echo "FF ok" || echo "divergiu" + +# refs reais no servidor (sem cache local) +git ls-remote origin | grep -E "refs/heads/(main|)" + +# valor atual do gitlink no pai +cd /home/deploy/stack && git ls-tree HEAD scoreodonto.com +``` + +--- + +## 6. Reconciliação quando divergiu (resumo seguro) + +Quando local e remoto divergem mas o **conteúdo local é superset** (contém todo o trabalho remoto): + +```bash +cd /home/deploy/stack/scoreodonto.com +git tag backup-pre-merge-$(date +%Y%m%d-%H%M%S) main # backup +# provar superset: nenhum arquivo remoto-exclusivo, nenhuma rota/guard perdida +comm -23 <(git diff --name-only origin/main|sort) <(git diff --name-only main|sort) +git merge -s ours origin/main -m "merge: reconcilia (árvore local é superset do remoto)" +# validar antes de publicar: npx tsc --noEmit && npx vite build (em frontend/) +``` + +### Alinhar a main do PAI preservando WIP (reset mixed, não --hard) +```bash +cd /home/deploy/stack +git fetch origin +git reset origin/main # move ref+index p/ a remota; NÃO toca working tree (preserva WIP) +``` + +--- + +## 7. Deploy DEV (após mudar código) + +`dev.scoreodonto.com` serve imagem **buildada** (não HMR) → rebuild manual: +```bash +cd /home/deploy/stack/scoreodonto.com +docker compose build scoreodonto-frontend && docker compose up -d --force-recreate scoreodonto-frontend +docker compose build scoreodonto-backend && docker compose up -d --force-recreate scoreodonto-backend +# conferir bundle novo: +curl -s https://dev.scoreodonto.com/ | grep -oE '/assets/index-[A-Za-z0-9_]+\.js' | head -1 +```