78 votes

Qu'est-ce qu'un "Snapshot" git ?

La documentation officielle de Git dit :

$ git diff test

Cela vous montrera ce qui est différent entre votre répertoire de travail actuel et l'instantané de la branche "test".

En tant que novice, c'est très déroutant. Je n'ai jamais entendu parler du terme snapshot. Est-ce qu'ils veulent dire le "HEAD" de la branche "test" ?

13 votes

Vous pouvez également apprécier La parabole de Git qui développe l'idée de Git sous forme d'histoire, l'une des idées centrales étant les instantanés.

1 votes

Merci, je me posais la même question. En regardant la parabole de Git, et en regardant git-scm.com/book/fr/v2/Getting-Started-Git-Basics Si je comprends bien, un "instantané" est une copie intégrale de tous les fichiers modifiés dans un répertoire, ainsi que des pointeurs vers tous les fichiers inchangés dans ce même répertoire. Est-ce exact ?

48voto

philippe Points 246

Le terme snapshot est également utilisé dans le site de référence de git

C'est le terme de remplacement de "Révision". Dans d'autres systèmes de contrôle de version, les modifications apportées à des fichiers individuels sont suivies et appelées révisions, alors qu'avec git, vous suivez l'ensemble de l'espace de travail, c'est pourquoi ils utilisent le terme snapshot pour indiquer la différence.

En http://gitref.org/index.html

Au lieu d'écrire un outil qui versionne chaque fichier individuellement, comme Subversion, nous devrions probablement en écrire un qui facilite le stockage d'instantanés de notre projet sans avoir à copier l'ensemble du répertoire à chaque fois.

C'est essentiellement ce qu'est Git. Vous dites à Git que vous voulez sauvegarder un instantané de votre projet avec la commande git commit et il enregistre un manifeste de ce à quoi ressemblent tous les fichiers de votre projet à ce moment-là. Ensuite, la plupart des commandes travaillent avec ces manifestes pour voir comment ils diffèrent ou en extraire du contenu, etc.

Si vous considérez Git comme un outil permettant de stocker, de comparer et de fusionner des instantanés de votre projet, il vous sera peut-être plus facile de comprendre ce qui se passe et de faire les choses correctement.

0 votes

J'aimerais également souligner que vous pouvez obtenir un "instantané" d'un fichier individuel dans git en faisant git checkout <commit> <filename> comme indiqué dans les exemples de git checkout kernel.org/pub/software/scm/git/docs/

1 votes

@Jens : Bien que vous ne puissiez pas diviser la coche, vous pouvez la réattribuer si vous pensez qu'une autre réponse est meilleure que la réponse actuellement acceptée. Mais, oui, plus il y a de votes positifs, plus la communauté estime que la réponse est bonne/valable. Par ailleurs, cela ne signifie pas que la réponse doit être acceptée. La réponse acceptée est quelque chose qui dépend de l'OP.

38voto

Femaref Points 41959

Un instantané est l'état d'une chose (par exemple un dossier) à un moment précis. Dans ce cas, l'instantané signifie le contenu actuel de la branche de test, il ne s'agit pas nécessairement de la révision principale.

3 votes

@jens : Snapshot est utilisé ici comme synonyme de commit. Un objet commit est essentiellement constitué de métadonnées (auteur, date, message) et d'un instantané du contenu de votre arbre de travail (représenté par un objet tree). Voir Le modèle d'objet Git pour plus d'informations !

0 votes

Je ne peux pas commenter directement le cas de git, mais dans le cas de SVN, vous pourriez avoir quelques changements (non validés, c'est-à-dire uniquement sur votre disque dur) dans une branche et la version du tronc dans un autre dossier ; vous pourriez les comparer entre eux. Je suppose que ce concept existe aussi avec git.

0 votes

@jens : L'autre élément est qu'une branche est simplement un pointeur vers un commit, donc quand vous dites git diff test vous voulez vraiment dire "diff avec le commit pointé par la balise test branche".

22voto

anKotliner Points 147

Afin d'expliquer le terme snapshot claire. Permettez-moi de vous présenter les deux autres éléments

  1. format d'objet libre git
  2. git Packfiles

Supposons que nous ayons un fichier appelé "a.txt" dont le contenu est constitué de dix lettres 'a' sous le contrôle de git. Après avoir livré ce fichier, trois dossiers seront créés dans le chemin .git/objects et chaque dossier contiendra un fichier. Chaque fichier est S.N.A.P.S.H.O.T .

a.txt file under git control which has been committed three folders created by git after committed

Chaque dossier contient un fichier

enter image description here

Ahora nous modifions le fichier a.txt pour voir ce qui se passe

Nous avons remplacé la première lettre "a" par la lettre "b".

enter image description here -->> enter image description here

Ensuite, il s'est engagé !

Git a créé trois autres nouveaux fichiers dans trois nouveaux dossiers

enter image description here

Ces trois nouveaux dossiers sont également S.N.A.P.S.H.O.Ts

enter image description here

A chaque fois que nous ferons un COMMIT, git enregistrera instantanés sur le disque au lieu du delta entre la nouvelle version et l'ancienne version du même fichier. Même si nous n'avons changé qu'une lettre d'un fichier, git enregistrera le fichier entier sous la forme d'un fichier instantané .

C'est ce qu'on appelle aussi le format d'objet libre .

Dans ce cas, git coûtera plus d'espace disque que les autres vcs. (comme la subversion) qui enregistre le delta entre la nouvelle version et l'ancienne version du même fichier. Mais les avantages de l'utilisation de snapshot raccourcir le temps de commit étape.

Mais le brillant git fera un autre travail git gc après cela de temps en temps, ce qui a créé PACKFILES et supprime l'instantané dont le contenu est similaire pour réduire sa taille. Après ces travaux git gc Le coût du disque par git sera le même que pour les autres VCS qui utilisent les méthodes delta.

A travers snapshot y git gc . Git sera plus rapide que les autres VCS qui utilisent des méthodes delta à commit et le coût de la taille du disque doit être similaire à celui des autres VCS qui utilisent les méthodes delta.

Git trouve un équilibre entre les performances et le coût de l'espace disque.

GIT est la meilleure solution

Les fichiers de paquets se trouvent sous .git/objects/pack

Vous pouvez le voir après avoir exécuté la commande "git gc" par vous-même.

12voto

xged Points 539

Aperçu est à un référentiel ce que la capture d'écran est à une vidéo.

Il s'agit du contenu (fichiers et dossiers) d'un référentiel à un moment donné.

Lorsque vous commit vous sauvegardez le fichier répertoire de travail actuel en tant que nouvelle instantané (engager = instantané + métadonnées). Votre dépôt Git est constitué d'une série de instantanés (commits), d'autres VCS consistent en une série de différences au lieu de cela.

3voto

Marcelo Cantos Points 91211

Tout d'abord, il ne s'agit pas de la documentation officielle de git. C'est un livre écrit par la communauté. Bien qu'il fasse probablement autorité, ce n'est pas une parole d'évangile.

AFAIK, "snapshot" n'a pas de signification formelle dans git. Il est certain que l'option git diff manpage ne le mentionne pas. Dans le contexte donné, il s'agit probablement d'une référence informelle à la manière dont la branche "test" est utilisée dans les exemples du livre, c'est-à-dire comme un instantané du travail en cours, à des fins de test.

5 votes

La page de manuel de git-stash mentionne For quickly making a snapshot, you can omit both "save" and <message>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X