GIT_ADD - Adicionar Arquivos à Staging Area
O que é este Node?
O GIT_ADD é o node responsável por adicionar arquivos à staging area do Git, preparando-os para serem commitados. Ele executa o comando git add.
Por que este Node existe?
Antes de criar um commit, precisamos selecionar quais arquivos serão incluídos. O GIT_ADD existe para:
- Seleção: Escolher quais mudanças serão commitadas
- Preparação: Preparar arquivos para o próximo commit
- Controle: Ter controle granular sobre o que será versionado
- Organização: Separar mudanças em commits lógicos
Como funciona internamente?
Quando o GIT_ADD é executado, o sistema:
- Recebe paths: Obtém lista de arquivos/padrões para adicionar
- Valida repositório: Verifica se é um repositório Git válido
- Substitui variáveis: Aplica variáveis do contexto
- Executa add: Roda
git add [paths] - Se erro: Lança exceção (arquivo não encontrado, etc)
- Se sucesso: Retorna confirmação
Código interno (git.executor.ts:130-134):
private async add(repoPath: string, paths: string, context: ExecutionContext): Promise<any> {
const replacedPaths = this.replaceVariables(paths || '.', context.variables);
const output = await this.execGit(repoPath, `add ${replacedPaths}`, context);
return { output, added: true };
}
Quando você DEVE usar este Node?
Use GIT_ADD sempre que precisar de preparar arquivos para commit:
Casos de uso
- Commit seletivo: "Adicionar apenas arquivos de configuração"
- Automação: "Adicionar todos arquivos modificados automaticamente"
- Geração de código: "Adicionar arquivos gerados ao staging"
- Backup: "Preparar arquivos específicos para backup"
Quando NÃO usar GIT_ADD
- Sem mudanças: Não há arquivos para adicionar
- Arquivos sensíveis: Não adicione senhas, tokens, etc
- Arquivos temporários: Use .gitignore ao invés
Parâmetros Detalhados
repositoryPath (string, obrigatório)
O que é: Caminho absoluto para o repositório Git onde os arquivos serão adicionados.
Padrão: Nenhum (obrigatório informar)
Flow completo para testar:
{
"name": "Teste Git Add - Repository Path",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Path",
"parameters": {
"variable": "repo_path",
"value": "/var/www/projeto"
}
}
},
{
"id": "git_add_1",
"type": "git",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Add Files",
"operation": "add",
"repositoryPath": "{{repo_path}}",
"pathsToAdd": ".",
"responseVariable": "add_result"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Arquivos adicionados ao staging!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "git_add_1" },
{ "source": "git_add_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Execute o flow. Sistema adicionará todos arquivos ao staging.
pathsToAdd (string, opcional)
O que é: Padrão de arquivos a serem adicionados. Pode ser arquivo específico, diretório, ou padrão glob.
Padrão: "." (todos os arquivos modificados)
Exemplos válidos:
- "." - Todos os arquivos
- "src/" - Todos arquivos da pasta src
- "*.js" - Todos arquivos JavaScript
- "config.json" - Arquivo específico
- "src/*.ts" - Arquivos TypeScript em src
Flow completo para testar:
{
"name": "Teste Git Add - Paths To Add",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Padrão",
"parameters": {
"message": "Digite o padrão de arquivos (ex: *.js):",
"variable": "file_pattern"
}
}
},
{
"id": "git_add_1",
"type": "git",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Add Pattern",
"operation": "add",
"repositoryPath": "/var/www/app",
"pathsToAdd": "{{file_pattern}}",
"responseVariable": "add_result"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Resultado",
"parameters": {
"message": "Arquivos {{file_pattern}} adicionados!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "git_add_1" },
{ "source": "git_add_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite "*.json" quando solicitado. Sistema adicionará todos arquivos JSON.
responseVariable (string, opcional)
O que é: Nome da variável onde o resultado será armazenado.
Padrão: Nenhum (resultado não é armazenado)
Estrutura do retorno:
{
"output": "",
"added": true
}
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "add" |
| repositoryPath | string | Sim | Caminho do repositório local |
| pathsToAdd | string | Não | Padrão de arquivos (padrão: ".") |
| responseVariable | string | Não | Variável para armazenar resultado |
Exemplo 1: Add e Commit Completo
Objetivo: Adicionar arquivos e criar commit em sequência
JSON para Importar
{
"name": "Add e Commit Completo",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Início",
"parameters": {
"message": "Preparando arquivos para commit..."
}
}
},
{
"id": "git_add_1",
"type": "git",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Add All",
"operation": "add",
"repositoryPath": "/var/www/docs",
"pathsToAdd": ".",
"responseVariable": "add_result"
}
},
{
"id": "git_commit_1",
"type": "git",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Commit",
"operation": "commit",
"repositoryPath": "/var/www/docs",
"message": "docs: automated documentation update",
"responseVariable": "commit_result"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Documentação atualizada e commitada!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "git_add_1" },
{ "source": "git_add_1", "target": "git_commit_1" },
{ "source": "git_commit_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Preparando arquivos para commit...
Sistema: Documentação atualizada e commitada!
Exemplo 2: Add Seletivo por Tipo
Objetivo: Adicionar apenas arquivos de um tipo específico
JSON para Importar
{
"name": "Add Seletivo",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "switch_1",
"type": "switch",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Selecionar Tipo",
"parameters": {
"variable": "file_type",
"cases": [
{ "value": "config", "output": "*.conf" },
{ "value": "js", "output": "*.js" },
{ "value": "docs", "output": "*.md" }
]
},
"outputVariable": "pattern"
}
},
{
"id": "git_add_1",
"type": "git",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Add Files",
"operation": "add",
"repositoryPath": "/var/www/project",
"pathsToAdd": "{{pattern}}",
"responseVariable": "add_result"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Arquivos {{pattern}} adicionados ao staging!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "switch_1" },
{ "source": "switch_1", "target": "git_add_1" },
{ "source": "git_add_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Arquivos *.md adicionados ao staging!
Exemplo 3: Add com Validação
Objetivo: Verificar mudanças antes de adicionar ao staging
JSON para Importar
{
"name": "Add com Validação",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "git_status_1",
"type": "git",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Check Status",
"operation": "status",
"repositoryPath": "/var/www/app",
"responseVariable": "status_result"
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Tem Mudanças?",
"parameters": {
"condition": "!{{status_result.status}}.includes('nothing to commit')"
}
}
},
{
"id": "git_add_1",
"type": "git",
"position": { "x": 700, "y": 50 },
"data": {
"label": "Add Changes",
"operation": "add",
"repositoryPath": "/var/www/app",
"pathsToAdd": "src/",
"responseVariable": "add_result"
}
},
{
"id": "message_added",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Adicionado",
"parameters": {
"message": "Arquivos do diretório src adicionados ao staging!"
}
}
},
{
"id": "message_no_changes",
"type": "message",
"position": { "x": 700, "y": 150 },
"data": {
"label": "Sem Mudanças",
"parameters": {
"message": "Não há mudanças para adicionar."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "git_status_1" },
{ "source": "git_status_1", "target": "condition_1" },
{ "source": "condition_1", "target": "git_add_1", "label": "true" },
{ "source": "condition_1", "target": "message_no_changes", "label": "false" },
{ "source": "git_add_1", "target": "message_added" },
{ "source": "message_added", "target": "end_1" },
{ "source": "message_no_changes", "target": "end_1" }
]
}
Saída esperada (com mudanças):
Sistema: Arquivos do diretório src adicionados ao staging!
Resposta do Node
{
"output": "",
"added": true
}
Boas Práticas
✅ SIM:
- Adicione apenas arquivos relacionados à mudança
- Use padrões específicos para maior controle
- Verifique status antes de adicionar
- Use
.gitignorepara excluir arquivos automaticamente - Adicione arquivos em grupos lógicos
- Valide que os arquivos existem antes de adicionar
❌ NÃO:
- Não adicione arquivos sensíveis (senhas, tokens)
- Não use
git add .sem verificar o que será adicionado - Não adicione arquivos de build ou temporários
- Não adicione arquivos muito grandes sem necessidade
- Não misture mudanças não relacionadas no mesmo add
Dicas
💡 Dica 1: Use GIT_STATUS antes para ver quais arquivos serão adicionados
💡 Dica 2: Use padrões glob para adicionar apenas tipos específicos de arquivos
💡 Dica 3: Combine com CONDITION para adicionar apenas se houver mudanças
💡 Dica 4: Configure .gitignore para evitar adicionar arquivos indesejados
💡 Dica 5: Sempre verifique o que foi adicionado antes de fazer commit
Próximo Node
→ GIT_COMMIT - Criar commit após adicionar arquivos → GIT_STATUS - Verificar status antes de adicionar → GIT_PUSH - Enviar após commit