Curso profissional · 25h · Tools essenciais para developers
projecto.html projecto_v2.html projecto_v3.html projecto_v3_FINAL.html projecto_v3_FINAL_v2.html projecto_FINAL_FINAL.html projecto_NOVO_FINAL.html projecto_FINAL_REAL.html
Caos:
Git = sistema de controlo de versões distribuído.
# Identificação (1x apenas) git config --global user.name "Teu Nome" git config --global user.email "teu@email.com" # Verificar git config --list
# Iniciar repo num projecto novo git init # Ver estado dos ficheiros git status # Adicionar ficheiros ao próximo commit git add ficheiro.txt git add . # tudo # Criar commit git commit -m "Mensagem descritiva" # Ver histórico git log git log --oneline # compacto
1. Working Directory (ficheiros que editas) ↓ git add 2. Staging Area (preparado para commit) ↓ git commit 3. Local Repository (histórico) ↓ git push 4. Remote Repository (GitHub)
Ficheiros que não queres versionar:
# .gitignore # Dependências node_modules/ __pycache__/ # Build dist/ build/ *.pyc # Editor .vscode/ .idea/ .DS_Store # Configs sensíveis .env *.key secrets.json
Sempre commit .gitignore logo no início.
.gitignore
main: A--B--C--D \ feature: E--F--G
main: versão estável. feature: nova funcionalidade isolada.
Permite experimentar sem afectar o resto.
# Ver branches git branch git branch -a # incluir remotas # Criar nova branch git branch feature/login # Mudar para branch git checkout feature/login # Criar + mudar de uma vez git checkout -b feature/login # Apagar branch git branch -d feature/login
# Estar na branch destino git checkout main # Trazer mudanças da feature git merge feature/login # Apagar feature após merge git branch -d feature/login
Resultado:
main: A--B--C--D--------M \ / feature: E--F--G
Merge: cria commit de merge (M acima).
Rebase: reescreve histórico.
git rebase main
Para iniciantes, usar merge primeiro.
GitHub = plataforma cloud para repositórios Git.
Alternativas: GitLab, Bitbucket.
# Primeira vez - já tens projecto local git remote add origin https://github.com/utilizador/repo.git # Push primeira vez git push -u origin main # Push subsequentes git push
# Ou: clonar repo existente git clone https://github.com/utilizador/repo.git cd repo
HTTPS: pedido de password/token a cada push.
SSH (recomendado):
# Gerar chave SSH ssh-keygen -t ed25519 -C "teu@email.com" # Mostrar chave pública cat ~/.ssh/id_ed25519.pub # Copiar e colar nas Settings → SSH Keys do GitHub
1. Fork (se não és colaborador) ou clone 2. Branch nova (feature/x) 3. Trabalhar, commits 4. Push para o teu fork/repo 5. Abrir Pull Request no GitHub 6. Code review 7. Discussão, ajustes 8. Approve + Merge
PR = mecanismo de revisão de código.
Como reviewer:
Como autor:
Branches:
Mais complexo, ideal para projectos grandes.
Fluxo:
Recomendado para a maioria dos projectos.
Conventional commits:
<tipo>(<scope>): <descrição> [body] [footer]
Tipos:
feat
fix
docs
style
refactor
test
chore
Exemplos:
feat(auth): add OAuth2 login
fix(cart): correct tax calculation
Quando 2 branches modificam a mesma linha do mesmo ficheiro.
git merge feature/x # Auto-merging file.txt # CONFLICT (content): Merge conflict in file.txt
Ficheiro fica assim:
<<<<<<< HEAD Linha vinda do main ======= Linha vinda da feature >>>>>>> feature/x
Editar manualmente:
<<<
===
>>>
# Após resolver git add ficheiro.txt git commit
Preferir uma versão completamente:
git checkout --ours ficheiro.txt # versão actual git checkout --theirs ficheiro.txt # versão a fundir
Abortar merge:
git merge --abort
Ferramentas visuais: VSCode, GitKraken, SourceTree.
Pequenos e atómicos (1 propósito). Mensagens claras e descritivas. Verbos no imperativo ("Add feature" não "Added"). Inglês (norma internacional). Frequentes (vários por dia).
Commits gigantes com 50 ficheiros. "fix" como mensagem. Commits com código que não compila.
Naming claro: feature/add-login, fix/checkout-bug. Vida curta (< 1 semana). Sincronizar com main regularmente. Apagar após merge.
feature/add-login
fix/checkout-bug
Branches eternas. Nomes vagos: temp, test, branch1.
temp
branch1
Pequenos (< 400 linhas). Descrição completa. Tests incluídos. Review antes de merge.
PRs gigantes (1000+ linhas). Sem descrição. Self-merge sem review.
NUNCA commit:
Use .env + .gitignore.
.env
Se acidentalmente commitou secret: