Introdução
Um arquivo pode ser útil na sua máquina e, ainda assim, ser inadequado para um commit de código-fonte. Este novo repositório do DeskLite tem uma pequena alteração de negócio e uma configuração privada contendo uma credencial fictícia. O arquivo privado foi adicionado à área de preparação por engano, mas nunca foi incluído em um commit.
Você aprenderá sobre a área de trabalho do Git, a área de preparação e a versão salva em um commit; separará configurações privadas de exemplos para entrega; e usará um scanner de credenciais preparado. Você não precisa de conta Git, repositório remoto ou conhecimento prévio de Git.
Localize as áreas de trabalho e de preparação
Nesta etapa, você identificará quais arquivos o Git está preparando para salvar.
O Git registra versões selecionadas de arquivos em um repositório. Sua árvore de trabalho contém os arquivos que você edita. A área de preparação contém a próxima versão que você pretende incluir em um commit. Um commit salva essa versão preparada no histórico local; ele não envia nada automaticamente.
cd /home/labex/project/desklite-git
git status compara essas áreas:
git status
O terminal preparado pode exibir cores nas categorias de arquivos; o texto é o que importa. Procure duas categorias diferentes. private.env aparece entre as alterações a serem incluídas no commit: seu conteúdo já está preparado. service/app.py aparece entre as alterações não preparadas para commit: sua alteração de negócio ainda está apenas na árvore de trabalho. O nome da branch pode variar e não afeta esta tarefa.
git ls-files lista os caminhos rastreados, incluindo arquivos novos preparados para seu primeiro commit:
git ls-files
O arquivo privado aparece, embora ainda não tenha sido incluído em um commit. Este é o momento de evitar o vazamento. O histórico inicial de commits não contém segredos. Ainda não crie um commit: primeiro inspecione o que entraria nele.
Compare os dois tipos de alteração
Nesta etapa, você comparará a alteração de negócio com a configuração privada na área de preparação.
git --no-pager diff mostra alterações não preparadas. A opção global --no-pager mantém a saída diretamente no terminal, sem a necessidade de fechar um visualizador separado. Limite a comparação ao arquivo de negócio informando seu caminho:
git --no-pager diff service/app.py
Linhas iniciadas por - mostram conteúdo antigo; linhas iniciadas por + mostram conteúdo novo. O novo programa imprime DeskLite tickets ready. Preserve essa alteração de negócio pretendida.
Já git --no-pager diff --cached mostra o conteúdo preparado. A opção --cached seleciona a área de preparação:
git --no-pager diff --cached
Você deve ver private.env e suas chaves SERVICE_NAME e API_TOKEN. O token é fictício e não funciona fora deste curso. Mesmo assim, representa o tipo de valor que deve permanecer privado.
Uma versão na área de preparação pode ser diferente do arquivo atual no disco. Portanto, verificar apenas a árvore de trabalho pode deixar passar algo já preparado para um commit. Antes de criar o commit, inspecione ambos os tipos de alteração.
O repositório já tem uma identidade local de autor de exemplo configurada. Você não fornecerá informações pessoais nem conectará o Git a um serviço externo.
Interprete uma detecção de credencial com o valor ocultado
Nesta etapa, você executará o scanner preparado no arquivo privado e interpretará a detecção.
O Gitleaks detecta padrões de texto associados a credenciais. O inicializador do curso course-secrets executa o Gitleaks 8.24.2 com uma regra local fixa para nosso formato sintético de token labex_. Ele oculta os valores encontrados e não faz requisições de rede. Essa regra limitada do curso não constitui uma política completa de detecção de segredos para produção.
Informe ao inicializador um arquivo ou diretório para examinar seu conteúdo atual:
course-secrets private.env
Espere uma detecção identificada por desklite-practice-token, um nome de arquivo/número de linha e um segredo com o valor ocultado. O comando termina intencionalmente com status 1 porque encontrou uma credencial. Uma detecção é diferente de uma falha ao executar a ferramenta.
Esse comando examina o arquivo atual, independentemente de o Git rastreá-lo. Uma varredura de histórico, apresentada mais adiante, inspeciona as alterações incluídas em commits. Um histórico sem segredos não tornaria seguro adicionar este arquivo ainda não incluído em commits à área de preparação.
Aqui, o valor privado está apenas no conteúdo preparado/da árvore de trabalho. Se uma credencial real já tivesse sido exposta, removê-la de um novo commit não a invalidaria nem apagaria cópias antigas: seu responsável precisaria revogá-la ou substituí-la. Este exercício não ensina a reescrever o histórico.
Separe as configurações privadas do exemplo
Nesta etapa, você removerá as configurações privadas do rastreamento do Git, adicionará uma regra de exclusão de escopo restrito e criará um exemplo público utilizável.
git rm --cached remove um caminho da área de preparação/rastreamento e preserva o arquivo local. Aqui, ele desfaz a inclusão acidental de um novo arquivo privado na área de preparação:
git rm --cached private.env
Abra .gitignore, que informa ao Git quais caminhos não rastreados devem ficar de fora:
nano .gitignore
Insira esta única regra e salve com Ctrl+O, Enter, Ctrl+X:
/private.env
A / inicial ancora a regra na raiz deste repositório. Não ignore service/: ele contém arquivos que devem ser entregues. As regras de exclusão não removem automaticamente arquivos já rastreados nem commits antigos; por isso o comando anterior foi necessário.
Crie um exemplo público usando as mesmas chaves de configuração:
nano service/config.example.env
Salve:
SERVICE_NAME=DeskLite
API_TOKEN=REPLACE_ME
O exemplo informa a um futuro operador quais configurações são necessárias sem fornecer uma credencial funcional. Mantenha o arquivo privado original localmente.
ls private.env
git status
O caminho privado não deve mais estar na área de preparação nem ser listado como não rastreado. .gitignore e o exemplo público devem estar não rastreados e prontos para inclusão deliberada na área de preparação. A alteração de negócio existente permanece não preparada.
Prepare apenas os arquivos de entrega
Nesta etapa, você preparará os arquivos exatos destinados ao próximo commit.
git add copia o conteúdo atual dos caminhos informados para a área de preparação. Informe explicitamente cada arquivo de entrega pretendido:
git add service/app.py service/config.example.env .gitignore
Revise as categorias de arquivos e o conteúdo preparado:
git status
git --no-pager diff --cached
Espere exatamente a alteração de negócio pretendida, a regra de exclusão de escopo restrito e o exemplo seguro. Não deve haver token privado. Se você editar um arquivo novamente após git add, deverá preparar o conteúdo atualizado antes de criar o commit; o Git não substitui automaticamente uma versão preparada anteriormente.
Liste novamente os caminhos rastreados:
git ls-files
Os três caminhos de entrega devem aparecer; private.env não deve. Essa verificação responde a uma pergunta diferente de ls: o arquivo privado local ainda existe, mas está fora do rastreamento do Git.
A próxima etapa examina o diretório de entrega. Examinar um escopo de entrega deliberadamente limitado não comprova que todos os demais arquivos da máquina estejam livres de segredos.
Examine o conteúdo de entrega
Nesta etapa, você verificará o diretório de código-fonte que será entregue, preservando as configurações privadas locais.
Execute o mesmo scanner de regra fixa no diretório service:
course-secrets service
Espere no leaks found e uma saída bem-sucedida. O scanner processa o conteúdo real do código-fonte e do exemplo. Ele não depende de um relatório editado manualmente.
A configuração privada fica na raiz do repositório, fora deste diretório de entrega. Examinar esse arquivo privado novamente ainda apontaria seu token; isso é esperado. Separamos os públicos, sem afirmar que os dados sensíveis deixaram de existir.
Inspecione mais uma vez a versão na área de preparação:
git --no-pager diff --cached
A varredura do diretório verifica os arquivos atuais; o diff verifica o que o Git salvará. Ambos devem corresponder ao conteúdo de entrega pretendido. Uma varredura sem detecções sustenta apenas a regra e o escopo configurados — ela não comprova a ausência de todos os segredos ou falhas de segurança possíveis.
Agora você tem uma versão preparada e revisada. A próxima etapa a salva em um commit local.
Salve um commit local
Nesta etapa, você salvará no histórico local a versão preparada que revisou.
git commit registra a área de preparação. A opção -m fornece uma mensagem curta descrevendo a alteração; as aspas mantêm suas palavras juntas:
git commit -m "Deliver ticket message and safe configuration example"
Espere um resumo do commit com os três caminhos alterados. Os IDs dos commits e as estatísticas de arquivos podem variar, portanto concentre-se no que foi incluído.
git status
Espere uma árvore de trabalho limpa. O arquivo privado ignorado ainda existe, embora git status não o liste.
Um commit é local. Nada foi enviado por push, carregado ou compartilhado com um serviço remoto. Isso basta para praticar a preparação de uma entrega segura sem uma conta pessoal.
Se o Git informar que não há nada para incluir em um commit, compare git status, git ls-files e o diff da área de preparação com as etapas anteriores. Não resolva um estado inesperado excluindo o repositório ou seu histórico existente.
Verifique o histórico e a alteração de negócio
Nesta etapa, você examinará o histórico de commits e executará o pequeno programa que preservou.
A opção --history do inicializador seleciona a varredura do histórico Git pelo Gitleaks. O . final significa este repositório:
course-secrets --history .
Espere no leaks found. O commit inicial sem segredos e seu novo commit de entrega devem passar pela regra fixa. Uma varredura de arquivos bem-sucedida anteriormente não comprovaria, por si só, esse resultado do histórico.
python3 executa o programa Python fornecido. Você não precisa editar nem entender a sintaxe Python neste laboratório:
python3 service/app.py
Espere:
DeskLite tickets ready
Confirme que o arquivo privado local permanece fora do rastreamento do Git:
ls private.env
git ls-files
Agora você tem arquivos de entrega úteis, um exemplo de configuração seguro e um commit local sem a credencial de prática. O arquivo privado não foi excluído e a alteração de negócio continua funcionando. Não é necessário copiar um relatório de varredura nem criar um arquivo de investigação.
Resumo
Você separou as configurações privadas locais da entrega do código-fonte, revisou a área de preparação antes de criar o commit e verificou os arquivos de entrega atuais e o histórico local do Git com uma varredura de credenciais de regra fixa que oculta os valores encontrados. A alteração de negócio e o exemplo público útil permanecem, enquanto as configurações privadas ficam fora do commit.


