Casos de Uso Práticos com .gitignore
Um dos casos de uso mais comuns para git rm --cached é quando você deseja parar de rastrear arquivos que devem ser ignorados. Vamos explorar isso com um exemplo prático.
Criando e Commitando Arquivos
Primeiro, vamos criar uma situação em que cometemos acidentalmente arquivos que deveríamos ter ignorado:
- Certifique-se de que você ainda está no diretório
git-index-demo:
cd ~/project/git-index-demo
- Vamos adicionar nossos arquivos existentes ao índice:
git add hello.txt another.txt
- Agora, vamos commitar esses arquivos:
git commit -m "Initial commit"
Você deve ver uma saída confirmando o commit:
[master (root-commit) xxxxxxx] Initial commit
2 files changed, 2 insertions(+)
create mode 100644 another.txt
create mode 100644 hello.txt
- Crie um arquivo de log que simule um arquivo gerado que não queremos rastrear:
echo "Some log data" > application.log
- Vamos adicionar e commitar este arquivo de log acidentalmente:
git add application.log
git commit -m "Add log file by mistake"
Você deve ver uma saída confirmando o commit:
[master xxxxxxx] Add log file by mistake
1 file changed, 1 insertion(+)
create mode 100644 application.log
Usando .gitignore e git rm --cached
Agora, vamos corrigir nosso erro criando um arquivo .gitignore e usando git rm --cached:
- Crie um arquivo
.gitignore para especificar que queremos ignorar todos os arquivos .log:
echo "*.log" > .gitignore
- Verifique o status:
git status
Você deve ver:
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
Observe que, embora tenhamos o arquivo .gitignore com o padrão *.log, o arquivo application.log não está listado como sendo modificado. Isso ocorre porque o .gitignore só impede que arquivos não rastreados sejam adicionados ao índice. Arquivos que já estão rastreados continuarão a ser rastreados.
- Vamos adicionar e commitar o arquivo
.gitignore:
git add .gitignore
git commit -m "Add .gitignore file"
- Agora, vamos remover o arquivo de log do índice do Git, mantendo-o em nosso sistema de arquivos:
git rm --cached application.log
Você deve ver:
rm 'application.log'
- Verifique o status:
git status
Você deve ver:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: application.log
Isso indica que a exclusão do arquivo do sistema de rastreamento do Git será incluída no próximo commit.
- Vamos commitar essa alteração:
git commit -m "Stop tracking application.log"
- Verifique o status mais uma vez:
git status
Você deve ver:
On branch master
nothing to commit, working tree clean
- Agora, vamos verificar se o arquivo ainda existe em nosso sistema de arquivos:
ls -l
Você deve ver que application.log ainda existe, junto com nossos outros arquivos:
total 16
-rw-r--r-- 1 labex labex 13 [date] another.txt
-rw-r--r-- 1 labex labex 13 [date] application.log
-rw-r--r-- 1 labex labex 6 [date] .gitignore
-rw-r--r-- 1 labex labex 11 [date] hello.txt
- Vamos tentar modificar o arquivo de log para ver se o Git rastreia as alterações:
echo "More log data" >> application.log
git status
Você deve ver:
On branch master
nothing to commit, working tree clean
Embora tenhamos modificado o arquivo de log, o Git não detecta nenhuma alteração porque o arquivo agora é ignorado devido ao padrão .gitignore.
Este é um fluxo de trabalho muito comum quando você comete acidentalmente arquivos que devem ser ignorados, como:
- Artefatos de build (construção)
- Arquivos de log
- Arquivos de configuração com informações confidenciais
- Diretórios de dependência (como
node_modules em projetos JavaScript)
Ao usar git rm --cached junto com .gitignore, você pode:
- Parar de rastrear arquivos que devem ser ignorados
- Manter os arquivos em seu sistema de arquivos local
- Impedir que eles sejam adicionados ao repositório no futuro