web-dev-qa-db-fra.com

Que signifie «stage» dans git?

Je trouve git difficile à comprendre car je n'ai pas pu trouver le sens des mots utilisés pour les actions. J'ai vérifié le dictionnaire pour la signification de "stade" et aucune des significations n'était liée aux concepts de contrôle de source.

Que signifie "stage" dans le contexte de git?

352
000

stage un fichier, c'est simplement le préparer finement pour un commit. Git, avec son index vous permet de valider seulement certaines parties des changements que vous avez effectués depuis le dernier commit. Supposons que vous travaillez sur deux fonctionnalités - l'une est terminée et l'autre a encore besoin de travail. Vous souhaitez effectuer un commit et rentrer à la maison (17 heures, enfin!) Mais vous ne souhaitez pas engager les parties de la deuxième fonctionnalité, qui n'est pas encore terminée. Vous mettez en scène les parties que vous savez appartenir à la première fonctionnalité et vous les validez. Maintenant, votre commit est votre projet avec la première fonctionnalité terminée, tandis que la seconde est toujours en cours de réalisation dans votre répertoire de travail.

331
Rook

Comme tout le monde y a répondu jusqu'à présent de manière "formelle", permettez-moi de le faire avec des alternatives pour améliorer l'apprentissage grâce au pouvoir des métaphores.

La zone de transit est donc comme:

  • un cache de fichiers que vous souhaitez valider
  • pas une série de tubes mais en fait un camion à benne, prêt à déplacer le travail avec lequel vous le chargez, dans le référentiel
  • un endroit magique où les fichiers sélectionnés seront transformés en pierre avec votre magie et peuvent être transportés par magie vers le référentiel à votre guise
  • la route de la brique jaune pour que les fichiers accèdent joyeusement au référentiel (ou tombent si vous voulez revenir)
  • l'endroit fictif au port de mer où les fichiers sont reçus une paire de chaussures en ciment, puis jetés dans la mer du référentiel
  • le bureau des réceptions à la bibliothèque, vous y mettez les fichiers pour que le bibliothécaire se prépare pour le classement dans la bibliothèque
  • une boîte dans laquelle vous rangez des objets avant de les mettre sous votre lit, où votre lit est un référentiel de boîtes dans lesquelles vous avez déjà fourré
  • la baie de chargement des fichiers avant qu'ils ne pénètrent dans l'entrepôt du référentiel avec le chargeur d'alimentation
  • le filtre d'une cafetière électrique, si les fichiers sont comme la poudre de café, alors les fichiers engagés sont le café infusé
  • le bureau de Scrooge McDuck à côté du coffre-fort, les fichiers sont comme les pièces de monnaie avant d'entrer dans le coffre-fort de son énorme bac à argent
  • l'animalerie, une fois que vous ramenez un animal domestique, vous êtes engagé

C'est magique!

146
Spoike

Le staging est une étape avant le processus de validation dans git. C'est-à-dire qu'un commit dans git est effectué en deux étapes: le staging et le commit réel.

Tant qu'un ensemble de modifications se trouve dans la zone de transfert, git vous permet de le modifier comme vous le souhaitez (remplacez les fichiers intermédiaires par d'autres versions de fichiers intermédiaires, supprimez les modifications du transfert, etc.).

Temps de métaphore brisé:

Envisagez un scénario dans lequel vous appelez les déménageurs pour récupérer vos affaires de votre ancien appartement à votre nouvel appartement. Avant de faire cela, vous allez parcourir vos affaires, décider de ce que vous emportez avec vous et de ce que vous jetez, le mettre dans des sacs et le laisser dans le couloir principal. Les déménageurs viennent simplement chercher les sacs (déjà emballés) dans le couloir et les transporter. Dans cet exemple, tout jusqu'à ce que les déménageurs récupèrent vos affaires, c'est de la mise en scène: vous décidez de ce qui va où, comment les emballer, etc. de mise en scène).

D'un point de vue technique, le transfert prend également en charge les validations transactionnelles, en divisant toutes les opérations en ce qui peut échouer (transfert) et ce qui ne peut pas échouer (validation):

La validation dans git est implémentée de manière transactionnelle, une fois le transfert réussi. Plusieurs étapes de la mise en scène peuvent échouer (par exemple, vous devez valider, mais votre disque dur est plein à 99,9999% et git n'a pas d'espace pour effectuer une validation). Cela échouera lors du transfert (votre référentiel ne sera pas corrompu par une validation partielle) et le processus de transfert n'affectera pas votre historique de validation (il ne corrompra pas votre référentiel en cas d'erreur).

38
utnapistim

Mettre en scène un fichier, c'est le préparer à un commit. Étant donné que git expose cette action au contrôle des utilisateurs, il vous permet de créer des validations partielles ou de modifier un fichier, de le mettre en scène, de le modifier à nouveau et de ne valider ou revenir à la modification d'origine.

La mise en scène vous permet un contrôle plus fin sur exactement comment vous voulez aborder le contrôle de version.

26
Josh K

Pour ajouter aux autres excellentes réponses, voici d'où vient le nom de "stage":

J'ai vérifié le dictionnaire pour la signification de l'étape et aucune des significations n'était liée aux concepts de contrôle de source.

En anglais, "mettre en scène" peut signifier

organiser et participer à (un événement public): Les partisans de l'UDF ont organisé une manifestation à Sofia

(à partir de http://oxforddictionaries.com/definition/stage )

Le nom "staging" de la fonction git dérive de cette signification: lors de la mise en scène, vous préparez et organisez un commit. Bien sûr, un commit n'est pas tout à fait la même chose qu'une performance, mais il est un événement important dans un VCS :-).

21
sleske

Avec la plupart des autres systèmes de contrôle de version, il existe 2 emplacements pour stocker les données: votre copie de travail (les dossiers/fichiers que vous utilisez actuellement) et le magasin de données (où le contrôle de version décide comment emballer et stocker vos modifications). Dans Git, il existe une troisième option: la zone de transit (ou index). Il s'agit essentiellement d'un quai de chargement où vous pouvez déterminer les modifications à expédier.

source: http://gitready.com/beginner/2009/01/18/the-staging-area.html

5
Mostafiz Rahman

La "phase" est une étape intermédiaire techniquement requise dans le processus d'archivage d'un fichier, à savoir la collecte des modifications à ajouter au référentiel. Les auteurs de Git ont choisi de rendre cette étape visible et persistante là où d'autres VCS en font une partie transitoire du processus de validation. Donc, c'est juste une option que git vous donne car elle peut donc pourquoi pas?

Selon moi, la principale chose que git "stage" vous donne que les autres VCS ne sont pas, c'est que vous pouvez l'utiliser pour vérifier un fichier. Il s'agit en fait d'une validation locale non nommée et non commentée qui vous donne une étape intermédiaire entre avoir terminé tout votre travail et la valider définitivement dans le référentiel et ne rien avoir enregistré dans votre référentiel local.

Par exemple, supposons que vous ayez une fonctionnalité partiellement terminée. Il est dans un état stable, passe tous les tests et pourrait entrer en production, mais vous avez plus de travail à faire. Vous pouvez mettre en scène toutes vos modifications, puis continuer à travailler sur la fonctionnalité.

Plus tard, vous aurez la possibilité de valider simplement ce que vous avez organisé (et de pousser ce commit dans le référentiel distant) ou d'ajouter vos nouvelles modifications à votre zone de transit, puis de tout valider en même temps, ou d'annuler uniquement vos nouvelles modifications et ramenez votre répertoire de travail à l'état dans lequel il se trouvait lorsque vous avez effectué vos modifications.

Il est tout à fait possible d'ignorer complètement la zone de transit et d'utiliser simplement le -a option pour git commit si vous ne trouvez pas la zone de rassemblement un concept utile. Beaucoup de gens ignorent la mise en scène et les outils GUI permettent généralement cela également.

2
Old Pro