web-dev-qa-db-fra.com

Quel est l'avantage du processus de validation en deux étapes de git (staging)?

J'apprends git et j'ai remarqué qu'il a un processus de validation en deux étapes:

  1. git add <files>
  2. git commit

La première étape place les révisions dans ce qu'on appelle une "zone de transit" ou "index".

Ce qui m'intéresse, c'est pourquoi cette décision de conception est prise et quels sont ses avantages?

De plus, en tant qu'utilisateur git, faites-vous cela ou utilisez simplement git commit -a?

Je pose cette question car je viens de bzr (Bazaar) qui n'a pas cette fonctionnalité.

180
thomasrutter

Fractionner le travail en commits séparés. Vous avez probablement ouvert plusieurs fois un fichier pour écrire un correctif sur une seule ligne, mais en même temps vous avez remarqué que le le formatage était incorrect, certaines documentations pourraient être améliorées ou un autre correctif sans rapport. Avec les autres RCS s vous devriez l'écrire ou le valider en mémoire, terminer le correctif pour lequel vous êtes venu, le valider, puis revenir au correctif les autres trucs (ou créez un commit boule de boue avec des trucs non liés). Avec Git, vous réparez tout cela à la fois, et stage + validez la ligne unique séparément, avec git add -i ou git-gui.

Ne cassez pas la construction. Vous travaillez sur une modification compliquée. Vous essayez donc différentes choses, dont certaines fonctionnent mieux que d'autres, d'autres qui cassent les choses. Avec Git, vous mettiez en scène les choses lorsque la modification améliorait les choses, et checkout (ou Tweak un peu plus) lorsque la modification ne fonctionnait pas. Vous n'aurez pas à vous fier à la fonctionnalité d'annulation de l'éditeur, vous pouvez checkout l'ensemble du référentiel au lieu de simplement fichier par fichier, et toute erreur au niveau du fichier (comme la suppression d'un fichier qui n'a pas été validé) ou sauvegarde + fermeture après une mauvaise modification) n'entraîne pas beaucoup de perte de travail.

83
l0b0

L'un des avantages pour moi est la possibilité "d'ajouter" des fichiers progressivement. Avant de m'engager, j'examine chaque fichier. Une fois le dossier revu, je l'ajoute. Quand je git status ou git diff, git ne montre que les fichiers qui ont été modifiés et qui n'ont pas encore été ajoutés. Après avoir examiné tous les fichiers et les avoir ajoutés, je peux valider.

Alors oui, je trouve la zone de rassemblement très utile.

Et non, je n'utilise jamais git commit -a. Cependant, j'utilise souvent git add -u. De cette façon, je peux toujours visualiser ce qui doit être commis.

65
David

L'avantage est assez simple: il vous donne un contrôle total sur les fichiers que vous souhaitez valider quand. D'ailleurs, vous pouvez utiliser git add -p pour contrôler quelles lignes vous voulez valider.

21
Rein Henrichs

Un des avantages que j'aime est la possibilité de commettre une partie d'un changement. C'est-à-dire en utilisant git add -e. Je ne commets pas aussi souvent que je le devrais parfois, et la commande git add -e me permet de démêler mes modifications dans une certaine mesure.

1
leed25d