# Conceitos básicos de Git

### O que é um repositório?

Um repositório (ou "repo") é uma pasta cujo histórico de alterações é rastreado pelo Git. Toda mudança feita nos arquivos pode ser registrada, revertida e auditada. Os repositórios ficam hospedados no GitLab da UFVJM e cada pessoa trabalha com uma cópia local na própria máquina.

### O que é um commit?

Um commit é um registro permanente de um conjunto de alterações. Cada commit tem:
- Um identificador único
- Uma mensagem descrevendo o que foi alterado
- A data, hora e autoria da mudança

Commits são a unidade básica de histórico do Git. Toda alteração que você quer preservar precisa virar um commit.

### O que é uma branch?

Uma branch (ramo) é uma linha independente de desenvolvimento. Imagine o histórico do repositório como uma linha do tempo: uma branch é uma bifurcação dessa linha onde você pode fazer experimentos e alterações sem afetar o restante.

A branch principal chama-se `main` e representa o estado atual da infraestrutura em produção. **Nunca se trabalha diretamente nela.** Para qualquer alteração, cria-se uma branch nova, faz-se as mudanças lá, e depois integra-se de volta à `main` por meio de um Merge Request.

### O que é push e pull?

- **pull**: baixar as últimas alterações do GitLab para a sua máquina
- **push**: enviar os commits da sua máquina para o GitLab

### O que é um Merge Request (MR)?

Um Merge Request é uma solicitação para integrar as alterações de uma branch de trabalho na `main`. Ele serve como ponto de revisão: outra pessoa analisa o que vai ser feito antes que qualquer coisa seja aplicada em produção.

No GitLab, o MR também dispara o pipeline de CI automaticamente, gerando um preview (plan/diff) das mudanças na infraestrutura.

### O que é um pipeline de CI?

CI significa Continuous Integration (Integração Contínua). O objetivo é que a ada vez que alguma alteração é feita no código, uma automação é executada para sincronizar a infraestrutura com o novo cósigo adicionado no repositório.

O pipeline é um conjunto de scripts que rodam automaticamente no GitLab quando há um push ou um MR. Nos repositórios DICOM, o pipeline verifica e pré-visualiza o que seria alterado na infraestrutura — mas **nunca aplica nada automaticamente**. A aplicação final sempre exige aprovação manual.