¿Cómo puedo rastrear los cambios de mi distribución de Linux con git?

Estoy experimentando con alguna configuration de Linux y quiero hacer un seguimiento de mis cambios? Por supuesto, no quiero poner todo mi sistema operativo bajo control de versiones?

¿Hay alguna manera (con git, mercurial o cualquier VCS) de rastrear el cambio sin almacenar todo el sistema operativo?

Esto es lo que imagino:

  1. Hago una especie de git init -> todos los hashes de todos los files están almacenados, pero no el contenido de los files
  2. Realizo algunos cambios en mi sistema de files -> git detecta que el hash de este file ha cambiado
  3. Confirmo -> el contenido del file está almacenado (o incluso mejor el file original y el diff están almacenados! Lo sé, eso es imposible …)

¿Posible? ¿Imposible? ¿Problemas?

EDIT: Lo que me importa es solo minimizar el tamaño del repository y tener un repository que contenga solo mis cambios. Tener todos los files en mi repository no es relevante para mí. Por ejemplo, si presiono a github solo quiero que contenga solo los files que han cambiado.

Lo que desea es git update-index --info-only o ... --index-info , de la página man: "-info-only se usa para registrar files sin colocarlos en la database de objects. Esto es útil para repositorys de solo estado. ". --index-info es su primo a escala industrial.

Haga eso con los files que desea rastrear, write-tree para escribir la estructura del índice en el object db, commit-tree , y update-ref para actualizar una twig.

Para get el nombre del object, use git hash-object filename .

Echa un vistazo a eckeeper , probablemente hará el trabajo.

Esto es lo que hacemos…

 su - cd /etc echo "*.cache" > .gitignore git init chmod 700 .git cd /etc; git add . && git add -u && git commit -m "Daily Commit" 

Luego configura crontab:

 su - crontab -e # Put the following in: 0 3 * * * cd /etc; git add . && git add -u && git commit -m "Daily Commit" 

Ahora tendrá un compromiso nocturno de todos los cambios en / etc

Si desea rastrear más de / etc en un repository, entonces simplemente puede hacerlo en la raíz de su sistema de files, excepto agregar las routes de ignorar adecuadas a su /.gitignore. No estoy seguro de los efectos de tener git dentro de git, por lo que es posible que desee tener mucho más cuidado en ese caso.

Sé que esta pregunta es antigua, pero pensé que esto podría ayudar a alguien. Inspirado por el comentario de @Jonathon sobre la cuestión de cómo grabar modificaciones concretas de files específicos , he creado un script de shell que le permite monitorear todos los cambios realizados en un file específico, mientras mantiene todos los cambios en el historial. la secuencia de commands depende de los packages inotifywait y git que se están instalando.

Puede encontrar el script aquí https://github.com/hisham-hassan/linux-file-monitor

 Usage: file-monitor.sh [-f|--file] <absolute-file-path> [-m|--monitor|-h|--history] file-monitor.sh --help -f,--file <absolute-file-path> Adding a file to the monitonetworking files List. The <absolute-file-path> is the absolute file path of the file we need to action. PLEASE NOTE: Relative file path could cause issues in the script, please make sure to use the abolute path of the file. also try to avoid sym links, as it has not been tested. example: file-monitor.sh -f /absolute/path/to/file/test.txt -m -m, --monitor Monitoring all the changes on the file. the monitoring will keep happening as long as the script is running; you may need to run it in the background. example: file-monitor.sh -f /absolute/path/to/file/test.txt -m -h, --history showing the full history of the file. To exit, press "q" example: file-monitor.sh -f /absolute/path/to/file/test.txt -h --uninstall uninstalls the script from the bin direcotry, and removes the monitoring history. --install Adds the script to the bin directory, and creates the directories and files needed for monitoring. --help Prints this help message.