Você deve usar git ls-files
O -m
flag receberá uma lista de todos os arquivos modificados desde o último commit. Se nenhum arquivo for modificado , nenhum dado será enviado . Isto torna extremamente fácil configurar um cronjob usando este comando, já que o cronjob irá por padrão apenas enviar um email se o comando gerar algo .
Os arquivos excluídos são pr. definição modificada , para que eles também sejam mostrados na exibição modificada . Se você fizer git ls-files -m -d
, os arquivos excluídos serão listados duas vezes.
Observe, entretanto, que git ls-files -m
mostrará apenas arquivos modificados e, portanto, ignorará os arquivos untracked . Para mostrar também os arquivos untracked , você precisará passar o sinalizador -o
para "outros arquivos", além de passar a opção --exclude-standard
para excluir os arquivos listados em .gitignore
e .git/info/exclude
.
Especificando o diretório git e a árvore de trabalho
Ao executar o comando a partir de um cronjob, você precisará especificar o caminho para o .git
dir e a árvore de trabalho usando --git-dir
e --work-tree
, respectivamente. Veja git
man pages para referência.
Configuração do Cronjob
O comando completo que você precisará executar no seu cronjob:
$ git --git-dir "/PATH/TO/DIR/.git" --work-tree "/PATH/TO/DIR" ls-files -m -o --exclude-standard
Seu crontab deve ser parecido com isto:
$ crontab -l # m h dom mon dow command * * * * * git --git-dir "/PATH/TO/DIR/.git" --work-tree "/PATH/TO/DIR" ls-files -m -o --exclude-standard
Isso enviará um e-mail a cada minuto se houver alterações. Se você deseja uma configuração diferente, confira os exemplos na página cron
na Wikipedia .
Por que git-ls-files
?
O motivo pelo qual eu recomendo git ls-files
over git status
é que git status
é o chamado comando "porcelain", enquanto git ls-files
é um comando "encanamento". Em suma, os comandos de porcelana são projetados para a saída para o usuário, enquanto os comandos de encanamento são projetados para scripts. Leia mais sobre as diferenças entre os comandos git porcelain e git plumbing.