Introdução
Neste laboratório, você aprenderá como verificar eficientemente se um repositório Git está limpo usando o comando git status --porcelain. Este comando fornece uma saída legível por máquina, tornando-o ideal para scripting e verificações rápidas de status.
Você explorará a diferença entre o git status padrão e a versão --porcelain, observando como a saída muda quando o repositório está limpo versus quando contém arquivos não rastreados ou modificados. Esta experiência prática demonstrará como verificar a ausência de alterações pendentes programaticamente.
Use git status --porcelain para Verificação de Limpeza
Nesta etapa, aprenderemos sobre uma variação útil do comando git status: git status --porcelain. Este comando fornece uma saída limpa e legível por máquina, o que é ótimo para scripting ou para verificar rapidamente o status sem todo o texto extra.
Primeiro, vamos garantir que estamos no diretório do nosso projeto. Abra seu terminal e digite:
cd ~/project/my-time-machine
Agora, execute o comando git status padrão novamente para ver o estado atual do nosso repositório. Como acabamos de fazer um commit na etapa anterior, ele deve estar limpo:
git status
Você deve ver uma saída semelhante a esta, indicando que seu diretório de trabalho está limpo:
On branch master
nothing to commit, working tree clean
Agora, vamos tentar a versão porcelain:
git status --porcelain
Este comando não deve produzir nenhuma saída se seu repositório estiver limpo. Esta é a principal diferença – ele só mostra saída para arquivos não rastreados, modificados ou staged. Isso o torna muito útil para verificar rapidamente se há alguma alteração pendente.
Por que isso é útil? Imagine que você está escrevendo um script que precisa saber se há alguma alteração não commitada antes de executar uma ação. Analisar a saída regular do git status pode ser complicado porque ela foi projetada para ser lida por humanos. A saída --porcelain é projetada para scripts, tornando fácil verificar alterações programaticamente.
Na próxima etapa, veremos como a saída muda quando temos arquivos não rastreados ou modificados.
Verifique se Não Há Arquivos Não Rastreados ou Modificados
Nesta etapa, verificaremos explicitamente que o comando git status --porcelain não produz nenhuma saída quando o repositório está limpo. Isso reforça o conceito de que este comando foi projetado para mostrar apenas as alterações.
Primeiro, certifique-se de estar no diretório correto:
cd ~/project/my-time-machine
Agora, execute o comando git status --porcelain novamente. Como não fizemos nenhuma alteração desde o último commit, não deve haver nenhuma saída.
git status --porcelain
Se seu terminal não mostrar nenhuma saída após executar este comando, significa que seu diretório de trabalho está limpo e não há arquivos não rastreados ou modificados. Este é o comportamento esperado para um repositório limpo ao usar a flag --porcelain.
Essa ausência de saída é um sinal claro de que o Git não vê nada novo ou alterado que precise ser rastreado ou commitado. É uma maneira rápida e eficiente de confirmar que você está começando do zero antes de fazer novas alterações ou realizar outras operações Git.
Na próxima etapa, introduziremos algumas alterações para ver como a saída --porcelain muda.
Teste com Diferentes Estados do Repositório
Nesta etapa, criaremos algumas alterações em nosso repositório para ver como git status --porcelain as relata. Isso ajudará você a entender os diferentes códigos usados na saída porcelain.
Primeiro, certifique-se de estar no diretório correto:
cd ~/project/my-time-machine
Agora, vamos criar um novo arquivo não rastreado. Vamos chamá-lo de notes.txt:
echo "Some random notes" > notes.txt
Execute git status --porcelain novamente:
git status --porcelain
Você deve ver uma saída semelhante a esta:
?? notes.txt
O ?? indica que notes.txt é um arquivo não rastreado (untracked). O Git vê o arquivo, mas não está gerenciando suas versões no momento.
Em seguida, vamos modificar o arquivo message.txt que commitamos anteriormente. Adicionaremos outra linha a ele:
echo "Hello again, Future Me" >> message.txt
O operador >> anexa o texto ao arquivo existente, em vez de substituí-lo.
Agora, execute git status --porcelain mais uma vez:
git status --porcelain
Você deve ver uma saída semelhante a esta:
M message.txt
?? notes.txt
O M indica que message.txt foi modificado (modified). O espaço antes do M significa que a alteração está no diretório de trabalho, mas ainda não foi staged. O ?? para notes.txt permanece porque ainda não está rastreado.
Finalmente, vamos fazer o stage do arquivo message.txt modificado usando git add:
git add message.txt
E execute git status --porcelain pela última vez:
git status --porcelain
A saída agora deve ser semelhante a esta:
M message.txt
?? notes.txt
O M agora está na primeira coluna, indicando que message.txt foi staged para commit. O espaço na segunda coluna significa que não há mais modificações no diretório de trabalho desde que foi staged. notes.txt ainda não está rastreado.
Entender esses códigos (?? para não rastreado, M na segunda coluna para modificado, mas não staged, M na primeira coluna para modificações staged) é fundamental para interpretar rapidamente a saída git status --porcelain.
Resumo
Neste laboratório, aprendemos como verificar se um repositório Git está limpo usando o comando git status --porcelain. Descobrimos que este comando fornece uma saída legível por máquina, que está vazia quando o diretório de trabalho está limpo. Isso contrasta com a saída padrão git status, que fornece informações legíveis por humanos, mesmo quando o repositório está limpo.
Praticamos a execução de git status --porcelain em um repositório limpo e observamos que ele não produziu nenhuma saída, confirmando sua utilidade para scripting e verificações rápidas de alterações pendentes.



