Recién comencé a aprender git y para hacerlo comencé a leer el Git Community Book , y en este libro dicen que SVN y CVS almacenan la diferencia entre archivos y que git almacena una instantánea de todos los archivos.
Pero realmente no entendí lo que quieren decir con instantánea. ¿Realmente git hace una copia de todos los archivos en cada confirmación porque eso es lo que entendí de su explicación?
PD: Si alguien tiene una mejor fuente para aprender git, lo agradecería.
Respuestas:
Git incluye para cada confirmación una copia completa de todos los archivos, excepto que, para el contenido ya presente en el repositorio de Git, la instantánea simplemente apuntará a dicho contenido en lugar de duplicarlo.
Eso también significa que varios archivos con el mismo contenido se almacenan solo una vez.
Entonces, una instantánea es básicamente una confirmación, que se refiere al contenido de una estructura de directorio.
Algunas buenas referencias son:
El laboratorio 12 ilustra cómo obtener instantáneas anteriores
" Podrías haber inventado git (¡y tal vez ya lo has hecho!) "
¿Qué es una "instantánea" de git?
Aprende GitHub
El libro progit tiene la descripción más completa de una instantánea:
Jan Hudec agrega este importante comentario :
fuente
Git almacena lógicamente cada archivo bajo su SHA1. Esto significa que si tiene dos archivos con exactamente el mismo contenido en un repositorio (o si cambia el nombre de un archivo), solo se almacena una copia.
Pero esto también significa que cuando modifica una pequeña parte de un archivo y confirma, se almacena otra copia del archivo. La forma en que git resuelve esto es mediante el uso de archivos de paquete. De vez en cuando, todos los archivos "sueltos" (en realidad, no solo los archivos, sino también los objetos que contienen información de confirmación y directorio) de un repositorio se recopilan y comprimen en un archivo de paquete. El archivo del paquete se comprime usando zlib. Y archivos similares también están comprimidos en delta.
El mismo formato también se usa cuando se tira o empuja (al menos con algunos protocolos), por lo que esos archivos no tienen que volver a comprimirse.
El resultado de esto es que un repositorio git, que contiene toda la copia de trabajo sin comprimir, los archivos recientes sin comprimir y los archivos antiguos comprimidos, generalmente es relativamente pequeño, dos veces más pequeño que el tamaño de la copia de trabajo. Y esto significa que es más pequeño que el repositorio SVN con los mismos archivos, aunque SVN no almacena el historial localmente.
fuente