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.