Que veut dire 'stage' dans git?

318

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

Que signifie "stage" dans le contexte de git?

000
la source
12
Git a bien son propre vocabulaire. Et comme chaque instruction est formulée dans un vocabulaire spécial, il est difficile de commencer. " Stade" consiste à appliquer git add file.extun fichier spécifique ou git add .à affecter tous les fichiers modifiés et non suivis. Les fichiers ajoutés de cette manière sont dits "mis en scène" et seront inclus dans le prochain "commit". Le commit est un instantané de votre travail créé avec par exemple git commit -m "I wrote something".
Jonatan Öström
11
Git est difficile à comprendre car il n'y a pas de tutoriel conceptuel. Tous passent par des détails inutiles.
Xaqron
2
Avez-vous voulu supprimer la "terminologie" tag de cette question? Cela me semble une étiquette parfaitement valide.
Philip Kendall
Pour une raison quelconque, la meilleure façon de comprendre l’importance de la mise en scène est tirée de cette réponse à Quora: qr.ae/TbSK2I
Lamar

Réponses:

310

Pour mettre en scène un fichier est tout simplement de préparer finement pour une livraison . Git, avec son index, ne vous permet de valider que certaines parties des modifications que vous avez effectuées 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 vous engager et rentrer chez vous (à 5 heures, enfin!), Mais ne souhaitez pas engager les parties du deuxième long métrage, ce qui n'est pas encore terminé. Vous mettez en scène les parties que vous savez appartenir à la première fonctionnalité et vous validez. Maintenant, votre commit est votre projet avec la première fonctionnalité effectuée, tandis que la seconde est toujours en cours de développement dans votre répertoire de travail.

Tour
la source
5
Bonne explication. Notez que git, étant distribué, vous permet évidemment de valider les deux fonctionnalités, car les commits sont locaux (au début). Néanmoins, vous souhaiterez peut-être diviser les modifications en une validation par fonctionnalité. Une fois de plus, la mise en scène est pratique.
Sleske
77
Je ne comprends pas pourquoi vous avez besoin d'une mise en scène pour cela. Je peux le faire avec HG ou même SVN en ne validant que les fichiers correspondants. On a l'impression que cette fonctionnalité est principalement conçue pour aider les personnes qui insistent pour travailler avec la ligne de commande lorsqu'il est plus difficile de cocher des cases sur ce que vous commettez.
Jiggy
78
@jiggy git vous permet de mettre en scène une partie d'un fichier. Vous pouvez également organiser un fichier, y apporter des modifications supplémentaires, puis valider son état initial. Vous ne pouvez pas faire cela dans la subversion.
Izkata
4
@jiggy Dans SVN, il y a quelque chose, entre le moment où vous sélectionnez les fichiers / parties de fichiers à valider et lorsque vous avez fini de rédiger votre message, qui enregistre les fichiers / parties que vous avez sélectionnés. Il se peut que cela ne soit jamais explicitement mentionné, qu'il soit implémenté dans le client SVN plutôt que dans une partie réelle du référentiel; il peut s'agir simplement de drapeaux en mémoire, mais c'est le stade de SVN. Je n'ai pas regardé HG, mais je suppose que c'est la même chose. La différence avec git est que git reconnaît que c'est une chose, l'enregistre sur un disque et permet à l'utilisateur de s'y rendre directement.
8bittree
7
La deuxième flèche "fichiers de stade" dans la figure peut être trompeuse. "mecs de scène" pourrait être plus précis?
Ida
137

Puisque tout le monde a jusqu'ici répondu de manière "formelle", permettez-moi de le faire avec des alternatives pour améliorer l'apprentissage avec le pouvoir des métaphores.

Donc, la zone de transit est comme:

  • un cache de fichiers que vous voulez valider
  • pas une série de tubes mais en réalité un camion benne, prêt à déplacer le travail que vous chargez avec, dans le référentiel
  • un lieu magique où les fichiers sélectionnés seront transformés en pierre avec votre magie et pourront être transportés comme par magie dans le dépôt à votre guise
  • la route de brique jaune pour que les fichiers aillent dans le référentiel (ou tombent si vous voulez revenir)
  • le lieu fictif au port de mer où les fichiers sont reçus avec une paire de chaussures en ciment, puis jetés dans la mer du dépôt
  • Au comptoir des réceptions de la bibliothèque, vous y déposez les fichiers que le bibliothécaire prépare pour le dépôt dans la bibliothèque.
  • une boîte dans laquelle vous rangez des objets avant de les placer sous votre lit, où votre lit est un dépôt de boîtes que vous avez précédemment installées
  • la baie de chargement des fichiers avant son entrée 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é, les fichiers engagés sont le café infusé
  • le bureau de Scrooge McDuck à côté du coffre, les fichiers sont comme les pièces de monnaie avant d'entrer dans le coffre de son énorme coffre à billets
  • l'animalerie, une fois que vous avez ramené un animal chez vous, vous vous êtes engagé

C'est magique !

Spoike
la source
Aimer les analogies; comment aller bud ^ _ ^
Musa Al-hassy
J'adore l'analogie finale.
MeTchaikovsky
35

La mise en scène est une étape avant le processus de validation dans git. Autrement dit, une validation dans git est effectuée en deux étapes: mise en attente et validation réelle.

Tant qu’un ensemble de modifications figure dans la zone de stockage intermédiaire, git vous permet de le modifier à votre guise (remplacez les fichiers intermédiaires par d'autres versions, supprimez les modifications, etc.).

Temps de métaphore brisé:

Prenons un scénario dans lequel vous appelez les déménageurs pour que vos affaires soient acheminées de votre ancien appartement à votre nouvel appartement. Avant de faire cela, vous allez parcourir vos affaires, décider ce que vous emportez avec vous et ce que vous jetez, le ranger 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 est mis en scène jusqu'à ce que les déménageurs récupèrent vos affaires: vous décidez où aller, comment les emballer, etc. (par exemple, vous pouvez décider que la moitié de vos affaires seront jetées avant même que les déménageurs y arrivent - c de la mise en scène).

D'un point de vue technique, la mise en scène prend également en charge les validations transactionnelles, en scindant toutes les opérations en ce qui peut échouer (staging) et ce qui ne peut pas échouer (commit):

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

utnapistim
la source
... et si peu de votes jusqu'à présent.
Ojonugwa ochalifu
26

Préparer un fichier, c'est le préparer pour un commit. Parce 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 modifier, de le modifier à nouveau et de ne valider ou de revenir qu'à la modification initiale.

La mise en scène vous permet de contrôler plus précisément comment vous souhaitez aborder le contrôle de version.

Josh K
la source
19

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

J'ai vérifié dans le dictionnaire la signification de stage 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 des FDU ont organisé une manifestation à Sofia

(extrait de http://oxforddictionaries.com/definition/stage )

Le nom "staging" pour la fonctionnalité git dérive de cette signification: Lors de la staging, vous préparez et organisez un commit. Bien sûr , un commit est pas tout à fait identique à une performance, mais il est un événement important dans un VCS :-).

sleske
la source
3
J'aurais pensé que cela correspondait mieux à l'utilisation dans la mise
Inutile
Idem. En outre, "un point, une période ou une étape dans un processus ou un développement".
Darien
Aussi, "serveur intermédiaire" est un terme assez communément utilisé pour décrire un serveur entre développement et production.
Eternal21
4

Avec la plupart des autres systèmes de contrôle de version, il existe 2 emplacements pour stocker des 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 empaqueter et stocker vos modifications). Dans Git, il existe une troisième option: la zone de transfert (ou index). Il s’agit essentiellement d’un quai de chargement où vous déterminez les modifications qui seront expédiées.

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

Mostafiz Rahman
la source
1
cela ne semble pas ajouter grand chose par rapport aux 6 réponses précédentes
gnat
Il mentionne Index. Et des références à un article très complet. Upvoting. BTW, certaines des réponses ci-dessus ne sont que des blagues.
Gangnus
1

La "phase" est une étape intermédiaire techniquement nécessaire dans le processus de vérification 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 parce qu’elle peut le faire, alors pourquoi pas?

La façon dont je le vois, le principal avantage de la "phase" de git est que vous ne pouvez pas l’utiliser avec d’autres VCS, c’est que vous pouvez l’utiliser pour contrôler un fichier. En réalité, il s’agit d’un commit local non nommé et non commenté qui vous donne une étape intermédiaire entre effectuer tout votre travail et le valider définitivement dans le référentiel et ne rien enregistrer dans votre référentiel local.

Par exemple, supposons qu'une fonctionnalité soit partiellement finie. Il est dans un état stable, passe tous les tests et pourrait entrer en production, mais vous avez encore du travail à faire. Vous pouvez mettre en scène toutes vos modifications, puis continuer à travailler sur la fonctionnalité.

Plus tard, vous aurez l’option de valider ce que vous avez mis en scène (et de le transmettre au référentiel distant) ou d’ajouter vos nouvelles modifications à votre zone de mise en attente, puis de les commettre tous en même temps, ou d’annuler uniquement vos nouvelles modifications et modifications. ramenez votre répertoire de travail à l'état dans lequel il se trouvait lorsque vous avez mis en place vos modifications.

Il est tout à fait possible de pratiquement ignorer la zone intermédiaire et d'utiliser l' -aoption git commitsi vous ne trouvez pas que la zone intermédiaire est un concept utile. Beaucoup de gens ignorent la mise en scène et les outils graphiques le permettent généralement.

Vieux pro
la source
"les autres VCS ne le font pas" - qu'est-ce qui vous fait penser cela? Le rayonnage à Perforce semble faire ce que vous décrivez, et même avec quelques cloches et sifflets supplémentaires
gnat
1
@gnat oui, bien sûr, beaucoup d'autres VCS vous proposent quelque chose comme une mise en scène. Par "autre VCS", j'entends d'autres VCS qui n'ont pas quelque chose comme la scène de git, puisque c'est ce à quoi le PO faisait référence.
Vieux Pro
J’ai trouvé cette réponse immensément meilleure que tout ce qui précède, car c’est la seule qui explique clairement pourquoi Staging existe ( techniquement nécessaire ), une explication de son origine ( les auteurs de Git ont choisi de rendre cette étape visible et persistante ), ajoutant: ce que j’ai personnellement trouvé être une bonne définition ( un commit local intermédiaire, sans nom, sans commentaire ). Cependant, je pense que cela pourrait être amélioré en citant une source pour la déclaration sur l'origine de Staging et en expliquant un peu plus pourquoi cela est techniquement nécessaire . @OldPro
alexlomba87
-1

D'après ce que je comprends, supposons que je développe une fonction de connexion et que 5 étapes consécutives soient nécessaires. Donc, ici, la mise en scène vous aidera à travailler sur des étapes comme celle
de l'étape 1.
fait avec l'étape 2, maintenant les étapes 1 et 2 sont toutes les deux correctes.
gâcher avec l'étape 3 la dernière étape échelonnée, sans étape sur la caisse, qui est l'étape 2 de la
même manière une fois que vous avez terminé avec les 5 étapes, ce qui signifie que la fonctionnalité est complète, puis effectuez la validation.

palash140
la source
cela ne semble rien ajouter de substantiel aux points évoqués et expliqués dans les 9 réponses précédentes
gnat
oui vous avez raison, j'ai juste essayé de rendre l'explication simple et douce
palash140
Et ce que je ressens pour utiliser ce concept pratiquement, j'ai essayé d'expliquer cela
palash140
Pensez à jeter un coup d'œil à la discussion ci-dessous: Les réponses de deuxième lettre de réponse sont-elles acceptables? (FWIW par rapport aux réponses précédentes celui - ci ne me semble pas simple , ni doux)
moucheron
merci monsieur, j'ai une question à poser. J'ai trouvé de nombreuses réponses et la plupart d'entre elles sont trop complexes. Oui, elles sont correctes mais difficiles à digérer en une fois. Je crois que si vous ne pouvez pas expliquer quoi que ce soit d'une manière simple, vous ne l'apprendrez pas correctement ou vous ne saurez pas comment. pour l'utiliser. Alors, est-il mauvais maintenant de mettre un résumé ou un moyen simple de répondre?
palash140