Esta não é uma resposta completa, mas esperamos que alguns pensamentos úteis:
inotifywait funcionará feliz com vários arquivos e pode recursivamente definir watchpoints em diretórios. Por exemplo, posso executar:
inotifywait -m -r -e close_write /etc
E obtenha o seguinte log após editar /etc/passwd
e /etc/postfix/main.cf
:
/etc/ CLOSE_WRITE,CLOSE .passwd.swpx
/etc/ CLOSE_WRITE,CLOSE .passwd.swp
/etc/ CLOSE_WRITE,CLOSE 4913
/etc/ CLOSE_WRITE,CLOSE passwd
/etc/ CLOSE_WRITE,CLOSE .passwd.swp
/etc/postfix/ CLOSE_WRITE,CLOSE .main.cf.swx
/etc/postfix/ CLOSE_WRITE,CLOSE .main.cf.swp
/etc/postfix/ CLOSE_WRITE,CLOSE 4913
/etc/postfix/ CLOSE_WRITE,CLOSE main.cf
/etc/postfix/ CLOSE_WRITE,CLOSE .main.cf.swp
Você poderia facilmente trabalhar isso em um script que, em cada evento close_write
, enviaria o arquivo para o repositório local e enviaria as alterações para um servidor remoto.
Observe também que o incron é uma ótima ferramenta para automatizar esse tipo de inotificação fluxo de trabalho baseado em software (mas não mudaria substancialmente a natureza da solução).
Você terá dificuldades se seus administradores editarem os mesmos arquivos que são atualizados pelo servidor durante a execução. Isso sugere que você terá que configurar algum tipo de resolução automática de conflitos no servidor, o que invariavelmente resultará na perda de algumas informações (bem, perda aparente , pelo menos, você pode obviamente preservar alterações conflitantes em dois ramos distintos do repositório, mas o servidor só consegue ver um ramo).
Eu não acho que qualquer parte deste problema ou solução seja particular para git. Você vai encontrar esses problemas com qualquer tipo de manutenção compartilhada distribuída, assincronamente e sincronizada de arquivos.