Comecei a aprender o git e, para isso, comecei a ler o Git Community Book , e neste livro eles dizem que o SVN e o CVS armazenam a diferença entre arquivos e que o git armazena uma captura instantânea de todos os arquivos.
Mas eu realmente não entendi o que eles querem dizer com instantâneo. O git realmente faz uma cópia de todos os arquivos em cada commit, porque é isso que eu entendi da explicação deles.
PS: Se alguém tiver uma fonte melhor para aprender git, eu agradeceria.
Respostas:
O Git inclui para cada confirmação uma cópia completa de todos os arquivos, exceto que, para o conteúdo já presente no repositório Git, o instantâneo simplesmente apontará para o conteúdo em vez de duplicá-lo.
Isso também significa que vários arquivos com o mesmo conteúdo são armazenados apenas uma vez.
Portanto, um instantâneo é basicamente uma confirmação, referindo-se ao conteúdo de uma estrutura de diretórios.
Algumas boas referências são:
O Laboratório 12 ilustra como obter instantâneos anteriores
" Você poderia ter inventado o git (e talvez você já tenha!) "
O que é um snapshot do git?
Learn GitHub
O livro progit possui a descrição mais abrangente de um instantâneo:
Jan Hudec acrescenta este importante comentário :
fonte
O Git armazena logicamente cada arquivo em seu SHA1. O que isso significa é que se você tiver dois arquivos com exatamente o mesmo conteúdo em um repositório (ou se você renomear um arquivo), apenas uma cópia será armazenada.
Mas isso também significa que, quando você modifica uma pequena parte de um arquivo e confirma, outra cópia do arquivo é armazenada. A maneira como o git resolve isso é usando arquivos de pacote. De vez em quando, todos os arquivos "frouxos" (na verdade, não apenas arquivos, mas objetos que também contêm informações de confirmação e diretório) de um repositório são reunidos e compactados em um arquivo de pacote. O arquivo do pacote é compactado usando zlib. E arquivos semelhantes também são compactados em delta.
O mesmo formato também é usado ao puxar ou empurrar (pelo menos com alguns protocolos), para que esses arquivos não precisem ser recomprimidos novamente.
O resultado disso é que um repositório git, contendo toda a cópia de trabalho descompactada, arquivos recentes não compactados e arquivos antigos compactados, é geralmente relativamente pequeno, duas vezes menor que o tamanho da cópia de trabalho. E isso significa que é menor que o repositório SVN com os mesmos arquivos, embora o SVN não armazene o histórico localmente.
fonte