J'apprends git et j'ai remarqué qu'il comporte un processus de validation en deux étapes:
git add <files>
git commit
La première étape place les révisions dans ce qu'on appelle une "zone intermédiaire" ou "index".
Ce qui m'intéresse, c'est pourquoi cette décision de conception est prise et quels sont ses avantages?
Aussi, en tant qu’utilisateur git, faites-vous cela ou utilisez-vous simplement git commit -a
?
Je demande ceci car je viens de bzr (bazar) qui n'a pas cette fonctionnalité.
version-control
git
workflows
thomasrutter
la source
la source
git add -p
, vous pouvez choisir de valider une partie d'un fichier sans commettre une autre partie du même fichier .git status
et éventuellementgit push
. Pour tout le battage médiatique sur git, (et le code de partage GitHub est merveilleux), les pièces sont très ennuyeusesRéponses:
Diviser le travail en commets séparés. Vous avez probablement plusieurs fois ouvert un fichier pour écrire un correctif sur une seule ligne, mais vous avez en même temps remarqué que le formatage était incorrect, que certains documents pouvaient être améliorés ou que d'autres correctifs n'étaient pas liés. Avec les autres RCS, vous devez l'écrire ou le mettre en mémoire, terminer le correctif pour lequel vous êtes venu, le commettre, puis revenir pour réparer les autres éléments (ou créer un commet boule de boue avec des éléments non liés). . Avec Git, il vous suffit de tout corriger en même temps, puis de valider et de valider la ligne unique séparément, avec
git add -i
ougit-gui
.Ne casse 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 organisiez les événements lorsque la modification les améliorait et
checkout
(ou en modifiiez davantage) lorsque les modifications ne fonctionnaient pas. Vous n’avez pas à compter sur la fonctionnalité d’annulation de l’éditeur, vous pouvez utilisercheckout
le référentiel entier au lieu de fichier par fichier, ainsi que toute erreur de niveau fichier (telle que la suppression d’un fichier qui n’a pas été validé ou la sauvegarde + la fermeture mauvaise modification) n'entraîne pas beaucoup de travail perdu.la source
git add -i
commit à une étape? Il vous suffirait de sélectionner un groupe de fichiers (ou de lignes dans des fichiers) liés à une seule fonctionnalité et d'effectuer un commit. Ensuite, vous reviendriez et feriez un deuxième commit lié à une autre fonctionnalité.git-branch
manière typographique ( jovicailic.org/2017/04/vim-persistent-undo ). De plus, votre historique des annulations est automatiquement suivi chaque fois que vous passez en mode normal. Cela vous évite d'avoir à créer des "points d'annulation manuels". Pourquoi l'utilisation de vos éditeurs "annuler" les tampons n'est-elle pas aussi méthodique?L'un des avantages pour moi est la possibilité "d'ajouter" des fichiers progressivement. Avant de valider, je passe en revue chaque fichier. Une fois le fichier revu, je l'ajoute. Quand je
git status
ougit diff
, git ne me 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 préparation très utile.
Et non, je ne l'utilise jamais
git commit -a
. Cependant, j'utilise souventgit add -u
. De cette façon, je peux toujours visualiser ce qui doit être engagé.la source
L'avantage est assez simple: il vous donne le plein contrôle sur les fichiers que vous voulez valider quand. D'ailleurs, vous pouvez utiliser
git add -p
pour contrôler les lignes que vous voulez valider.la source
.gitignorelines
afin que vous puissiez apporter des modifications locales aux lignes individuelles qui pourraient survivre aux commits et rester intactes.app.conf
qui contient les éléments que vous souhaitez partager, puis undb.conf
élément que vous venez de mettre dans la liste .gitignore. Problème résolu. Si vous utilisez quelque chose de propriétaire, vous devriez vraiment chercher à obtenir quelque chose d'aussi simple. Ou faites-le passer par un pré-processeur dans un événement de pré-génération. Beaucoup de solutions là-bas.L’un des avantages que j’aime est la possibilité d’engager une partie du changement. C'est à dire, en utilisant git add -e. Je ne m'engage pas aussi souvent que je le devrais parfois, et la commande git add -e me permet d'annuler les modifications dans une certaine mesure.
la source