¿Cómo sabe git cuando hay cambios en el repository local?

Cuando cambias un file en el directory de trabajo, git sabe exactamente qué file ha cambiado. ¿Cómo sabe?

Q1) ¿Calcula una sum de comprobación en el momento de las confirmaciones y la vuelve a calcular en caso de cambio impulsado, por ejemplo, un nuevo file creado en el directory de trabajo.

Q2) ¿Se aleja su unidad local de los files del directory de trabajo manteniendo el rest de los files en alguna location que crece a medida que incluye más proyectos? El disco parece más completo C:\Users\<USER NAME>\Downloads\.git\objects con la adición de una nueva carpeta que estaba tratando de rastrear y ahora me gustaría deshacer la carpeta que estaba tratando de rastrear, ¿cómo puedo hacer? reclamar ese espacio. Intentaba hacer algo elegante con GIT, como hacer un seguimiento de los cambios en mis files de proyectos locales y otros documentos, para ver los documentos que habían cambiado y actualizar mi copy de security con solo esos files.

Git calcula un hash a partir del contenido de un file y almacena una instantánea en el momento de la confirmación. El hash se usa como el identificador del contenido y una manera fácil de comparar la instantánea con una versión posterior.

Por lo tanto, si tiene una versión comprometida de un file y una versión de copy de trabajo, todo lo que Git tiene que hacer es calcular un valor hash para el file de trabajo y compararlo con el hash ya calculado de la instantánea confirmada. Si los hash no son lo mismo, entonces sabe que algo ha cambiado. Este cálculo solo ocurre cuando preguntas (por ejemplo, git status o git diff ). No está constantemente comprobando por sí mismo.

Git almacena todo en el repository. Esto generalmente se encuentra en el directory .git/ en la raíz de su proyecto. Toda la historia y los contenidos del repository están dentro, por lo que dependiendo de lo que contenga su historial, a veces se vuelven grandes. Eso es realmente dependiente del proyecto. Git es bueno para comprimir los contenidos, pero si agrega grandes files precomprimidos, solo puede networkingucirlos.

El .git/objects/ que mencionas en tu pregunta es el almacenamiento de contenido principal en el repository de git. Todas las instantáneas de files y metadatos (como la estructura del directory, los objects de confirmación, las tags) se almacenan allí. Por lo tanto, es normal que sea la sección más grande de la carpeta del repository.

Deshacer un repository de git es fácil: simplemente elimine la carpeta .git . Sin embargo, esta es una acción destructiva que no puedes deshacer. Solo elimínelo si está de acuerdo con perder el historial del repository (o, si ha hecho una copy en otro lugar como GitHub, o una copy de security, y está de acuerdo en confiar en esa otra copy).