Pular para conteúdo

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:

  1. Seleção: Escolher quais mudanças serão commitadas
  2. Preparação: Preparar arquivos para o próximo commit
  3. Controle: Ter controle granular sobre o que será versionado
  4. Organização: Separar mudanças em commits lógicos

Como funciona internamente?

Quando o GIT_ADD é executado, o sistema:

  1. Recebe paths: Obtém lista de arquivos/padrões para adicionar
  2. Valida repositório: Verifica se é um repositório Git válido
  3. Substitui variáveis: Aplica variáveis do contexto
  4. Executa add: Roda git add [paths]
  5. Se erro: Lança exceção (arquivo não encontrado, etc)
  6. 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

  1. Commit seletivo: "Adicionar apenas arquivos de configuração"
  2. Automação: "Adicionar todos arquivos modificados automaticamente"
  3. Geração de código: "Adicionar arquivos gerados ao staging"
  4. 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 .gitignore para 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