Je viens de commencer à apprendre git et pour ce faire, j'ai commencé à lire le Git Community Book , et dans ce livre, ils disent que SVN et CVS stockent la différence entre les fichiers et que git stocke un instantané de tous les fichiers.
Mais je n'ai pas vraiment compris ce qu'ils entendent par instantané. Est-ce que git fait vraiment une copie de tous les fichiers dans chaque commit parce que c'est ce que j'ai compris de leur explication.
PS: Si quelqu'un a une meilleure source pour apprendre git, je l'apprécierais.
Réponses:
Git inclut pour chaque commit une copie complète de tous les fichiers, sauf que, pour le contenu déjà présent dans le référentiel Git, l'instantané pointera simplement vers ledit contenu plutôt que de le dupliquer.
Cela signifie également que plusieurs fichiers avec le même contenu ne sont stockés qu'une seule fois.
Un instantané est donc essentiellement un commit, se référant au contenu d'une structure de répertoire.
Quelques bonnes références sont:
Le laboratoire 12 illustre comment obtenir des instantanés précédents
" Vous auriez pu inventer Git (et peut-être vous l'avez déjà fait!) "
Qu'est-ce qu'un git «Snapshot»?
Apprenez GitHub
Le livre de progit a la description la plus complète d'un instantané:
Jan Hudec ajoute ce commentaire important :
la source
Git stocke logiquement chaque fichier sous son SHA1. Cela signifie que si vous avez deux fichiers avec exactement le même contenu dans un référentiel (ou si vous renommez un fichier), une seule copie est stockée.
Mais cela signifie également que lorsque vous modifiez une petite partie d'un fichier et que vous le validez, une autre copie du fichier est stockée. La façon dont git résout cela utilise des fichiers pack. De temps en temps, tous les fichiers «en vrac» (en fait, pas seulement les fichiers, mais aussi les objets contenant des informations de commit et de répertoire) d'un repo sont rassemblés et compressés dans un fichier pack. Le fichier pack est compressé à l'aide de zlib. Et des fichiers similaires sont également compressés en delta.
Le même format est également utilisé lors de l'extraction ou de la poussée (au moins avec certains protocoles), de sorte que ces fichiers n'ont pas à être recompressés à nouveau.
Le résultat de ceci est qu'un référentiel git, contenant la copie de travail entière non compressée, les fichiers récents non compressés et les fichiers plus anciens compressés est généralement relativement petit, deux fois plus petit que la taille de la copie de travail. Et cela signifie qu'il est plus petit que le repo SVN avec les mêmes fichiers, même si SVN ne stocke pas l'historique localement.
la source