docs: cheatsheet de fluxo Gitea (commit/push/Branch+PR/ponteiro/gitlink/nested)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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 <arquivos> # ou: git add -A
|
||||
git commit -m "feat(x): descrição
|
||||
|
||||
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"
|
||||
```
|
||||
|
||||
### Pai (configs/docs fora do nested)
|
||||
```bash
|
||||
cd /home/deploy/stack
|
||||
git add <arquivos>
|
||||
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: -<sha antigo> +<sha novo>
|
||||
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|<branch>)"
|
||||
|
||||
# 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 <base> origin/main|sort) <(git diff --name-only <base> 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
|
||||
```
|
||||
Reference in New Issue
Block a user