Venant d'un arrière-plan SVN, l'une des choses les plus difficiles à s'habituer lorsque vous travaillez avec des systèmes DVCS est la façon dont ils semblent tous considérer tout changement non engagé, comme une bombe à retardement.
Dans Mercurial, si vous essayez de récupérer des modifications et que vous avez des modifications non validées dans votre copie de travail, vous devez sauter à travers des cadres pour obtenir simplement la fusion des modifications entrantes. Essayez de changer de branche? Cela vous obligera à tout ranger et ensuite vous devrez immédiatement tout ranger à l'autre bout. (SVN n'a aucun problème avec l'un ou l'autre de ces scénarios.)
Git est à peu près la même chose. Je travaille côte à côte avec un autre développeur sur un projet, et j'ai juste essayé de choisir l'un de ses commits dans ma fourchette. Il a refusé de me laisser car j'ai des modifications non validées dans ma copie de travail, sur des fichiers complètement différents de ceux modifiés dans son commit. Il n'y a même pas d'option de fusion; apparemment, je dois d'abord cacher mes modifications!
Si une personne devait traiter quelque chose de complètement inoffensif avec une extrême prudence, je l'appellerais une "phobie", une peur irrationnelle qui devrait être considérée comme un trouble mental. Mais Git et Mercurial ont été conçus par deux équipes différentes de développeurs intelligents et rationnels, je dois donc me demander s'ils savent quelque chose que je ne connais pas.
Y a-t-il une raison technique qui justifie cette attitude vis-à-vis des changements non engagés? Et si oui, pourquoi le problème en question ne semble-t-il exister que sur les DVCS?
la source
Réponses:
CV
Ce n'est pas une phobie, c'est une application (parfois sévère) du respect des bonnes manières "s'engager souvent" (les utilisateurs SVN ont parfois peur de ce style)
Et, enfin,
hg qnew|qpop|qpush
c'est un petit prix juste pour la propreté et l'ordrela source
Lorsque vous fusionnez ou sélectionnez
git
, vous créez immédiatement un commit. L'opération n'est pas terminée tant que cette validation n'est pas terminée et ne fait pas partie de l'historique.Maintenant, que se passerait-il si
git
on vous permettait de masquer vos modifications non validées dans votre répertoire de travail? Vous auriez (plus ou moins) du mal à faire la différence entre les changements / conflits de fusion dont vous avez besoin pour gérer la fusion / sélection, et les changements que vous avez introduits vous-même. De plus, il vous serait presque impossible de tester ce que vous commettez réellement.Ainsi, forcer un répertoire de travail propre pour les situations de fusion aide à garder les choses simples et gérables. Après tout, tout ce que vous devez faire est de ranger vos modifications non validées avant la fusion et de les décompresser ensuite. Notez que dans le workflow
vous avez deux (!) opérations de fusion. Un qui fusionne votre dernier commit avec les modifications entrantes, et un qui fusionne vos modifications non validées avec le commit de fusion résultant. De cette façon, vous n'avez besoin que de fusionner deux choses en une seule, en évitant la confusion qui résulterait de la tentative de fusionner trois choses en une en une seule opération tout en essayant d'ignorer ces trois choses. Le
git stash
/git stash pop
rend facile et explicite que vous ignorez vos modifications non validées pour la fusion.la source